FE EXAM

ラウンドロビン方式(時分割スケジューリング)

各タスクに一定時間ずつ順番にCPUを割り当てるスケジューリング方式。

INTERACTIVE VISUALIZATION
A
B
C
フェーズ
idle
現在時刻
0
タイムスライス
3
シナリオ
ステップ1 / 11
STEP 1/11開始前 — レディーキューに並ぶすべてのタスクが実行を待つ「レディーキュー(=CPUを待つ順番待ちの列)」に並んでいます。タイムスライス(=1回に与える時間)は 3 です。先頭のタスクから順番にCPUを使います。
レディーキュー(左が先頭=次に実行)
A
残り 5
B
残り 3
C
残り 4
ガントチャート(横軸=時間)
0123456789101112時間 →t=0
解説

📌
ラウンドロビン方式とは

ABC満了したら最後尾へ

ラウンドロビン方式とは、待っているタスク(=CPUに処理してほしい仕事)に対して、一定の時間(タイムスライス、またはクォンタムと呼ぶ)を順番に割り当て、満了したら次のタスクへ回すスケジューリング方式のことです。

身近な例で考えると、みんなで1台の遊具を交代で使うのに似ています。「1人3分まで」と決めておき、時間が来たら次の人に交代し、まだ遊び足りない人は列の最後尾に並び直す。こうすると全員が順番に遊べます。

上のツールで▶ボタンを押すと、レディーキューの先頭のタスクがタイムスライスぶんだけ実行され、満了すると最後尾へ回り、ガントチャート(=横軸が時間の実行記録)に切替が刻まれていく流れを確認できます。

⏱️
タイムスライスの仕組み

A (3)B (3)C (3)A …3ずつ区切って交代

タイムスライスとは、1回の順番で1つのタスクに与える時間の上限です。仕組みは次のとおりです。
満了で強制切替:タイムスライスを使い切ると、まだ途中でもプリエンプション(=強制的にCPUを取り上げる)が起き、実行が止まる
最後尾へ回す:未完了のタスクはレディーキューの最後尾に並び直し、次の順番を待つ
完了なら外れる:残り時間が0になったタスクは、キューから外れて終了する

タイムスライスの長さは性能に大きく影響します。
短すぎる場合:交代の回数が増え、タスクを切り替える準備(コンテキストスイッチ)のコストがかさんで効率が落ちる
長すぎる場合:途中での切替がほとんど起きず、結局は到着順(FCFS)方式に近づいてしまう

⚖️
公平性の利点

ABC同じ幅=平等に時間を分け合う

ラウンドロビン最大の長所は公平性です。全タスクが順番に同じだけの時間を得られるため、特定のタスクだけが長く待たされる、ということが起こりにくくなります。

この性質は、人が画面を操作してすぐ反応がほしい対話的処理(=Webやアプリの操作など)に向いています。どのタスクも短い周期で必ず順番が回ってくるので、「自分の操作だけ全然反応しない」という事態を避けられるからです。

ただし公平さの代償として、タイムスライスが短すぎると切替コストが増え、逆に長すぎると到着順(FCFS)方式に近づいて公平性のうまみが薄れます。適切な長さを選ぶことが大切です。上のツールで、A・B・Cが順番に少しずつ進んでいく様子を見てみてください。

📌
なぜプリエンプティブなのか — 強制交代の仕組み

A 実行中タイマーA を中断 → B へOS がタイマー割り込みで強制切替

プリエンプティブ(=強制交代あり)とは、実行中のタスクが「もう終わりにします」と言わなくても、OS が強制的にCPUを取り上げられる仕組みです。なぜこれが必要かというと、あるタスクが意図せず長く実行され続けると、他のタスクがいつまでも動けないからです。

強制交代の仕組みは、ハードウェアのタイマー(=一定時間ごとに合図を出す装置)を使います。タイムスライスの時間が来るとタイマーが OS に知らせ、OS が現在実行中のタスクを止めて次のタスクへ切り替えます。これをタイマー割り込み(=タイマーによる処理の中断)と呼びます。

対照的に、タスクが自分から「CPU を返す」まで動き続けるのがノンプリエンプティブ(強制交代なし)です。FCFS はその代表で、先頭のタスクが長時間かかると後続がずっと待ちます。ラウンドロビンはプリエンプティブだからこそ、全タスクへ均等に順番が回ります。

📌
ターンアラウンドと待ち時間の考え方

到着待ち時間実行時間完了ターンアラウンドタイム(到着→完了)

スケジューリングを評価するときに使う2つの時間を整理します。
ターンアラウンドタイム:タスクが到着してから完了するまでの全体の経過時間のことです。「頼んでから受け取るまでの時間」に相当します。計算式は 完了時刻 − 到着時刻 です
待ち時間:そのうち「CPUをもらえずに順番を待っていた時間」だけです。計算式は ターンアラウンドタイム − 実行時間 です

ラウンドロビンはプリエンプティブなので、1つのタスクが何度も「実行→待ち→実行→待ち」を繰り返します。このため待ち時間はラウンドロビン独自のガントチャートから計算する必要があります。たとえばタスクAが t=0 に到着し、t=0〜2 で実行→t=4 まで待ち→t=4〜5 で完了した場合、ターンアラウンドは 5 − 0 = 5、待ち時間は 5 − 3(実行時間)= 2 となります。

練習問題

🎯
基本情報技術者 練習問題

Q1.ラウンドロビン方式の説明として最も適切なものはどれか。
A.優先度の高いタスクから順にCPUを割り当てる
B.各タスクに一定時間(タイムスライス)ずつ順番にCPUを割り当てる
C.処理時間の短いタスクから順にCPUを割り当てる
D.到着した順にタスクを最後まで実行する
Q2.タイムスライスが満了したとき、まだ処理が終わっていないタスクはどう扱われるか。
A.そのまま処理を続行する
B.破棄されて最初からやり直す
C.CPUを取り上げられ、レディーキューの最後尾へ回される
D.優先度が下げられて二度と実行されない
Q3.ラウンドロビン方式の利点として最も適切なものはどれか。
A.特定のタスクだけが長時間CPUを独占できる
B.すべてのタスクが平等にCPUを得られ、待たされにくい
C.タスクの切替が一切発生しない
D.処理時間の長いタスクが必ず先に終わる

関連コンテンツ