【プリエンプティブスケジューリング】

プリエンプティブスケジューリング とは?

💡 先生が「はい交代!」と強制的にバトンタッチさせる司会者型スケジューリング
📌 このページのポイント
プリエンプティブスケジューリング 時間 → CPU プロセスA 割り込み! プロセスB 割り込み! プロセスC 割り込み! プロセスA タイムスライス OS スケジューラが強制切り替え プロセスA プロセスB プロセスC タイマ割り込み
プリエンプティブスケジューリングのイメージ
ひよこ ひよこ

プリエンプティブスケジューリングって何なの?

ペンギン先生 ペンギン先生

OSが「はい、あなたの時間は終わり!次の人に交代!」と、実行中のプロセスを強制的に中断してCPUを別のプロセスに渡す仕組みだよ。学校の授業で先生がタイマーを使って発表者を交代させるようなイメージだね。

ひよこ ひよこ

どうやって「交代」のタイミングを決めるの?

ペンギン先生 ペンギン先生

代表的なのはタイムスライス方式で、各プロセスに一定時間(例: 数十ミリ秒)を割り当てて、時間が来たらタイマ割り込みで強制切り替えするんだ。優先度ベースの方式だと、高優先度のプロセスが来た瞬間に切り替わることもあるよ。

ひよこ ひよこ

強制的に止められたプロセスはどうなるの?

ペンギン先生 ペンギン先生

コンテキストスイッチという仕組みで、レジスタやプログラムカウンタの状態をメモリに退避しておくんだ。だから次にそのプロセスの番が来たら、中断したところからそのまま再開できるよ。

ひよこ ひよこ

全部のOSがこの方式を使っているの?

ペンギン先生 ペンギン先生

現代の汎用OSはほぼすべてプリエンプティブ方式だよ。WindowsLinux、macOSみんなそう。一方、ノンプリエンプティブスケジューリングプロセスが自発的にCPUを返すまで待つから、1つのプロセスCPUを独占するリスクがあるんだ。

ひよこ ひよこ

リアルタイムOSでも同じ仕組みなの?

ペンギン先生 ペンギン先生

リアルタイムOSではさらに厳密で、優先度の高いタスクが発生したら即座にコンテキストスイッチが起きるように設計されているよ。車のエアバッグ制御や医療機器のように、数ミリ秒の遅れが許されない場面では「いつでも最優先タスクにCPUを渡せる」保証がとても重要なんだ。

ひよこ ひよこ

プリエンプティブにも弱点ってあるの?

ペンギン先生 ペンギン先生

コンテキストスイッチ自体にわずかなオーバーヘッドがかかるのと、共有リソースへのアクセス中に切り替わると競合状態が起きやすくなるんだ。だからロックやセマフォ排他制御が必要になる。強制切り替えの代償として同期処理が複雑になるのが、プリエンプティブ方式の宿命だね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「プリエンプティブスケジューリング」って出てきたら「OSが強制的にプロセスを切り替える方式」と思えればだいたいOK!
📖 おまけ:英語の意味
「Preemptive Scheduling」 = 先取り・横取りスケジューリング
💬 preemptは「先取りする・横取りする」という意味で、OSがプロセスからCPUを横取りするイメージだよ
← 用語集にもどる