プロセスを構成する資源

以下にこのあとの説明で使用する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から起動されたコマンドが何も考えずに、そのまま標準入出力を利用したり、またパイプやリダイレクションを利用したりすることができる。

img2.gif

(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST
1