---
title: "ディスクスケジューリングのSCAN方式とは？ヘッド移動距離の求め方【基本情報技術者試験】"
description: "磁気ディスクのSCAN方式を「現在方向の要求を順に処理し、要求がなくなれば反転する方式」として整理し、ヘッド移動距離の求め方、FCFS・SSTF・LOOKとの違いをFE試験向けに解説します。"
last_modified_at: "2026-07-23"
canonical_url: "https://stemtazoo.github.io/fe/disk-scheduling-scan/"
section: "fe"
---

## まず結論

SCAN方式とは、**磁気ディスクのヘッドを一方向に動かし、その方向にある入出力要求を順番に処理してから反転するディスクスケジューリング方式**です。

基本情報技術者試験では、次の順番で考えると解きやすくなります。

```text
現在位置を確認
↓
現在の移動方向を確認
↓
その方向の要求をシリンダ番号順に処理
↓
要求がなくなったら反転
↓
移動距離を合計
```

待ち行列に並んだ順番ではなく、**現在位置と移動方向**を基準に処理順を決めるのがポイントです。

## 直感的な説明

SCAN方式は、エレベータの動きにたとえると分かりやすいです。

エレベータが上方向へ進んでいるときは、途中の階の呼出しに順番に応えます。

上方向の呼出しがなくなったら、今度は下方向へ進みます。

```text
上方向へ進む
→ 途中の要求を順番に処理
→ 上側の要求がなくなる
→ 下方向へ反転
```

磁気ディスクでも同じように、ヘッドが現在進んでいる方向の要求をまとめて処理します。

そのため、近い要求が反対側にあっても、現在の移動方向を優先します。

## 定義・仕組み

磁気ディスクでは、目的のデータがあるシリンダまでヘッドを移動させる必要があります。

複数の入出力要求があるとき、どの順番で処理するかによってヘッドの総移動距離が変わります。

この処理順を決める仕組みを、ディスクスケジューリングと呼びます。

### SCAN方式の基本

SCAN方式では、次のように動きます。

1. 現在のヘッド位置を確認する
2. 現在の移動方向を確認する
3. その方向にある要求をシリンダ番号順に処理する
4. その方向に要求がなくなったら反転する
5. 反対方向の要求を順番に処理する

例えば、現在位置が `100` で、増加方向へ移動しているとします。

要求が次の場合です。

```text
60, 70, 80, 90, 110, 120, 140
```

処理順は次のようになります。

```text
100
→ 110
→ 120
→ 140
→ 90
→ 80
→ 70
→ 60
```

このテーマは、基本情報技術者試験の「コンピュータ構成要素」「記憶装置」「入出力装置」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)から確認できます。

## 科目Aでどう出る？

科目Aでは、現在のヘッド位置、移動方向、待ち行列が与えられ、総移動シリンダ数を求める問題が出ます。

### 解き方の手順

まず、現在位置を境に要求を2つに分けます。

```text
現在位置より大きい要求
現在位置より小さい要求
```

現在位置が `100` の場合、次のように分かれます。

```text
大きい側：110, 120, 140
小さい側：90, 80, 70, 60
```

増加方向へ進んでいるなら、大きい側を昇順で処理します。

```text
110 → 120 → 140
```

その後、方向を反転して小さい側を降順で処理します。

```text
90 → 80 → 70 → 60
```

### ヘッド移動距離の求め方

1件ずつ差を足しても求められます。

```text
100 → 110 = 10
110 → 120 = 10
120 → 140 = 20
140 → 90  = 50
90 → 80   = 10
80 → 70   = 10
70 → 60   = 10
```

合計は次のとおりです。

```text
10 + 10 + 20 + 50 + 10 + 10 + 10 = 120
```

ただし、試験では端点を使うと速く計算できます。

```text
現在位置100 → 最大値140
= 40

最大値140 → 最小値60
= 80

合計
= 40 + 80
= 120
```

### 試験中の判断手順

```text
1. 現在位置を確認する
2. 進行方向を確認する
3. 現在位置より大きい側と小さい側に分ける
4. 進行方向側を番号順に処理する
5. 反転後の順番を決める
6. 移動距離を合計する
```

## どんな場面で使う？

SCAN方式は、多数のディスク入出力要求を効率よく処理し、ヘッドの無駄な往復を減らすために使われます。

待ち行列の順に処理するだけでは、ヘッドが大きく行き来することがあります。

```text
120 → 60 → 140 → 70
```

このような順番では、移動距離が大きくなりやすくなります。

SCAN方式では、一方向の要求をまとめて処理するため、ヘッドの往復を抑えやすくなります。

## よくある誤解・混同

### 待ち行列の順番どおりに処理する

誤りです。

待ち行列の順番どおりに処理する方式はFCFSです。

```text
到着順に処理
→ FCFS

現在方向を優先
→ SCAN
```

### 一番近い要求から処理する

誤りです。

現在位置から最も近い要求を優先する方式はSSTFです。

```text
近い要求を優先
→ SSTF

一方向へ進んでから反転
→ SCAN
```

### SCAN方式は必ず物理的な端まで移動する

問題文の定義を確認する必要があります。

一般的な説明では、SCANはディスク端まで移動してから反転し、LOOKは要求のある最後の位置で反転すると整理されることがあります。

一方、試験問題では、

```text
現在方向に要求がなくなったら反転する
```

と定義される場合があります。

この場合は、ディスクの物理的な端ではなく、**その方向の最後の要求位置で反転する**と判断します。

```text
一般用語の暗記
よりも
問題文で示された条件を優先
```

### SCAN・LOOK・FCFS・SSTFの違い

| 方式 | 処理順の基準 |
|---|---|
| FCFS | 到着順 |
| SSTF | 現在位置から最も近い要求 |
| SCAN | 一方向へ進み、端または指定条件で反転 |
| LOOK | 一方向の最後の要求位置で反転 |

FE試験では、方式名だけでなく、問題文に書かれた動作条件を確認することが大切です。

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

- SCAN方式は、現在方向の要求を順番に処理してから反転する
- 待ち行列の順番ではなく、現在位置と移動方向を見る
- 現在位置より大きい側と小さい側に分ける
- 増加方向なら大きい側を昇順、反転後は小さい側を降順で処理する
- 移動距離は1件ずつ足しても、端点の差でまとめてもよい
- 到着順はFCFS、最短距離優先はSSTF
- SCANとLOOKの区別は、問題文の反転条件を確認する
