---
title: "ラウンドロビンスケジューリングとは？タイムクオンタムと終了時刻の計算方法【基本情報技術者試験】"
description: "ラウンドロビンスケジューリングを、タイムクオンタムごとに待ち行列の順番でCPUを割り当てる方式として整理し、複数ジョブの終了時刻、コンテキストスイッチ、FCFSや優先度スケジューリングとの違いをFE試験向けに解説します。"
last_modified_at: "2026-07-19"
canonical_url: "https://stemtazoo.github.io/fe/round-robin-scheduling/"
section: "fe"
---

## まず結論

ラウンドロビンスケジューリングとは、**各ジョブへ一定時間ずつCPUを割り当て、時間内に終わらなければ待ち行列の最後へ戻す方式**です。

この一定時間を **タイムクオンタム** と呼びます。

```text
A → B → C → A → B → C → …
```

基本情報技術者試験では、次の判断軸を押さえると解きやすくなります。

> **実行中のジョブ数が変わったら、CPUの割当て割合も計算し直す。**

タイムクオンタムが十分に小さく、切替え時間を無視できる場合は、実行中のジョブがCPUを均等に分け合うと考えられます。

## 直感的な説明

ラウンドロビンは、複数人が1本のペンを順番に使うイメージです。

```text
Aさんが少し使う
↓
Bさんが少し使う
↓
Cさんが少し使う
↓
Aさんへ戻る
```

1人が終わるまで使い続けるのではなく、決められた短い時間ごとに交代します。

そのため、複数のジョブが少しずつ同時に進んでいるように見えます。

例えば、A、B、Cの3ジョブが実行中なら、切替え時間を無視したとき、各ジョブが使えるCPU時間はおよそ3分の1ずつです。

```text
3ジョブ実行中
→ 各ジョブはCPUの1/3

1ジョブ終了後
→ 残り2ジョブはCPUの1/2ずつ
```

## 定義・仕組み

ラウンドロビンスケジューリングでは、待ち行列の先頭にいるジョブへタイムクオンタム分だけCPUを割り当てます。

処理が終わらなければ、そのジョブを待ち行列の最後へ戻します。

```text
待ち行列：A → B → C

Aを実行
↓ 未完了
B → C → A

Bを実行
↓ 未完了
C → A → B
```

主な用語は次のとおりです。

| 用語 | 意味 |
|---|---|
| タイムクオンタム | 1回に連続してCPUを使える時間 |
| 待ち行列 | CPUの割当てを待つジョブの並び |
| コンテキストスイッチ | 実行中のジョブを切り替える処理 |
| 経過時間 | 開始から実際に過ぎた時間 |
| CPU処理時間 | そのジョブがCPUを使った合計時間 |

タイムクオンタムが小さいほど、各ジョブへこまめにCPUが回ります。

ただし、現実には切替えのたびにコンテキストスイッチの負荷が発生します。

| タイムクオンタム | 特徴 |
|---|---|
| 小さい | 応答性はよいが、切替え回数が増える |
| 大きい | 切替えは少ないが、先着順実行に近づく |

このテーマは、基本情報技術者試験の「OS」「タスク管理」「スケジューリング」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、複数ジョブのCPU処理時間とスケジューリング条件から、特定ジョブの終了時刻を求める問題が出題されます。

タイムクオンタムが十分に小さく、切替え時間を無視する条件では、次の手順が有効です。

```text
1. 現在動いているジョブ数を数える
2. 最も短い残りCPU時間を確認する
3. 残りCPU時間 × 実行中ジョブ数で経過時間を求める
4. 完了したジョブを除く
5. 残り時間とジョブ数を更新する
```

例えば、次の3ジョブを同時に開始するとします。

| ジョブ | 必要なCPU時間 |
|---|---:|
| A | 4分 |
| B | 8分 |
| C | 12分 |

最初は3ジョブがCPUを分け合います。

最初に終わるAがCPU時間4分を受け取るには、次の経過時間が必要です。

```text
4分 × 3ジョブ = 12分
```

12分経過した時点では、各ジョブが4分ずつ処理されています。

```text
A：完了
B：残り4分
C：残り8分
```

次はBとCの2ジョブです。

Bの残り4分を処理するには、次の経過時間が必要です。

```text
4分 × 2ジョブ = 8分
```

したがって、Bの終了時刻は次のとおりです。

```text
12分 + 8分 = 20分
```

この計算で重要なのは、Aの終了後も3ジョブのままと考えないことです。

## 科目Bでどう使う？

科目Bでは、待ち行列やタイムクオンタムが具体的に示され、処理順を一つずつ追う場合があります。

例えば、タイムクオンタムが2で、各ジョブの残り処理時間が次のとおりだとします。

```text
A：3
B：5
C：2
```

待ち行列が `A → B → C` の場合は、次のように進みます。

```text
Aを2処理 → A残り1
Bを2処理 → B残り3
Cを2処理 → C完了
Aを1処理 → A完了
Bを2処理 → B残り1
Bを1処理 → B完了
```

科目Bでは、次の4点を表にすると安全です。

| 見るもの | 内容 |
|---|---|
| 現在の待ち行列 | 次に実行するジョブ |
| 残り処理時間 | タイムクオンタム後の残り |
| 完了したか | 待ち行列へ戻すか除くか |
| 経過時間 | 合計で何単位進んだか |

タイムクオンタムが明示されている場合は、均等配分の近似だけでなく、実際の実行順を追う必要があります。

## よくある誤解・混同

### 誤解1：ジョブの単独実行時間が、そのまま終了時刻になる

複数ジョブでCPUを共有する場合、終了までの経過時間は単独実行時より長くなります。

```text
CPU処理時間
→ 実際にCPUを使った時間

経過時間
→ 待ち時間を含む開始からの時間
```

### 誤解2：最後まで同じジョブ数で計算する

途中でジョブが終了すると、残りのジョブへCPUが回る割合が増えます。

```text
3ジョブ実行中 → 1/3ずつ
1ジョブ終了後 → 1/2ずつ
```

### 誤解3：ラウンドロビンと先着順を同じだと思う

| 方式 | CPUの割当て |
|---|---|
| ラウンドロビン | 一定時間ごとに交代する |
| FCFS（先着順） | 先に来たジョブが終わるまで実行する |

タイムクオンタムが非常に大きいラウンドロビンは、FCFSに近い動きになります。

### 誤解4：切替え時間は必ず無視できる

問題文に「ジョブの切替え時間は考慮しない」とあれば無視します。

指定がなければ、実際のシステムではコンテキストスイッチの負荷があることを理解しておきます。

### 他のスケジューリング方式との違い

| 方式 | 判断の合図 |
|---|---|
| ラウンドロビン | 一定時間ずつ順番に割り当てる |
| FCFS | 到着順に、完了まで実行する |
| 最短ジョブ優先 | 処理時間が短いジョブを優先する |
| 優先度スケジューリング | 優先度が高いジョブを先に実行する |

## まとめ（試験直前用）

- ラウンドロビンは、タイムクオンタムごとにCPUを順番に割り当てる
- 時間内に終わらないジョブは、待ち行列の最後へ戻る
- タイムクオンタムが十分に小さく切替え時間を無視すると、実行中ジョブでCPUを均等に分けると考えられる
- ジョブが終了したら、残りジョブへのCPU割当て割合を計算し直す
- CPU処理時間と、実際の経過時間を混同しない
- 明示されたタイムクオンタムが大きい場合は、実行順を一つずつ追う
