私はLinuxカーネルに初めて触れました。
「Linuxカーネルについて」、279ページでは、著者はprev
呼び出しプロセスに言及しながら、次のように述べていますschedule()
。
schedule()
以前の状態を確認してください。実行可能ではなくカーネルモードでプリエンプトされていない場合(第4章の「割り込みと例外からの復帰」のセクションを参照)、実行キューから削除する必要があります。ただし、非ブロック保留信号があり、その状態がTASK_INTERRUPTIBLEの場合、この関数はプロセスの状態をTASK_RUNNINGに設定し、それを実行キューに保持します。
prev
なぜ眠らずに実行キューに留まるべきですか?
prev
カーネルモードで実行できず、プリエンプションが発生した場合はどうなりますか?
答え1
上記の内容によると:
...非ブロック保留信号があり、状態がTASK_INTERRUPTIBLEの場合...
これを実行キューに保持することによって、プロセスは保留中の信号を処理する機会があります。プロセスは、眠る前に保留中の信号を処理する必要があります。