最終更新日:2026年8月27日
fe fe-technology operating-system scheduling
まず結論
CPUスケジューリングとは、実行可能な複数のタスクの中から、どのタスクにCPUを割り当てるか、その順番を決める仕組みです。
基本情報技術者試験では、次の対応で切り分けると判断しやすくなります。
| 方式 | 何を優先する? | 試験での合図 |
|---|---|---|
| 到着順方式 | 先に来たタスク | 到着した順、FIFO |
| ラウンドロビン方式 | 順番に一定時間ずつ | タイムクォンタム、一定時間で交代 |
| 処理時間順方式 | 処理時間が短いタスク | 短い処理を優先、長いタスクが後回し |
| 優先度方式 | 優先度が高いタスク | 優先順位、優先度 |
特に、短いタスクを優先し続けた結果、長いタスクがCPUを割り当ててもらえない可能性があるなら、処理時間順方式を疑います。
短いもの優先 → 長いものが後回し → スタベーションに注意
直感的な説明
CPUを「1つしかない受付窓口」と考えてみます。
複数のタスクが待っているとき、誰から処理するかを決めるのがスケジューリングです。
タスクA
タスクB
タスクC
↓
どれを次に実行する?
↓
スケジューリング
方式によって、順番の決め方が変わります。
先に来た人から
→ 到着順
全員を少しずつ順番に
→ ラウンドロビン
短く終わる人から
→ 処理時間順
重要な人から
→ 優先度方式
この違いをイメージできると、方式名を丸暗記しなくても選択肢を切りやすくなります。
定義・仕組み
到着順方式
到着順方式は、実行可能待ち行列に入った順番でCPUを割り当てる方式です。
FCFS(First Come, First Served)とも呼ばれます。
Aが到着
↓
Bが到着
↓
Cが到着
実行順:A → B → C
先に来たタスクから順番に処理するため、後から来たタスクが先に追い越すことは基本的にありません。
ラウンドロビン方式
ラウンドロビン方式は、各タスクに一定時間ずつCPUを割り当て、時間を使い切ったら待ち行列の最後に回す方式です。
A → B → C → A → B → C → …
1回に使えるCPU時間を タイムクォンタム と呼びます。
1つのタスクが長時間CPUを占有しにくいため、複数タスクへ比較的公平にCPUを割り当てられます。
処理時間順方式
処理時間順方式は、予定される処理時間が短いタスクから優先して実行する方式です。
SJF(Shortest Job First)と呼ばれる考え方に近いものです。
例えば、次のタスクが待っているとします。
| タスク | 処理時間 |
|---|---|
| A | 10 |
| B | 2 |
| C | 3 |
短い順に実行するなら、
B → C → A
となります。
平均待ち時間を短くしやすい一方、短いタスクが次々と入ってくると、長いタスクが後回しになり続けることがあります。
優先度方式
優先度方式は、タスクごとに設定された優先度に従ってCPUを割り当てる方式です。
高優先度
↓
低優先度
高優先度タスクを早く処理できる一方、低優先度タスクが長時間待たされる可能性があります。
この問題を軽減するため、待ち時間が長くなるほど優先度を上げる考え方があります。
これを エージング(aging) と呼びます。
このテーマは、基本情報技術者試験の「オペレーティングシステム」「タスク管理」と関係します。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、方式名そのものだけでなく、どのタスクが待ち続ける可能性があるか、一定時間でCPUを交代するかといった特徴から方式を選ぶ問題が出ます。
次の判断表が使いやすいです。
| 問題文の表現 | 第一候補 |
|---|---|
| 到着した順に実行する | 到着順方式 |
| 一定時間ごとに実行を中断し、待ち行列の最後へ回す | ラウンドロビン方式 |
| 予定処理時間が短いタスクを優先する | 処理時間順方式 |
| 優先度の高いタスクを先に実行する | 優先度方式 |
| 待ち時間に応じて優先度を上げる | エージングを使う優先度方式 |
「待ち続ける可能性が高い」をどう読む?
処理時間順方式では、長いタスクより短いタスクを優先します。
長いタスクAが待っている
↓
短いタスクBが到着
→ Bを先に実行
↓
短いタスクCが到着
→ Cを先に実行
↓
Aがさらに後回し
このように、新しい短いタスクが入り続ければ、長いタスクAはCPUを割り当ててもらえない可能性があります。
この状態を スタベーション(starvation、飢餓状態) と呼びます。
どんな場面で使う?
OSは、複数のタスクを効率よく実行するためにスケジューリングを行います。
目的によって、重視する点が変わります。
| 重視したいこと | 向いている考え方 |
|---|---|
| 先着順の分かりやすさ | 到着順方式 |
| 公平にCPU時間を分ける | ラウンドロビン方式 |
| 平均待ち時間を短くしたい | 処理時間順方式 |
| 重要処理を優先したい | 優先度方式 |
実際のOSでは、これらを単純に1つだけ使うのではなく、目的に応じて複数の考え方を組み合わせることがあります。
FEでは、実装の細部よりも、各方式が何を優先するかを押さえることが大切です。
よくある誤解・混同
処理時間順方式なら全タスクが早く終わる
そうとは限りません。
短いタスクを先に処理するため、平均待ち時間は短くしやすいですが、長いタスクは後回しになる可能性があります。
平均的には効率がよい
≠
全タスクに公平
ラウンドロビンは到着順と同じ
最初は到着順で待ち行列に入ることがありますが、ラウンドロビンでは一定時間ごとにCPUを交代します。
到着順
→ 原則、先に来たタスクをそのまま処理
ラウンドロビン
→ 一定時間で交代し、末尾へ回す
優先度方式なら低優先度タスクは必ず実行されない
必ずではありません。
ただし、高優先度タスクが次々と現れると低優先度タスクが待たされる可能性があります。
その対策の一つがエージングです。
長く待つ
↓
優先度を少しずつ上げる
↓
いずれ実行されやすくする
スタベーションとデッドロックは同じ
違います。
| 用語 | 状態 |
|---|---|
| スタベーション | 他のタスクが優先され続け、自分にCPUが回ってこない |
| デッドロック | 複数の処理が互いの資源解放を待ち、誰も進めない |
スタベーションは 「自分だけ進めない」、デッドロックは 「互いに待って進めない」 と整理すると分かりやすいです。
デッドロックとの違いをもう少し整理したい場合は、デッドロックとは?ロック待ち・排他制御との違いも合わせて読むと、待ち状態の違いがつながります。
スケジューリングとディスパッチは同じ
役割が違います。
次に誰を実行するか決める
→ スケジューリング
決まったタスクへCPUを渡す
→ ディスパッチ
この違いを整理したい場合は、タスクのディスパッチとは?実行可能なタスクへCPUを割り当てる仕組みを読むと、OS内部の流れが理解しやすくなります。
また、CPUを強制的に取り上げて別タスクへ切り替える仕組みまで理解したい場合は、プリエンプティブスケジューリングとは?優先度とタスク状態の切り替わりへ進むと、今回の内容を一段深く理解できます。
まとめ(試験直前用)
- CPUスケジューリングは、次にどのタスクへCPUを割り当てるかを決める仕組み
- 到着順方式は、先に来たタスクから実行する
- ラウンドロビン方式は、一定時間ずつ順番にCPUを割り当てる
- 処理時間順方式は、短いタスクを優先し、長いタスクが後回しになることがある
- 優先度方式は、高優先度タスクを先に実行する
- 長く待つタスクの優先度を上げる考え方がエージング
- 短いタスクが優先され続け、長いタスクが待ち続ける → スタベーション