TASK_INTERRUPTIBLE状態のプリエンプティブプロセスが実行キューに残る必要があるのはなぜですか?

TASK_INTERRUPTIBLE状態のプリエンプティブプロセスが実行キューに残る必要があるのはなぜですか?

私はLinuxカーネルに初めて触れました。

「Linuxカーネルについて」、279ページでは、著者はprev呼び出しプロセスに言及しながら、次のように述べていますschedule()

schedule()以前の状態を確認してください。実行可能ではなくカーネルモードでプリエンプトされていない場合(第4章の「割り込みと例外からの復帰」のセクションを参照)、実行キューから削除する必要があります。ただし、非ブロック保留信号があり、その状態がTASK_INTERRUPTIBLEの場合、この関数はプロセスの状態をTASK_RUNNINGに設定し、それを実行キューに保持します。

prevなぜ眠らずに実行キューに留まるべきですか?

prevカーネルモードで実行できず、プリエンプションが発生した場合はどうなりますか?

ベストアンサー1

上記の内容によると:

...非ブロック保留信号があり、状態がTASK_INTERRUPTIBLEの場合...

これを実行キューに保持することによって、プロセスは保留中の信号を処理する機会があります。プロセスは、眠る前に保留中の信号を処理する必要があります。

おすすめ記事