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