スケジューリングアルゴリズムとは?CPUを複数のプロセスにどう割り当てるかを決めるしくみ

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

スケジューリングとは(全体像)

スケジューリングは、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(主要な方式)

📝 オリジナル問題 1 主要なスケジューリング方式

スケジューリング方式に関する次の記述のうち、正しいものはどれか。

  1. FCFSは到着した順に処理する方式で、ラウンドロビンは一定時間ずつ順番に処理する方式だ
  2. FCFSは短いジョブを優先する方式で、ラウンドロビンは到着順に処理する方式だとされている
  3. スケジューリング方式は1種類しかなく、決め方による違いはないものとされているものだ
  4. スケジューリングは紙に印刷する手順のことで、CPUの割り当てとは無関係なものとされる
テクマスター
テクマスター 解答・解説

解答は 1 ですよ。

FCFSは到着した順に処理する方式、ラウンドロビンは一定時間ずつ順番に処理する方式ですね。銀行の番号札順と、1人ずつ少しずつ対応する方式の違いです。

選択肢2はFCFSとSJFが混ざっており、選択肢3の「1種類」、選択肢4の「印刷する手順」はどれも誤りですよ。

選択肢判定理由
1FCFSは到着順・ラウンドロビンは時分割
2FCFSは到着順、短いジョブ優先はSJF
3方式は複数ある
4印刷する手順ではない

オリジナル問題2(プリエンプティブ)

📝 オリジナル問題 2 プリエンプティブとラウンドロビン

プリエンプティブに関する次の記述のうち、正しいものはどれか。

  1. ラウンドロビンは一度始めたら終わるまで横取りされない、非プリエンプティブの代表である
  2. ラウンドロビンは決めた時間を超えると横取りされる、プリエンプティブの代表的な方式だ
  3. プリエンプティブは紙に印刷する手順のことで、CPUの割り当てとは無関係なものだとされる
  4. プリエンプティブは実行中のプロセスを横取りできない方式で、必ず最後まで動かすものだ
テクマスター
テクマスター 解答・解説

解答は 2 ですよ。

ラウンドロビンは決めた時間(タイムクォンタム)を超えると横取りされる、プリエンプティブの代表ですね。途中で交代できるのが特徴です。

選択肢1の「非プリエンプティブの代表」、選択肢3の「印刷する手順」、選択肢4の「横取りできない」はどれも誤りですよ。

選択肢判定理由
1ラウンドロビンはプリエンプティブ
2時間を超えると横取りされる
3印刷する手順ではない
4プリエンプティブは横取りできる

オリジナル問題3(SJFと飢餓問題)

📝 オリジナル問題 3 SJFと飢餓問題

SJFと飢餓問題に関する次の記述のうち、正しいものはどれか。

  1. SJFはジョブの時間を完全に知っているのが前提で、そのまま簡単に実装できる方式である
  2. 飢餓問題はどんな対策をしても解決できず、必ず低優先度が止まり続けるものだとされている
  3. SJFは平均待ち時間が最小だが時間の予測が難しく、飢餓問題はエージングで対策ができる
  4. SJFもエージングも紙に印刷する装置のことで、スケジューリングとは無関係なものとされる
テクマスター
テクマスター 解答・解説

解答は 3 ですよ。

SJFは平均待ち時間が最小だが時間の予測が難しく、優先度方式の飢餓問題はエージングで対策できるんですね。SJFは理論上の最適です。

選択肢1の「簡単に実装できる」、選択肢2の「解決できない」、選択肢4の「印刷する装置」はどれも誤りですよ。

選択肢判定理由
1時間の予測が難しく実装できない
2エージングで対策できる
3SJFは予測困難・飢餓はエージング
4印刷する装置ではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る