プロセス スケジューリングのコンテキストでは、各タイム スライス/クォンタムが終了した後にオペレーティング システムが介入しますか? たとえば、コンピューターがアイドル状態で、4 つのタスク t1、t2、t3、t4 が到着し、先着順でスケジュールされた場合、通常は t1、t2、t3、t4 が CPU 内にあると見なしますが、これは単純化ではありませんか? t1、OS、t2、OS、t3 OS t4 が実際に発生するのはなぜですか? これが本当であれば、各タイム スライス (つまりクォンタム) の後に OS が介入しますが、これは非常に非効率的ではありませんか?
答え1
必ずしもそうではありません。通常、スケジューラはクォンタムの有効期限が切れるとタスクの動的優先度を下げますが、それが依然として最も優先度の高いタスクである場合は、別のタスクが割り当てられます。ただし、一般的には、タスクが十分に長く実行されると、OS が引き継いで別のタスクに切り替えます。なぜそれが非効率的になるのでしょうか?
答え2
現代のオペレーティング システムでは、タイム スライスの長さは可変であると思います。スケジューラは、タイマー割り込みだけでなく、すべての割り込み (キーボード、マウス、タッチ スクリーン、ネットワーク、ディスク転送の完了など) を処理した後で呼び出されます。
大まかに言えば、スケジューラはプロセスのブロッキング システム コール間の時間の移動平均を推定するように設計されています。スケジューラはプロセス X に制御を渡す前に、プロセス X の移動平均よりわずかに長い時間に割り込みをかけるタイマーを設定します。スケジューラが次のブロッキング システム コールまでの時間をうまく推測できれば、プロセスの大部分はブロッキング システム コールを実行して CPU を自発的に解放することになります。
目標は、対話型プロセスに少しの計算を行わせ、ブロッキング システム コールを実行して低速デバイスからデータを要求し、データが返されたらすぐに再スケジュールすることです。スケジューラが 2 つのプロセス間でスケジュールを決定する必要がある場合は、他の条件がすべて同じであれば、ブロッキング システム コールをより頻繁に実行しているプロセスが優先されます。これにより、同時ブロッキング I/O 要求の数が最大化される傾向があり、システム全体のスループットが向上します。