コンテキスト スイッチ
スケジューラは、優先度レベルごとに実行可能スレッドのキューを保持します。 これらは、準備完了スレッドと呼ばれます。 プロセッサが使用可能になると、システムは コンテキスト 切り替えを実行します。 コンテキスト スイッチの手順は次のとおりです。
- 実行を完了したばかりのスレッドのコンテキストを保存します。
- キューの最後に実行を完了したばかりのスレッドを、その優先順位に合って配置します。
- 準備完了のスレッドを含む最も優先度の高いキューを見つけます。
- キューの先頭にあるスレッドを削除し、そのコンテキストを読み込んで実行します。
次のクラスのスレッドは準備ができていません。
- CREATE_SUSPENDED フラグを使用して作成されたスレッド
- SuspendThread または SwitchToThread関数を使用して実行中にスレッド停止しました
- 同期オブジェクトまたは入力を待機しているスレッド。
中断またはブロックされたスレッドが実行の準備ができるまで、スケジューラは優先順位に関係なく、プロセッサ時間を割り当てません。
コンテキスト切り替えの最も一般的な理由は次のとおりです。
- タイム スライスが経過しました。
- 優先順位の高いスレッドを実行する準備ができました。
- 実行中のスレッドは待機する必要があります。
実行中のスレッドが待機する必要がある場合は、タイム スライスの残りの部分を放棄します。