I-6-9. プロセスのライフサイクル

プロセスが生成されてから終了して消滅するまでのライフサイクルについて解説する。プロセスの内部データ構造、状態遷移、プロセスグループ、プロセスを生成する方法など、プロセスのライフサイクルに関連する一連のトピックを紹介する。

【学習の要点】

* Linux上の全てのプロセスはC言語で言う構造体:task_structで管理され、プロセスが生成されるタイミングで確保されている。

* プロセスの生成は常に新しいものを生成しているのではなく、既存のプロセスを複製するかクローンを作成している。

* プロセスが生成されると、「生成」もしくは「新規」といった状態となり、その後「走行可能状態」「走行中状態」「ブロック状態」などに遷移して、最後には「終了」という状態になる。

図I-6-9. プロセスのライフサイクル

【解説】

1) プロセスの内部データ構造

Linux上の全てのプロセスはC言語での構造体:task_structで管理される。プロセスを生成するごとにこの構造体を1つ確保し、以降はこの構造体によりプロセスの管理を行う。以下にtask_struct構造体に含まれる情報を、いくつか紹介する

* メモリ管理構造体 - プログラムに対応する実行命令コードイメージの情報。

* プロセスの優先度 - これをもとに変動プライオリティが計算される。

* 変動プライオリティ - タイムスライスとして使われ、プロセス実行中に減ってゆく。

* コンテキスト - レジスタの内容。

* プロセスID - 識別番号。

* プロセスの親子関係

2) プロセスを生成する方法

オペレータからのコマンド入力などの指示や、アプリケーションプログラムからの生成命令などによって、プロセスは生成される。ただし実際は、プロセスは常に新しいものが生成されるのではなく、複製されるかまたはクローンが作られているだけである。

* プロセスの生成から実行までは、以下に示すシステムコールを呼び出す。

- fork() - 親プロセスの複製を生成

- exec() - 自分自身を新しいプログラムに置き換えて実行

3) プロセスのライフサイクルプロセスには以下で定義される状態があり、状態遷移はカーネルプロセスによって制御されている。

* プロセスの生成プロセスが新規に作成されるとこの状態となり、走行可能状態に遷移されるのを待つ。状態遷移はスケジューラが行う。

* 走行可能(待ち状態)

メインメモリにロードされCPUによる実行またはリソースの割り当てを待っている状態。

* 走行中

CPU上で実際に実行されている状態。プログラムが終了すると終了状態となる。資源が不足した場合はブロック状態にもなる。

* ブロック状態

資源不足が発生し、かつ新しい資源の確保ができない状態。

* 終了状態

必要な処理が完了することにより、終了状態となる。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。