スケジューリングとは(全体像)
スケジューリングは、1つのCPUを、たくさんのプロセスに「どの順番で、どれくらいずつ」割り当てるかを決めるルールのこと。決め方しだいで、速さや公平さが変わる。
身近にたとえると、銀行の窓口での順番のさばき方だ。番号札順に対応する(FCFS)、用件の短いお客さんを先に(SJF)、1人5分ずつ順番に対応する(ラウンドロビン)、VIPを優先する(優先度)——どれを選ぶかで、全体の流れが変わる。
押さえるのは、割り当ての決め方にいくつか流派があること。それぞれ、得意なことと弱点が違う。
詳しく:主要な方式とプリエンプティブだけ覚えれば戦える
ここが記事の心臓部。まず代表的な方式を見ましょう。
主要なスケジューリング方式
| 方式 | 決め方 | 特徴 |
|---|---|---|
| FCFS | 到着した順 | 簡単。長いジョブが来ると後ろの待ち時間が増える |
| SJF | 短いジョブを優先 | 平均待ち時間は最小。ただし時間の予測が難しい |
| ラウンドロビン | 一定時間ずつ順番に | 公平。対話型に向く |
| 優先度 | 重要度の高い順 | 重要度を反映。低優先度が後回しになる弱点 |
FCFSは到着順で簡単ですが、最初に長いジョブが来ると後ろが待たされます。SJFは短いジョブを優先して平均待ち時間が最小になりますが、ジョブの時間を前もって正確に知るのが難しい方式です。
ここで一番のひっかけが「SJFはそのまま実際に使える最適な方式」という誤解。SJFは理論上は最適ですが、各ジョブの実行時間を正確に予測できないので、現実にはそのままでは実装できません。
次に、横取りできるかどうかの区別、プリエンプティブと非プリエンプティブ。
プリエンプティブと非プリエンプティブ
| 区別 | 意味 |
|---|---|
| プリエンプティブ | 実行中でも途中で横取り(強制中断)できる |
| 非プリエンプティブ | 一度始めたら終わるまでCPUを手放さない |
ここも取り違えやすく、「ラウンドロビンは非プリエンプティブ」というのは誤りです。ラウンドロビンは決めた時間(タイムクォンタム)を超えると横取りされる、プリエンプティブの代表です。
最後に飢餓(きが)問題。優先度方式では、低優先度のプロセスがいつまでも実行されないことがあります。これを防ぐのがエージング(時間がたつほど優先度を上げる)です。
わかりやすく言い換えると
要するに、銀行窓口のたとえで覚えるとラクです。
①主要な方式 … FCFS(番号札順)、SJF(短い用件を先に)、ラウンドロビン(1人ずつ少しずつ)、優先度(VIP優先)
②プリエンプティブ … 途中で横取りできる(ラウンドロビンは時間を超えると横取り)
③SJFと飢餓問題 … SJFは理論上は最適だが予測が難しく実装できない/優先度の飢餓はエージングで対策
つまり、「方式ごとの得意・弱点」「ラウンドロビンはプリエンプティブ」、この2点が試験の急所です。
試験のツボ
🔴 一番出る:主要な方式の特徴
①FCFS = 到着順(簡単・長いジョブで待ちが増える)
②ラウンドロビン = 一定時間ずつ順番に(公平・対話型向き)
🔴 次に出る:プリエンプティブとラウンドロビン
①プリエンプティブ = 実行中でも途中で横取りできる
②ラウンドロビンはタイムクォンタムを超えると横取りされるプリエンプティブ
🟡 押さえると安定:SJFと飢餓問題
①SJFは平均待ち時間が最小だが、時間の予測が難しく実装できない
②優先度方式の飢餓問題は、エージング(時間で優先度を上げる)で対策
よくある間違い
①「SJFはそのまま実際に使える最適な方式」→ ✗ SJFは理論上は最適だが、各ジョブの実行時間を正確に予測できず、そのままでは実装できない。
②「ラウンドロビンは非プリエンプティブ」→ ✗ ラウンドロビンは決めた時間を超えると横取りされる、プリエンプティブの代表。
③「飢餓問題は対策できない」→ ✗ 優先度方式の飢餓問題は、エージング(時間がたつほど優先度を上げる)で対策できる。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(主要な方式)
スケジューリング方式に関する次の記述のうち、正しいものはどれか。
- FCFSは到着した順に処理する方式で、ラウンドロビンは一定時間ずつ順番に処理する方式だ
- FCFSは短いジョブを優先する方式で、ラウンドロビンは到着順に処理する方式だとされている
- スケジューリング方式は1種類しかなく、決め方による違いはないものとされているものだ
- スケジューリングは紙に印刷する手順のことで、CPUの割り当てとは無関係なものとされる
解答は 1 ですよ。
FCFSは到着した順に処理する方式、ラウンドロビンは一定時間ずつ順番に処理する方式ですね。銀行の番号札順と、1人ずつ少しずつ対応する方式の違いです。
選択肢2はFCFSとSJFが混ざっており、選択肢3の「1種類」、選択肢4の「印刷する手順」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | FCFSは到着順・ラウンドロビンは時分割 |
| 2 | ✗ | FCFSは到着順、短いジョブ優先はSJF |
| 3 | ✗ | 方式は複数ある |
| 4 | ✗ | 印刷する手順ではない |
オリジナル問題2(プリエンプティブ)
プリエンプティブに関する次の記述のうち、正しいものはどれか。
- ラウンドロビンは一度始めたら終わるまで横取りされない、非プリエンプティブの代表である
- ラウンドロビンは決めた時間を超えると横取りされる、プリエンプティブの代表的な方式だ
- プリエンプティブは紙に印刷する手順のことで、CPUの割り当てとは無関係なものだとされる
- プリエンプティブは実行中のプロセスを横取りできない方式で、必ず最後まで動かすものだ
解答は 2 ですよ。
ラウンドロビンは決めた時間(タイムクォンタム)を超えると横取りされる、プリエンプティブの代表ですね。途中で交代できるのが特徴です。
選択肢1の「非プリエンプティブの代表」、選択肢3の「印刷する手順」、選択肢4の「横取りできない」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | ラウンドロビンはプリエンプティブ |
| 2 | ✓ | 時間を超えると横取りされる |
| 3 | ✗ | 印刷する手順ではない |
| 4 | ✗ | プリエンプティブは横取りできる |
オリジナル問題3(SJFと飢餓問題)
SJFと飢餓問題に関する次の記述のうち、正しいものはどれか。
- SJFはジョブの時間を完全に知っているのが前提で、そのまま簡単に実装できる方式である
- 飢餓問題はどんな対策をしても解決できず、必ず低優先度が止まり続けるものだとされている
- SJFは平均待ち時間が最小だが時間の予測が難しく、飢餓問題はエージングで対策ができる
- SJFもエージングも紙に印刷する装置のことで、スケジューリングとは無関係なものとされる
解答は 3 ですよ。
SJFは平均待ち時間が最小だが時間の予測が難しく、優先度方式の飢餓問題はエージングで対策できるんですね。SJFは理論上の最適です。
選択肢1の「簡単に実装できる」、選択肢2の「解決できない」、選択肢4の「印刷する装置」はどれも誤りですよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 時間の予測が難しく実装できない |
| 2 | ✗ | エージングで対策できる |
| 3 | ✓ | SJFは予測困難・飢餓はエージング |
| 4 | ✗ | 印刷する装置ではない |
まとめ
押さえどころ
- 🔴 主要な方式 = FCFS(到着順)/SJF(短いジョブ優先)/ラウンドロビン(一定時間ずつ)/優先度(重要度順)。
- 🔴 プリエンプティブ = 実行中でも横取りできる。ラウンドロビンは時間を超えると横取りされる代表。
- 🟡 SJFと飢餓問題 = SJFは理論上最適だが予測が難しく実装できない。優先度の飢餓はエージングで対策。
次に学ぶ
- プロセス管理 ── スケジューリングの対象になる、プロセスの5状態とコンテキストスイッチ。
- OS(オペレーティングシステム) ── スケジューリングを担うカーネルを含む、OSの構成と役割。
執筆: SikakuQuest編集部