プロセス管理(4週目のOSコース)


Process Management


この文章は以下の授業を聞いてまとめたものです.
授業情報:オペレーティングシステム/梨花女子大学クラス孝経
レッスンリンク
 

1.プロセスの作成


  • 書き込みコピー(COW)技術

  • 親プロセスサブプロセスの作成

  • プロセスツリーの作成(階層)

  • プロセスにリソースが必要です
  • オペレーティングシステムから受信
  • 親と共有

  • リソース共有
  • 親子が全ての資源を共有するパターン
  • 部分共有モード
  • 全く共有していない型番

  • 実行
  • 親子共存モード
  • 親が子供を待つ待ちパターン

  • アドレス空間
  • 子どもが親のスペースをコピー(バイナリとOSデータ)
  • 子どもたちがそのスペースに新しいプログラムをアップロード

  • Unixの例
  • fork()システムコール生成新フロー
  • ダイレクトコピー親(PID+バイナリを除く)
  • アドレス空間割付
  • fork後続exec()システムコールで新プログラムをメモリにアップロード

  • プロセスは最後のコマンドを実行してオペレーティングシステムに通知する(exit)
  • 子供が親に出力データを送信(VIAwait)
  • プロセス中の各種リソースをオペレーティングシステムに返却

  • 親プロセス終了子プロセス(abort)
  • 子どもの資源配分が限界を超えた島
  • 子どもに割り当てられたタスクは不要
  • 親脱退
  • オペレーティングシステムは、親プロセスの終了時に子プロセスを継続させない.
  • 段階的終了
  •  

    2.fork()システムコール


    A Process is created by the fork() system call.
  • creates a new address space that is a duplicate of the caller.
  • int	
    	main()
    {
    	int		pid;
    
    	pid = fork();
    	if (pid == 0)
    		printf("Hello, I am child!\n");
    	else if (pid > 0)
    		printf("Hello, I am parent!\n");
    }
     

    3.exec()システムコール


    A process can execute a different program by the exec() system call.
  • replace the memory image of the caller with a new program.
  • int
    	main()
    {
    	int		pid;
    
    	pid = fork();
    	if (pid == 0)
    	{
    		printf("Hello, I am child! Now I'll run date.\n");
    		execlp("/bin/date", "/bin/date", (char *)0);
    	}
    	else if (pid > 0)
    		printf("Hello, I am parent!\n");	
    }
     

    4.wait()システムコール


    プロセスAがwait()システムプロトコルを呼び出すと

  • カーネルはプロセスAをchild終了までスリープします.(ブロック状態)

  • Child processが終了すると、カーネルはプロセスAを起動します.(準備完了ステータス)

  •  

    5.exit()システムコール


    プロセス終了

    5-1. 自動終了


  • 最後の文を実行した後、exit()システムで呼び出します.

  • コンパイラは、プログラムに明記することなく、メイン関数を戻り位置に配置します.
  • 5-2. 非自発的終了


  • 親プロセス強制終了子プロセス
  • サブプロセスが制限を超えたリソース要求
  • 子どもに割り当てられたタスクは不要

  • キーボードがkill、breakなどを叩く.

  • 親が終了した場合
  • 親プロセスが終わる前に子供が先に終わる
  •  

    6.プロセスに関するシステムプロトコル

  • fork() : create a child (copy)
  • exec() : overlay new image
  • wait() : sleep until child is done
  • exit() : frees all the resources, notify parent
  •  

    7.プロセス間コラボレーション


    7-1. 独立プロセス

  • プロセスにはそれぞれのアドレス空間があり、原則として1つのプロセスが他のプロセスの実行に影響しない
  • 7-2. コラボレーションプロセス

  • プロセス連携機構により、一つのプロセスが他のプロセスの実行に影響を与えることができる
  • 7-3. プロセス間コラボレーションメカニズム


  • メッセージの転送方法
  • メッセージング:カーネル経由でメッセージを伝える

  • アドレス空間の共有方法
  • 共有メモリ:共有メモリメカニズムにより異なるプロセス間でアドレス空間を共有できるようにする
  • 踏面:踏面は実際には1つのプロセスであるため、プロセス間での連携は困難であるが、同じプロセスを構成するスレッド間でアドレス空間を共有するため、連携が可能である
  •  

    8. Message Passing


  • Message system
  • プロセス間で共有変数を使用せずに通信するシステム

  • Direct Communication
  • 通信するプロセスの名前を示す
  • Indirect Communication
  • メールボックス(またはポート)で間接的にメッセージを伝える

  •  

    9. Interprocess Communication