「TASK_INTERRUPTIBLE」状態のプロセスコンテキストでカーネルプリエンプションが発生する可能性がありますか?

「TASK_INTERRUPTIBLE」状態のプロセスコンテキストでカーネルプリエンプションが発生する可能性がありますか?

プロセスが状態に設定されている場合、TASK_INTERRUPTIBLE他のカーネルコンポーネントはそれを先取りできますか?これが真であれば、プロセスがwake条件を確認できず、wakeする機会を逃した可能性があると思います。

答え1

ステータスは、TASK_INTERRUPTIBLEスケジューラを呼び出すときにジョブがスリープモードに移行する方法に関連しています。その名前は「中断可能な省電力モード」の略です。プリエンプションを制御しません(実際、LinuxはTASK_INTERRUPTIBLE(オプションで)プリエンプトされる前に制御します)。

プリエンプションはスリープモードではありません。 CPU で開始された実行ジョブは、休止状態ではなく実行可能です。

ジョブのスリープ状態が別のスリープタイプに設定されている間にジョブがプリエンプトされると、TASK_INTERRUPTIBLE完全な混乱につながる可能性があります。

2003年に、誰かがあなたが疑ったのと同じことを疑って、LKMLメーリングリストに投稿しました。

http://lkml.org/lkml/2003/4/14/262

カーネル開発者であるRob Loveのフォローアップとその他の議論をご覧ください。

ジョブはTASK_INTERRUPTIBLEプリエンプティブ実行キューに残る必要があります。これを達成するためのハッキング(2003年以降)が上記のスレッドで議論されました。

関連情報