0

unistd.h で宣言されている sleep 関数について質問があります。

CFS スケジューラを使用するとします。

実行する準備ができているプロセスがあり(これを「READY」状態と呼びましょう)、実行するために選択され、現在実行中です(いわゆる「RUNNING」状態)。

RUNNING 状態での実行中に、10 秒間、またはシグナルが配信されるまで、またはいずれか早い方までスリープ状態にする sleep(10) などのスリープ ステートメントに遭遇します。

sleep(10) が実行されている場合、プロセスは READY 状態にあるか、RUNNING キューで元の優先度に戻されるか、WAIT キューに置かれます。

イベントの正しい順序を視覚化できません。ある考えでは、READY キューに残っていると考えられますが、別の考えでは、何らかのタイマーの期限切れを待って WAIT キューに入れられます。

これがどのように機能するか、または私の質問に何か問題がある場合はお知らせください。ありがとう

4

1 に答える 1

1

スリープの期間に依存すると思います。つまり、待機がビジーの場合は実行でき、待機が長い場合は待機キューになります。また、プロセスを長時間スリープ状態にしてその状態を確認することで、これを確認できるはずです。

于 2013-03-14T00:39:24.923 に答える