Operations on Process
こんにちは
今日は、プロセスオペレーションについて触れていきたいと思います。早速ですが、まとめに入っていきたいと思います。
3、Operations on Process
多くのシステムでのプロセスは、同時に実行することが可能です。そして、動的に作られたり、削除されたりします。そのため、これらをコントロールするメカニズムを作る必要があります。
1)Process Creation(プロセス作成)
実行している間、プロセスは、いくつかの新しいプロセスを作る場合があります。親プロセス、子プロセスが順番に作成され、ツリーのような形をしています。
Process identifier(pid)
多くのOSが、ユニークなProcess identifierによって、プロセスを見分けています。
UnixやLinuxのシステムでは、psコマンドを使うことによって、プロセスリストをみることができます。例えば、このような感じです。
ps -el
このコマンドは、現在システムでアクティブ状態である全てのプロセスをみることができます。
一般的に、プロセスが子プロセスを作成するときは、子プロセスはある一定のリソースが必要になってくる場合があります。例えば、メモリやファイル、I/Oデバイスなどです。
さまざまなフィジカルやロジカルなリソースを供給するに加えて、親プロセスは初期データを子プロセスに渡さなければいけない場合があるかもしれません。
プロセスが新しいプロセスを作るとき、実行において2つの可能性が出てきます。
- 親は子と一緒に同時に実行され続ける。
- 親は子の実行が終わるまで待つ。
そして、新しいプロセスの2つのアドレススペースができると思います。
- 子プロセスは、親とまったく同じである。(同じプログラムとデータを持つ)
- 子プロセスはそれに読み込まれた新しいプログラムを持つ。
UNIXでは、それぞれのプロセスはプロセスIDによって見分けられています。新しいプロセスは、fork()によって作られます。新しいプロセスは、本来のプロセスのアドレススペースのコピーから成り立っています。
fork()システムコールが終わった後、2つのプロセスのうち1つが決まってexec()システムコールを使います。exec()システムコールは、バイナリファイルをメモリに読み込み、それが実行されます。
2) Process Termination(プロセス終了)
プロセスの最後のステートメントが実行され、exit()システムコールが使われることによって、OSがそのプロセスを削除するときプロセスは終了します。その時点で、プロセスはステータス値を待っている親プロセスに伝えるかもしれません。
終了の合図は、他の状況でもなることがあります。例えば、他のプロセス終了が原因となるケース、があります。
また、親プロセスがさまざまな理由によって、その子の1つを終了させることがあります。
- 子が使用限度を超えてしまった場合
- 子に割り当てられたタスクが必要では無くなった場合
- 親の実行が終わり、OSが子の実行を続けるのを許可しなかった場合
ゾンビプロセス
プロセスが終了するとき、そのリソースはOSによって割り当てが解除されます。しかしながら、プロセステーブルのそのエントリーは、親プロセスがwait()をコールするまでその場にい続けます。プロセスが終了しているけれども、その親プロセスがまだwait()をコールしていない状態をゾンビプロセスと言います。
*孤児プロセス
親プロセスが、wait()を実施しなかった場合どうなるのでしょうか?その場合、その子供たちは、孤児として残ってしまいます。
読んでいただき、ありがとうございました。明日は、「Interprocess Communication」についてです。
Discussion