【プリエンプティブスケジューリング】
プリエンプティブスケジューリング とは?
最終更新:
💡 OSが実行を中断して、次のタスクへCPUを渡す
OSが実行中のタスクを、そのタスクの自発的なCPU返却を待たずに中断し、別の実行可能なタスクへCPUを割り当てられる方式。時間切れや高優先度タスクの実行準備などが切り替えの契機になる。
📌 このページのポイント
- 実行中のタスクが自発的にCPUを譲らなくても、OSが切り替えられる
- 時間切れだけでなく、高優先度タスクが実行可能になる場合なども契機になる
- タイムスライスの有無や公平性は、スケジューリング方針による
- 切り替え可能な時点や遅延は実装によって異なり、期限内完了は別途検討する
プリエンプティブスケジューリングって何なの?
どうやって「交代」のタイミングを決めるの?
強制的に止められたタスクはどうなるの?
コンテキストスイッチで実行状態を保存し、後で復元して再開するよ。たとえばZephyrではCPUレジスタを保存・復元する。中断はタスクを終了させる操作ではなく、そのCPUでの実行をいったん交代することなんだ。
どんなOSで使われるの?
リアルタイムなら、最優先タスクは即座に動く?
高優先度へ切り替える方針は重要だけれど、待ち時間がゼロになる保証ではないよ。割り込み処理や切り替えを制限する区間、ロック待ちなども関係する。期限を守れるかは、処理時間と待ち時間を含めて確認するんだ。
弱点ってあるの?
まとめ:ざっくりこれだけ覚えればOK!
「プリエンプティブスケジューリング」って出てきたら「OSが実行中のタスクを中断し、別のタスクへCPUを渡せる方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Preemptive Scheduling」 = 先取り・横取りスケジューリング
💬 preemptは「先取りする・横取りする」という意味で、OSがプロセスからCPUを横取りするイメージだよ