Wednesday, August 26, 2009

ArmadilloではuCLinuxを使用している.uCLinuxではfork()を使用することができない!
MMU(Memory Management Unit)がないからだ.もっと早く気付けばよかったのに!
こんな常識な話知らない自分まだまだだな~

fork()の代わりにvfork()を使用できるらしいが,子プロセスがexec系,exit()を呼び出すまで親プロセスはsuspendする.これじゃマルチプロセスじゃねぇ!じゃん

まぁ,pthreadを使用することだな・・・

参考:
ソフト・マクロのCPUでLinuxを動かす(後編)OSの実装とネットワーク対応機器への応用

Thursday, August 20, 2009

標準Cライブラリの実装 strerror関数

see also: http://www.kijineko.com/doc/jsp/strerror_8c-source.html
標準Cライブラリの実装 strerror関数: "#include

char *strerror(int errnum)
{
char *result;
switch (errnum)
{
case 0:
result = 'No error';
break;
case EDOM:
result = 'Domain error';
break;
case ERANGE:
result = 'Range error';
break;
case EILSEQ:
result = 'Illegal sequence';
break;
default:
result = 'Unknown error';
break;
}
return result;
}"

Thursday, August 13, 2009

IPC - プロセス間通信に関するメモ

■ 共有メモリいろいろ
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

int shmget(key_t key, size_t size, int shmflg);
void *shmat(int shmid, void *shmaddr, int shmflg);
int shmdt(void *shmaddr);
int shmctl(int shmid, int cmd, struct shmid_ds *buf);

shmget() は共有メモリ作成
shmat() は共有メモリに読み書き許可を与える(アタッチする)
参考サイト:
*http://www.gadgety.net/shin/tips/unix/ipc/shared.html

手順:
●共有メモリを準備プロセス(アクセスもする)
shmget(): 共有メモリ作成
shmat() : 読み書き許可をアッタチ
読み書きを行い
shmdt() : 共有メモリを分離する
shmctl(): 共有メモリを破棄

●共有メモリにアクセスするプロセス
必要であれば ftok() : キーを生成 (fork()を使用して,子プロセスはいらない)
shmget() : 生成したキーから共有メモリのidを取得
shmat() : 読み書き許可をアタッチ
shmdt() : 共有メモリを分離
終わり

■ セマフォいろいろ
  • key_t ftok(const char *pathname, int proj_id)
共有メモリを使用するときこの関数を使ってキーを生成する理由についてわからなくて,調べてみた.まぁ理由は単純だけどなんでわからんかっただろう?

プロセス間通信のとき,たとえば共有メモリを使用するときとか,セマフォを使用するとき,IDを使用してアクセスするが,共通するリソースを使用したいときはプロセス(複数)みんな同じIDを使用しないとアクセスできない.この関数の引数はプロセス間の一つのプロトコルみたいなもので,みんな前もって同じpathnameとproj_idを使用してキーを生成すると決めれば,同じキーを使用することができ,共有リソースにアクセスすることができる.

参考サイト:
* http://d.hatena.ne.jp/s-kita/20080710/1215696366
* http://www.gadgety.net/shin/tips/unix/ipc/semaphore.html

■ --

■ --

■ --