差分

移動先: 案内検索

プロセス管理

259 バイト追加, 2008年11月20日 (木) 14:14
/* プロセスのじょう */
=== プロセスのじょう プロセスの状態 ===
皆さんが動かしているデスクトップレベルでは、いつもそんなに激しく色々なプロセスが同時にCPUを奪いあっている状態ではありません。動いているプロセスのほとんどは入力を待つSPLEEP状態です。コマンドtopを使ってプロセスの状況を見てみましょう。
% top
18:49:03 up 49 days, 4:38, 8 users, load average: 2.00, 0.82, 0.31
STATの部分はプロセスの状態を表しています。一文字目がプロセスの状態を示していて、RはRUNNING状態、S はSLEEP状態という意味です。Dの場合は割込みが利かないSLEEP状態、Zはゾンビ状態、Tがストップ状態です。STATの部分はプロセスの状態を表しています。一文字目がプロセスの状態を示していています。  * R : RUNNING状態 (実行している、あるいは実行待ちの状態) * S : SLEEP状態 (I/O待ちなどの状態) * D : 割込みが利かないSLEEP状態 (sleep関数を呼んでSLEEPしている状態など) * Z : ゾンビ状態 (終了したがまだ親プロセスが終了処理を終えていない状態) * T : ストップ状態 (Control-Z/SIGSTOPによるプロセス停止の状態)
ほとんどのSLEEP状態は場合は割込みがあればすぐに動き出すINTERRUPTIBLEなタイプです。カーネル中で解除されない限りSLEEP状態を続けるUNITERRUPTIBLEのような状態はデバイスをロックするなど特別な場合に使われるだけで、あまり多くはありません。ほとんどのSLEEP状態は場合は割込みがあればすぐに動き出すINTERRUPTIBLEなタイプです。カーネル中で解除されない限りSLEEP状態を続ける UNITERRUPTIBLE のような状態はデバイスをロックするなど特別な場合に使われるだけで、あまり多くはありません。
たとえばコンパイラがソースコードをコンパイルするプロセスでも実行中、待機中、イベント待ち状態を遷移します。なぜならばコンパイラは、ファイル入出力を発生させるので、その入出力が発生している最中はイベント待ち状態になっています。ファイル入出力に10msかかったとして、その間はCPUは遊んでいる状態になります。10msというは今日のCPUにとっては、長い長い暇な時間で、かなり大量の計算ができます。ですから前のプロセスがCPU専有時間が過ぎたので次のプロセスに順番を与える以外にも、次のプロセスがCPUを使う状態が多数発生します。たとえばコンパイラがソースコードをコンパイルするプロセスでも実行中、待機中、イベント待ち状態を遷移します。なぜならばコンパイラは、ファイル入出力を発生させるので、その入出力が発生している最中はイベント待ち状態になっています。ファイル入出力に10msかかったとして、その間はCPUは遊んでいる状態になります。10msというは今日のCPUにとっては、長い長い暇な時間で、かなり大量の計算ができます。ですから前のプロセスがCPU専有時間が過ぎたので次のプロセスに順番を与える以外にも、次のプロセスがCPUを使う状態が多数発生します。
=== プロセスの生成 ===
匿名利用者