コンテキスト スイッチ

スケジューラは、優先度レベルごとに実行可能スレッドのキューを保持します。 これらは 準備完了スレッドと呼ばれます。 プロセッサが使用可能になると、システムは コンテキストスイッチを実行します。 コンテキスト スイッチの手順は次のとおりです。

  1. 実行を完了したばかりのスレッドのコンテキストを保存します。
  2. キューの最後に実行を完了したばかりのスレッドを、その優先度に合って配置します。
  3. 準備完了スレッドを含む最も優先度の高いキューを見つけます。
  4. キューの先頭にあるスレッドを削除し、そのコンテキストを読み込んで実行します。

次のクラスのスレッドは準備ができていません。

  • CREATE_SUSPENDED フラグを使用して作成されたスレッド
  • SuspendThread 関数または SwitchToThread 関数を使用して実行中にスレッドが停止しました
  • 同期オブジェクトまたは入力を待機しているスレッド。

中断またはブロックされたスレッドが実行できる状態になるまで、スケジューラは優先度に関係なくプロセッサ時間を割り当てません。

コンテキスト切り替えの最も一般的な理由は次のとおりです。

  • タイム スライスが経過しました。
  • 優先度の高いスレッドを実行する準備が整いました。
  • 実行中のスレッドは待機する必要があります。

実行中のスレッドが待機する必要がある場合は、タイム スライスの残りの部分を放棄します。