出力の状態は、top
スリープがS
中断される可能性があることを示します。
スケジューラが準備され、CPUで実行されるのを待つプロセスの状態は何ですか?それS
以外のものですか?
地位の重要性はありますかidle
?それでは、スケジューラが実行を待つようにCPUにスケジュールしたプロセスと同じ状態ですか?
答え1
これtop
マンページ与えられた答え(「プロセス状態」の説明):
ワット:S- プロセスステータス
ジョブの状態は、次のいずれかです。
- 'D' = 中断のない睡眠
- 'R' = 実行中
- "S" = 睡眠
- 'T' = 追跡または停止
"Z" = ゾンビ
実行中とマークされたジョブは、「実行準備」とより正確に見なされるべきです。対応する task_struct は単に Linux 実行キューに表示されます。真のSMPシステムがなくても、待ち時間間隔と上部の良い値に応じて、この状態で多くのタスクを見ることができます。
実行する準備ができたプロセスは と表示されますR
。本当にアイドルプロセス、つまりI / Oを待っている間、ブロックされていないプロセスは通常としてマークされますS
。 I / Oを待つプロセスはでマークされますD
。 (完全ではなく、他の待ち時間も表示されますD
。)
実行中のプロセスと実行する準備ができているプロセスを区別する方法がわかりません。
厳密に言えば、スリップタイプは可能なシグナル伝達に関連しています。プロセスが実行中または停止していない場合はスリープ状態、信号がすぐに転送できる場合は「標準」スリープ、それ以外の場合は中断されないスリープです。バラよりhttps://stackoverflow.com/questions/223644/what-is-an-uninterruptable-process詳細については。
答え2
スケジューラは、プロセスが現在実行できない理由には興味がありません。
S
この状態は、プロセスが現在完了するために外部イベントを要求するシステムコールを呼び出すたびに使用されます。システムコール自体が外部イベント(例:コールread
)を発生させたのか、それとも待機したのか(例select
:またはpoll
)。
WCHAN
で列を有効にすると、プロセスがどのシステムコールを待っているかを確認できますtop
。
この状態は、今日ではややまれになっており、D
通常、潜在的なデータ破損を引き起こさずに現在のシステムコールを簡単に停止できない場合に使用されます。悪名高い例D
は、サーバーが受信または受信していない可能性がある要求を中断する方法がないため、すべてのファイル操作中に状態に入るNFSクライアントです。より積極的なキャッシュを使用すると、ユーザープロセスが他のタスクを実行している間にキャッシュ層が要求を表示できるようになりました。
答え3
Sはアイドル状態を意味します。 Sは「スリープ」を意味します。プロセスがアイドル状態になる唯一の方法は、一部のイベントがプロセスを起こすのを待つことです。予約を待つプロセスはアイドル状態ではありません。やることがあるので予約されます。
Rは、実行可能、つまりユーザードメインコード(つまりプロセス自体のコード)を実行するスケジューラキューのプロセスを表します。プロセスは、現在実行中かどうかに関係なく実行可能です。システム内では、「現在実行中」と「実行予定」の違いは観察できません。これは、いつでも観察を実行するプロセスが実行中であるためです(したがって、状態によってはD状態でもR状態でもかまいません)。オペレーティングシステムとプロセスが状態を観察するために使用する方法)「現在の実行」と「スケジュールされた実行」の違いを観察するには、カーネルデバッガが必要です。
第3の重要な状態は「装置」を意味するDである。これは、プロセスが使用中であるがシステムコール内にあるときの状態です。自分のコードを実行するのに忙しいプロセスは状態Rにあります。システムコール中で、呼び出しからイベントが返されるのを待つプロセスは状態Sにある。 Dは、システムコール中に中断できない操作(カーネルデータ構造の操作など)を実行したり、ハードウェアデバイスとデータをやり取りしたりするプロセスの状態です。一般に、状態Dは寿命が短いため、問題が発生しない限り頻繁に観察されない。
答え4
Ps
同様のプロセス状態記述が提供される。
PROCESS STATE CODES Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process: D uninterruptible sleep (usually IO) R running or runnable (on run queue) S interruptible sleep (waiting for an event to complete) T stopped, either by a job control signal or because it is being traced Z defunct ("zombie") process, terminated but not reaped by its parent
(古い内容は省略しました)
ps -ax -o state,wchan,cmd,pid | tail -n+1| sort |less
状態別にソートされたプロセスの良いスナップショットを提供する必要があります。
このフィールドには、プロセスの状態をより詳細に指定するwchan
待機チャネルが表示されます。state
これにより:
ps -o state,wchan,cmd,pid | tail -n+1| sort |less
同じ情報が表示されますが、端末セッションのプロセスについてのみ表示されます。現在の端末セッションのバックグラウンドでさまざまなプロセスを開始し、現在の状態と待機しているチャネルを確認できます。
#this will be waiting on a timer (S hrtime)
sleep 200 &
touch file
#this will get the file lock to `file`, start start sleep and will be waiting on it to complete (S wait)
flock file -c "sleep 100" &
#this won't start sleep because it will be waiting on the file lock (S flock)
flock file -c "sleep 100" &
#ps will be running and the other guys will be waiting o pipe_w
ps -o state,wchan,cmd,pid | tail -n+1| sort |less
技術的にリソースを待たないプロセスは内部的に実行されますが、まだそのS
状態で表示されます(=スケジューラがリソースをプロセッサコアに配置するのを待っています)。
実際、「実行中」のプロセスはほんの数にすぎず、その数は保持しているCPUコアの数によって制限されます。