プロセスがカーネルモードにあるとき、優先順位はプリエンプションを構成しますか?
優先順位がそれぞれ3と5の2つのプロセスがあるとします。明らかに、ユーザーモードでは、優先順位5プロセスが優先順位3プロセスによってプリエンプトされる可能性があります。どちらもカーネルモードになっているとどうなりますか?
IO待機、長い時間がかかるシステムコール、同じCPUで発生する割り込みなど、カーネルプリエンプションのための他の機会は何ですか?
答え1
すべてのスケジューリング決定はカーネルモードで行われます。プロセスがユーザーモードで実行されている場合、カーネルが再制御されるまで、次のスケジューリングポイントは発生しません。
プロセス優先順位はさまざまな方法でスケジュールを決定するために重要な役割を果たしますが、優先順位の高いプロセスがスケジュールに影響を与える可能性がある1つの明確な方法があります。ジョブが実行可能になるとcheck_preempt_curr
フック呼び出されると、フックは、新しく実行中のジョブが現在実行中のジョブよりも優先順位が高い場合、スケジュールの変更を要求します。これいいえスケジュール変更は直ちに実行されますが、次回のスケジュール変更可能性があるときにこれを考慮しなければならないという信号です。これは通常、ユーザースペースを終了したときに発生します(例を参照)。exit_to_usermode_loop
x86)、まもなく。他のジョブが実行するためにさらに「価値のある」スケジューラーが実行されている場合、スケジュールを変更しても、新しく実行されるジョブのスケジュールが再調整されないことがあります。
プリエンプションは、プリエンプションポイントに到達するたびに、または遅延が短いコアでコアが重要セクションにないコードを実行するたびに発生します。
バラよりさまざまなプリエンプション構成オプション、機能__schedule
文書化と完全に公正なスケジューラに関するドキュメントもっと学ぶ。