次の方法で共有


コンテキスト スイッチ

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

  1. プロセッサによって割り込まれた、または自発的に生成されたスレッドのコンテキストを保存します。
  2. スレッドが準備完了状態のままである場合は、優先順位レベルのキューの末尾に配置します。
  3. 準備完了のスレッドを含む最も優先度の高いキューを見つけます。
  4. キューの先頭にあるスレッドを削除し、そのコンテキストを復元して、実行を再開します。

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

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

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

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

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

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