差分

移動先: 案内検索

プロセス管理

34 バイト追加, 2007年10月25日 (木) 11:25
/* プロセスの状態 */
| ---A-->
実行中 <--B--- 待機中<----+<--- 新しいプロセス
| | +---C--->イベント待ち----+ | |
+------>一時停止 -------+
プログラムの状態遷移を単純化してみましょう。プログラムは生成後、消滅までのあいだ状態A、B、Cを繰り返します。
 
* A : 割り当てられたCPUリソースを使ったので、CPUでの実行状態から待機状態になる。この時、CPUリソースが使える状態になれば、すぐに実行状態に戻れる。
* C : 入力などのイベントのために待ち状態になっている。
 
ここでのストップ / 一時停止(STOPPED)はたとえばシェル上でコントロールZを押してSIGSTOPを発生させプログラムを停止させるといった状態です。
 
さて先程例に出したπの計算をしている同時に3つ動かしているプログラムは、遷移AとBをいったり来たりしているはずです。待機中(READY状態)のプロセス数を示すロードアベレージは1.0を越えて徐々に増えていき最後には3.0を越えるはずです。
 
==== プロセスの状況 ====
たとえばコンパイラがソースコードをコンパイルするプロセスでも実行中、待機中、イベント待ち状態を遷移します。なぜならばコンパイラは、ファイル入出力を発生させるので、その入出力が発生している最中はイベント待ち状態になっています。ファイル入出力に10msかかったとして、その間はCPUは遊んでいる状態になります。10msというは今日のCPUにとっては、長い長い暇な時間で、かなり大量の計算ができます。ですから前のプロセスがCPU専有時間が過ぎたので次のプロセスに順番を与える以外にも、次のプロセスがCPUを使う状態が多数発生します。
 
=== プロセスの生成 ===
匿名利用者