差分

移動先: 案内検索

プロセス管理

17 バイト追加, 2013年11月10日 (日) 17:49
/* プロセスの状態 */
皆さんが動かしているデスクトップレベルでは、いつもそんなに激しく色々なプロセスが同時にCPUを奪いあっている状態ではありません。動いているプロセスのほとんどは入力を待つSPLEEP状態です。コマンドtopを使ってプロセスの状況を見てみましょう。
<tt><PRE>
% top
18:49:03 up 49 days, 4:38, 8 users, load average: 2.00, 0.82, 0.31
2 root 9 0 0 0 0 SW 0.0 0.0 0:00 keventd
3 root 19 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0
</PRE></tt>
現在80プロセスが動いていて、待機中75、実行中5、終了待ち0、ストップ0です。
STATの部分はプロセスの状態を表しています。一文字目がプロセスの状態を示していています。
* R : RUNNING状態 (実行している、あるいは実行待ちの状態) * S : SLEEP状態 (I/O待ちなどの状態) * D : 割込みが利かないSLEEP状態 (sleep関数を呼んでSLEEPしている状態など) * Z : ゾンビ状態 (終了したがまだ親プロセスが終了処理を終えていない状態) * T : ストップ状態 (Control-Z/SIGSTOPによるプロセス停止の状態)
なぜならばコンパイラは、ファイル入出力を発生させるので、その入出力が発生している最中はイベント待ち状態になっています。ファイル入出力に10msかかったとして、その間はCPUは遊んでいる状態になります。
10msというは今日のCPUにとっては、長い長い暇な時間で、かなり大量の計算ができます。
ですから前のプロセスがCPU専有時間が過ぎたので次のプロセスに順番を与える以外にも、次のプロセスがCPUを使う状態が多数発生します。このようにプロセスがCPU専有時間が過ぎたので次のプロセスに順番を与える以外にも、他のプロセスがCPUを使う状態が数多く発生します。
=== プロセスの生成 ===
匿名利用者