情報処理試験を勉強していると、「スケジューリングって結局どの方式が何なの?ラウンドロビンと優先度順の違いがごっちゃになる……」と混乱しがちです。この記事では、スケジューリングの基本から各方式の違いまでを一気に整理します。
対象試験と出題頻度
スケジューリングは、基本情報技術者・応用情報技術者で出題されるテーマです。
OS(オペレーティングシステム)のタスク管理機能の中核として、各方式の特徴や動作の違いを正確に区別できるかが問われます。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
用語の定義
スケジューリング(Scheduling)とは、一言で言うと
「OSが複数のタスク(プロセス)に対して、CPUの使用時間や実行順序を割り当てる仕組み」
のことです。
イメージとしては、「病院の受付窓口」です。
病院には複数の患者が来院しますが、医師は一度に一人しか診察できません。受付窓口が「到着順に呼ぶ」「急患を優先する」「一人あたりの診察時間を区切って回す」といったルールで診察順を管理します。
スケジューリングはこの受付窓口の役割そのもので、限られたCPUリソースを複数のタスクに振り分ける交通整理です。
スケジューリングの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Scheduling |
| 分類 | OSのタスク管理機能 |
| 目的 | 複数タスクへのCPU資源の効率的な配分 |
| 実行主体 | OSのタスクスケジューラ(ディスパッチャ) |
| 大きな分類 | プリエンプティブ方式 / ノンプリエンプティブ方式 |
解説
コンピュータ上では常に複数のタスクが動作していますが、CPUのコア1つが同時に実行できるタスクは1つだけです。
そのため、OSは「どのタスクに・いつ・どれだけCPUを使わせるか」を判断し続ける必要があります。この判断ロジックがスケジューリングです。
プリエンプティブとノンプリエンプティブ
すべてのスケジューリング方式は、まず「OSがタスクを強制的に切り替えられるかどうか」で2つに大別されます。
| 分類 | 動作の特徴 | 該当する方式 |
|---|---|---|
| プリエンプティブ | OSの判断で実行中のタスクを中断し、別のタスクにCPUを渡せる | ラウンドロビン方式、優先度順方式、動的優先度順方式、多重待ち行列方式 |
| ノンプリエンプティブ | 実行中のタスクが自ら終了するか待ち状態に遷移するまで切り替わらない | 到着順方式(FCFS)、処理時間順方式(SPT/SJF) |
プリエンプティブ方式は応答性が高い反面、タスク切替のオーバーヘッドが発生します。
ノンプリエンプティブ方式は切替コストが小さい反面、長時間タスクが他のタスクをブロックするリスクがあります。
代表的な5つの方式
ここからは、試験で狙われやすい5つの方式を整理します。
それぞれの「どうやって順番を決めるか」に注目してください。
| 方式 | 分類 | CPUの割り当て方 | 注意点 |
|---|---|---|---|
| 到着順方式(FCFS) | ノンプリ | 実行可能待ち行列に入った順に処理 | 単純だが長時間タスクの後ろに短いタスクが滞留する |
| 処理時間順方式(SJF) | ノンプリ | 予定処理時間が短いタスクから順に処理 | 処理時間の長いタスクが永久に実行されないリスクがある |
| 優先度順方式 | プリエンプティブ | 各タスクの優先度が高い順に処理 | 優先度が低いタスクがいつまでも実行されない「飢餓状態」が起こり得る |
| 動的優先度順方式 | プリエンプティブ | 待ち時間に応じて優先度を徐々に引き上げる | 飢餓状態を防げる改良版 |
| ラウンドロビン方式 | プリエンプティブ | 各タスクに一定時間(タイムクウォンタム)を均等に割り当て、時間が来たら次のタスクへ | タイムシェアリングシステムに適する。タイムクウォンタムの長さが性能を左右する |
図解:ラウンドロビン方式の動作イメージ
最も出題頻度が高いラウンドロビン方式の動作を時間軸で示します。
タイムクウォンタムを2msとし、タスクA(処理時間5ms)・タスクB(処理時間3ms)・タスクC(処理時間4ms)を例にします。
ラウンドロビン方式の実行タイムライン(タイムクウォンタム=2ms)
0-2ms
2-4ms
4-6ms
6-8ms
8-9ms
9-11ms
11-12ms
▲ 各タスクに2msずつCPUを割り当て、未完了なら待ち行列の最後尾に戻す。Bは9msで完了(残り1msのみ実行)、Cは11msで完了、Aは12msで完了。
図解:優先度順方式(プリエンプティブ)の動作イメージ
タスクA(優先度:高、処理時間3ms、到着0ms)とタスクB(優先度:低、処理時間5ms、到着0ms)の場合です。
途中でタスクC(優先度:高、処理時間2ms)が2msの時点で到着するケースを示します。
優先度順方式(プリエンプティブ)の実行タイムライン
0-2ms
2-4ms
4-5ms
5-10ms
▲ 優先度が高いタスクが到着すると、実行中の低優先度タスクは中断(プリエンプション)される。Bは高優先度タスクが全て終わった後にようやく実行される。
何となくで覚えたい方向け:5方式の一言まとめ(クリックで展開)
到着順(FCFS):来た順に並ぶだけ。コンビニのレジと同じ。
処理時間順(SJF):「すぐ終わる人からお先にどうぞ」。ただし遅い人は永遠に待つ恐れあり。
優先度順:VIP客を先に通す方式。一般客(低優先度タスク)は後回しになりがち。
動的優先度順:長く待っている人の優先度を上げて救済する仕組み。
ラウンドロビン:全員に同じ持ち時間を配って順番に回す。タイムシェアリングの定番。
では、これらの方式が試験でどのように問われるか見ていきましょう。
スケジューリングの核心を3行で
・OSが複数タスクにCPU時間を配分する仕組みで、プリエンプティブとノンプリエンプティブの2系統がある
・ラウンドロビンは均等配分、優先度順は重要タスク優先、到着順は先着順と覚える
・処理時間順では長時間タスクが飢餓状態に陥り、動的優先度順はそれを防ぐ改良版
試験ではこう出る!
スケジューリングは、FE・APの午前問題で繰り返し出題されている定番テーマです。出題パターンは大きく3つに分かれます。
過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H30秋 午前 問18 |
ラウンドロビン方式の説明を選ぶ問題 | 「均等にCPU時間を割り当てる」が正解。優先度順・イベントドリブン・処理時間順がひっかけ |
| FE H27春 午前 問19 |
ノンプリエンプティブ方式の説明を選ぶ問題 | 「タスクが自ら待ち状態に遷移するか終了するまで切り替わらない」が正解 |
| FE R1秋 午前 問18 |
プリエンプティブな優先度順方式でのOS動作を選ぶ問題 | 「低優先度タスク実行中に高優先度タスクが起動→低優先度を実行可能状態にして高優先度を実行」が正解 |
| AP R5秋 午前 問17 |
プリエンプティブな優先度ベースでの周期タスクの計算問題 | 高優先度タスクの空き時間に低優先度タスクを挿入し、周期内に完了できるかを判定 |
| AP R6秋 午前 問16 |
CPU資源の割当てを待ち続ける可能性が最も高い方式を選ぶ問題 | 処理時間順方式が正解。動的優先度順・ラウンドロビン・到着順はいずれも飢餓が発生しにくい |
IPA試験での出題パターン
パターン1:「○○方式の説明を選べ」
4つの方式の説明文が並び、指定された方式に該当するものを選ぶ形式。ラウンドロビンなら「均等にCPU時間」、ノンプリエンプティブなら「タスクが自ら遷移するまで切り替わらない」が正解のキーワード。
パターン2:「プリエンプティブ方式でのOS動作を選べ」
優先度の異なるタスクの切替動作を問う形式。ひっかけは「待ち状態にする」。正しくは「実行可能状態にする」。待ち状態はI/O待ちなど別の理由で遷移する状態であり、優先度による切替とは無関係。
パターン3:タイムライン計算問題(AP中心)
複数タスクの実行時間・周期・優先度が与えられ、「周期内に完了できるか」「CPU遊休時間は何msか」を計算させる問題。図を描いて高優先度タスクの空き時間に低優先度タスクを入れていくのが解法の定石。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. タスクスケジューリング方式のうち、特定のタスクがCPU資源の割当てを待ち続ける可能性が最も高いものはどれか。
- A. 処理予定時間が最も短いタスクから順に処理を実行し、実行中の処理が終了するか中断されたとき、次のタスクを開始する。
- B. 各タスクを実行可能待ち行列に置かれた順に実行し、一定時間が経過したら実行を中断して待ち行列の最後尾に加える。
- C. 各タスクの優先度を決めて優先度が高い順に実行し、CPU割当てまでの待ち時間の長さに応じて優先度を徐々に上げていく。
正解と解説を見る
正解:A
解説:
選択肢Aは処理時間順方式(SJF)の説明です。この方式では、常に処理時間が短いタスクが優先されるため、処理時間の長いタスクは短いタスクが存在する限り永久に実行されない飢餓状態に陥る可能性があります。AP R6秋 午前問16でも同じ論点が出題されています。
選択肢Bはラウンドロビン方式の説明です。全タスクに均等にCPU時間を割り当てるため、特定のタスクが待ち続けることはありません。選択肢Cは動的優先度順方式の説明です。待ち時間に応じて優先度が上昇するため、どのタスクもいずれは最高優先度に達し、飢餓状態は発生しません。
よくある質問(FAQ)
Q. タイムクウォンタムを短くしすぎるとどうなりますか?
タスク切替(コンテキストスイッチ)の回数が増え、切替処理そのもののオーバーヘッドがCPU時間を圧迫します。結果として、実際のタスク処理に使えるCPU時間が減り、全体のスループットが低下します。逆に長すぎると応答性が悪化するため、適切な値の設計が重要です。
Q. 「飢餓状態(スタベーション)」と「デッドロック」はどう違いますか?
飢餓状態は、タスクが実行可能な状態にあるにもかかわらず、他のタスクに優先され続けてCPUが割り当てられない現象です。一方、デッドロックは複数のタスクが互いに相手の資源解放を待ち合い、全員が永久に停止する現象です。飢餓状態は「順番が回ってこない」問題であり、デッドロックは「全員が動けなくなる」問題です。
Q. 多重待ち行列方式(マルチレベルフィードバックキュー)とは何ですか?
優先度別に複数の待ち行列を用意し、各待ち行列にはそれぞれ異なるタイムクウォンタムを設定する方式です。タスクが割り当てられた時間内に完了しなければ、より低い優先度の待ち行列に移されます。対話的な短いタスクには高い応答性を、バッチ的な長いタスクには大きなタイムクウォンタムを与えるため、ラウンドロビンと優先度順の利点を組み合わせた方式と言えます。IPA試験の範囲では深掘りされないため、名前と概要を知っていれば十分です。
Q. 実務のLinuxやWindowsではどの方式が使われていますか?
現代の汎用OSは単一の方式ではなく、複数の方式を組み合わせています。Linuxカーネルでは「CFS(Completely Fair Scheduler)」が標準で、仮想実行時間をベースに公平性を実現しつつ、リアルタイムタスクには優先度ベースの固定優先度スケジューラを適用します。Windowsも優先度ベースのプリエンプティブ方式を基本とし、待ち時間に応じた優先度ブースト(動的優先度順に近い仕組み)を併用しています。