ラウンドロビンスケジューリングとコンテキスト切り替えは内部的にどのように機能しますか?

ラウンドロビンスケジューリングとコンテキスト切り替えは内部的にどのように機能しますか?

ラウンドロビンスケジューリングを使用して、カーネルはさまざまなプロセス/タスクに時間を提供します。

タイマーがタイムアウトすると、カーネルがタイマーを初期化し、現在の操作が中断されてからカーネルが制御権を持つようになります。

カーネルは、新しいタスクをスケジュールするためにタイマータイムアウト割り込みを使用する必要があることをどうやって知ることができますか?スケジューラだけでなく、さまざまな目的で異なるタイマーを使用している場合はどうなりますか?さまざまな割り込みサービスルーチンはどこに行きますか?よろしくお願いします。

答え1

>= 2.6.23 linux CFSで実行されているスレッドに関する回答SCHED_RRスケジューリング戦略


カーネルは、さまざまなプロセス/タスクの時間を提供します。

これは完全に正確ではありません。説明を次のように変更すると、よりよく理解できます。各スレッドについて、スケジューラは一定量の時間を計算します。

タイマーがタイムアウトすると、カーネルがタイマーを初期化し、現在の操作が中断されてからカーネルが制御権を持つようになります。

これは間違っています。前述のように、スケジューラはいくつかの時間値のみを計算します。直接接続されたタイマーはなく、その時間に達してもタイマー割り込みはトリガされません。

大丈夫です!スケジューラはIRQがトリガされるたびに実行されます。これは、待ち時間に関連する最悪の場合に少なくともCPU_HZ周波数で発生する必要があります。スケジューラが実行されるたびに実行キューを考慮し、そのキューを再計算します。レッドブラックツリー

スケジューラの実行中にSCHED_RRジョブが実行中で、他のすべてのSCHED_RRジョブがブロックされ(イベントを待っている間)、優先順位が高い他のリアルタイムスケジュールジョブを実行できない場合...ジョブはディスパッチされません。 、関連時間より長く実行できます

他のSCHED_RRジョブを実行できる場合は、実行中のジョブがその時間以上のCPU時間を取得した場合、そのジョブはスケジュールされてキューの後ろに投げられ(優先順位が最も低い)、実行可能ジョブを準備します。

IMHOあなたの最後の質問はこの質問のポイントとは無関係で、他のスレッドの一部として残すことをお勧めします。

関連情報