以下にこのあとの説明で使用するtask_struct構造体の主なメンバを示す。
主なメンバ
struct task_struct {
struct files_struct* files; //ファイルディスクリプタ
struct signal_struct* sig; //シグナルハンドラ
struct mm_struct* mm; //メモリ管理モジュール
long stat //プロセス状態
struct list_head runlist; //RUNキュー接続用
long priority; //ベースプライオリティ
long counter; //変動プライオリティ
char comm[]; //コマンド名
struct thread_struct tss; //コンテキストセーブ域
};
forkにより新しいプロセスが生まれた場合、全ての資源のコピーを行う。ただし、空間メモリはCopy-On-Writeとし、次に書き込みアクセスがあるときまでコピー処理を送らせている。ファイルに関してはファイルディスクリプタのコピーのみを行いfile構造体は共有する。この仕組みのお蔭でshellから起動されたコマンドが何も考えずに、そのまま標準入出力を利用したり、またパイプやリダイレクションを利用したりすることができる。
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1