最終更新日:2026年7月16日
fe fe-technology operating-system
まず結論
プリエンプティブスケジューリングとは、実行中のタスクより優先度の高いタスクが実行可能になったとき、OSがCPUを取り上げて高優先度タスクへ切り替える方式です。
基本情報技術者試験では、次のように判断します。
低優先度タスクを実行中
↓
高優先度タスクが起動
↓
実行中タスクを中断
↓
中断されたタスクは実行可能状態へ
↓
高優先度タスクを実行
特に重要なのは、中断されたタスクは待ち状態ではなく、実行可能状態へ戻るという点です。
直感的な説明
病院の診察をイメージすると分かりやすいです。
通常の患者を診察中に、より緊急度の高い患者が来た場合、診察をいったん止めて、緊急患者を先に診ます。
患者Bを診察中
↓
より緊急度の高い患者Aが来る
↓
Bはいったん待機列へ戻る
↓
Aを先に診察する
このときBは、検査結果待ちなどで動けないわけではありません。
単に診察の順番を譲っただけなので、CPUが空けばすぐ再開できます。
これが、実行可能状態です。
定義・仕組み
リアルタイムOSや一般的なOSでは、複数のタスクを切り替えながら実行します。
プリエンプティブ方式では、OSが実行中タスクのCPU使用権を強制的に取り上げることがあります。
代表的なタスク状態は次の3つです。
| 状態 | 意味 |
|---|---|
| 実行状態 | 現在CPUを使っている |
| 実行可能状態 | CPUが割り当てられれば実行できる |
| 待ち状態 | 入出力完了などを待ち、今すぐ実行できない |
状態の切り替わりは、次のように考えます。
実行可能状態
↓ ディスパッチ
実行状態
↓ プリエンプション
実行可能状態
実行状態
↓ 入出力要求
待ち状態
↓ 入出力完了
実行可能状態
優先度が高いタスクが起動した場合
Aの優先度がBより高いとします。
A > B
Bの実行中にAが実行可能になると、OSはBを中断し、Aを実行します。
B:実行状態
A:実行可能状態になる
↓
B:実行可能状態へ
A:実行状態へ
優先度が低いタスクが起動した場合
Aの実行中に、低優先度のBが起動しても、Aの実行は続きます。
A:実行中・高優先度
B:起動・低優先度
↓
A:実行継続
B:実行可能状態
このテーマは、基本情報技術者試験の「OS」「タスク管理」「リアルタイム処理」と関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、タスクの優先度と状態遷移を組み合わせて問われます。
判断手順は次のとおりです。
1. 現在どのタスクが実行中か確認する
2. 新しく実行可能になったタスクの優先度を見る
3. 高優先度ならプリエンプションが起きる
4. 中断されたタスクは実行可能状態へ戻る
よく出るパターン
| 状況 | OSの動作 |
|---|---|
| 高優先度Aを実行中に低優先度Bが起動 | Aを継続、Bは実行可能状態 |
| 低優先度Bを実行中に高優先度Aが起動 | Bを実行可能状態へ戻し、Aを実行 |
| 実行中タスクが入出力を要求 | 待ち状態へ移る |
| 入出力が完了 | 待ち状態から実行可能状態へ移る |
ディスパッチとプリエンプション
| 用語 | 意味 |
|---|---|
| ディスパッチ | 実行可能なタスクへCPUを割り当てる |
| プリエンプション | 実行中タスクからCPUを取り上げる |
例えば、Bの実行中にAへ切り替える場合は、次の2つが続けて起きます。
BからCPUを取り上げる
→ プリエンプション
AへCPUを割り当てる
→ ディスパッチ
どんな場面で使う?
プリエンプティブスケジューリングは、重要な処理を優先して実行したい場面で使われます。
- 制御装置の異常停止処理
- センサー割込みへの応答
- 通信処理
- リアルタイム監視
- 複数アプリケーションの実行
例えば、通常の記録処理よりも、設備異常を検知した停止処理の優先度を高くしておけば、異常発生時にすぐCPUを切り替えられます。
通常処理を実行中
↓
異常停止タスクが起動
↓
通常処理を中断
↓
停止処理を優先実行
よくある誤解・混同
誤解1:中断されたタスクは待ち状態になる
中断の理由が高優先度タスクへの切替えなら、元のタスクは実行可能状態へ戻ります。
CPUを譲っただけ
→ 実行可能状態
入出力完了を待つ
→ 待ち状態
誤解2:新しいタスクが起動すれば必ず切り替わる
新しく起動したタスクの優先度が低ければ、現在の高優先度タスクは実行を継続します。
誤解3:プリエンプションとディスパッチは同じ
プリエンプションはCPUを取り上げる処理、ディスパッチはCPUを割り当てる処理です。
誤解4:ノンプリエンプティブ方式でも同じ動作をする
ノンプリエンプティブ方式では、実行中タスクが自らCPUを手放すまで、他のタスクへ強制的に切り替えません。
| 方式 | 特徴 |
|---|---|
| プリエンプティブ | OSが強制的に切り替えられる |
| ノンプリエンプティブ | 実行中タスクがCPUを手放すまで待つ |
誤解5:優先度が高いほど必ず待ち時間がゼロになる
高優先度でも、さらに高い優先度のタスクが動いていたり、必要な資源を待っていたりすると、すぐ実行できない場合があります。
確認問題(基本情報技術者試験対策)
優先度に基づくプリエンプティブスケジューリングを行うOSがある。タスクXの優先度はタスクYより高い。Yの実行中にXが実行可能になったときの動作として、最も適切なものはどれか。
- ア. Yを待ち状態にしてXを実行する
- イ. Yを実行可能状態にしてXを実行する
- ウ. Xを待ち状態にしてYを実行し続ける
- エ. XとYを同時に実行状態にする
▶ クリックして答えと解説を見る(ここを開く)
正解:イ
Xの方が高優先度なので、OSはYからCPUを取り上げてXへ切り替えます。
Yは入出力待ちではなく、CPUが空けば再開できるため、待ち状態ではなく実行可能状態へ戻ります。
まとめ(試験直前用)
- プリエンプティブ方式は、OSが実行中タスクからCPUを取り上げられる方式
- 高優先度タスクが起動すると、低優先度タスクを中断して切り替える
- 中断されたタスクは、通常、待ち状態ではなく実行可能状態へ戻る
- 実行可能状態は、CPUが割り当てられれば実行できる状態
- 待ち状態は、入出力完了などを待っている状態
- プリエンプションはCPUを取り上げる処理
- ディスパッチは実行可能タスクへCPUを割り当てる処理
- ノンプリエンプティブ方式では、実行中タスクを強制的に切り替えない