2010年08月14日

タスクの状態遷移

 WindowsやLinuxなどのマルチタスクのOSでは、ユーザーが直接操作しているプログラム以外は特にやることもなく待機していることが多いです。また、1つのタスクが長らくCPU時間を奪ってはいけないため、プログラムを作るときは、他のタスクの動きを妨害しないように作ることが必要になる場面も出てきます。このあたりと関係してくるのがタスクの状態遷移です。
人気ブログランキング
 マルチタスクOSにおけるタスクの状態遷移を表したのが次の図です。
TaskStates.png
 まず、起動したプログラムは「実行可能状態」になり、CPUの割り当てがくるまでは何もできない状態になっています。この状態のタスクは、CPUの割り当てを「待っている」ともいえますが、待ち状態ではありません。

 そして、CPUの割り当てられているタスクのことを「実行状態」になっているといいます。CPUは1度に1つの命令しか実行できませんから(実行できないことになっていますから)CPU 1つあたり、実行可能状態になるタスクは1つだけです。ただし、マルチコアのCPUであればコアの数だけ実行状態のタスクがあります。

 マルチタスクのOSでは、1つのタスクが永遠にCPUを使い続けるわけにはいきません。ある程度の処理を実行したら他のプログラムが動作できるようにCPUの制御を渡さなければなりません。そのようにして、タスクは実行可能状態に遷移します。ちなみに、プリエンプティブでないマルチタスクであれば、他のプログラムに制御を移す命令を実行しない限りはそのまま実行し続けることもできますが、プリエンプティブなマルチタスクであれば強制的に他のプログラムに制御が移ります。

 「実行状態」は、その実行内容によって遷移先が3通りあります。ひとつは今出てきたように、処理の途中で他のタスクにCPUの制御を渡した場合の「実行可能状態」への遷移です。2つ目は「状態」といえるかどうか分かりませんが、すべての処理を終えてタスクが終了することです。3つ目は、「待ち状態」です。

 「待ち状態」はディスクの読み書き、人の操作などの入出力が必要になった場合に遷移してくる状態です。入出力が終わったら、実行可能状態へ遷移します。
web拍手 by FC2
posted by 北条利彦 at 07:19 | Comment(0) | TrackBack(0) | ソフトウェア | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。