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