---
title: "可変区画方式とは？主記憶の空き領域を追う問題の考え方【基本情報技術者試験】"
description: "可変区画方式を「プログラムの大きさに合わせて主記憶を割り当てる方式」として整理し、ロードと解放で空き領域が分かれる考え方、ファーストフィット、固定区画方式、フラグメンテーションとの違いをFE試験向けに解説します。"
last_modified_at: "2026-07-25"
canonical_url: "https://stemtazoo.github.io/fe/variable-partition-memory-allocation/"
section: "fe"
---

## まず結論

可変区画方式とは、**プログラムやモジュールの大きさに合わせて、主記憶上の領域を割り当てる方式**です。

基本情報技術者試験では、可変区画方式の問題は、難しい計算というより **主記憶の状態を順番に追う問題** と考えると解きやすいです。

特に、次の3点を分けて考えます。

| 見るもの | 意味 | 注意点 |
|---|---|---|
| ロード | 主記憶にモジュールを置く | 空き領域のどこに置くかを見る |
| 解放 | 使い終わった領域を空ける | 空き領域が分かれることがある |
| 空き領域の個数 | 空いている場所が何か所あるか | 空き容量の合計とは別 |

問題文で **「空き領域が何か所存在するか」** と聞かれたら、空き容量を合計するのではなく、**空いているかたまりの数** を数えます。

## 直感的な説明

可変区画方式は、机の上に大きさの違う箱を順番に置いたり、どかしたりするイメージです。

最初は、机の上がすべて空いています。

```text
[ 空き ]
```

そこへ、A、B、Cという箱を順番に置きます。

```text
[ A ][ B ][ C ][ 空き ]
```

ここでBをどかすと、Bがあった場所だけ空きます。

```text
[ A ][ 空き ][ C ][ 空き ]
```

このとき、空いている場所は **2か所** です。

空き容量を合計すれば1つの数字になりますが、主記憶上では離れた場所に分かれているため、**空き領域の個数** と **空き容量の合計** は別に考えます。

## 定義・仕組み

可変区画方式では、プログラムやモジュールをロードするときに、その大きさに合わせて主記憶上の空き領域を割り当てます。

固定区画方式のように、あらかじめ同じ大きさや決まった大きさの区画を作っておくわけではありません。

| 方式 | 考え方 | 特徴 |
|---|---|---|
| 固定区画方式 | 主記憶をあらかじめ決まった区画に分ける | 管理は簡単だが、区画内に無駄が出やすい |
| 可変区画方式 | 必要な大きさに合わせて区画を作る | 柔軟だが、空き領域が分断されやすい |

可変区画方式では、ロードと解放を繰り返すと、主記憶の中に小さな空き領域が分かれて残ることがあります。

```text
[ 使用中 ][ 空き ][ 使用中 ][ 空き ][ 使用中 ]
```

このように、空き領域が分かれてしまう現象は、**外部フラグメンテーション** と関係します。

外部フラグメンテーションでは、空き容量の合計は足りていても、連続した空き領域が足りずに、大きなプログラムを置けないことがあります。

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

## 科目Aでどう出る？

科目Aでは、主記憶の状態を図や文章で追い、最後に空き領域の数や配置を問う問題が出やすいです。

解くときは、次の順で整理します。

1. 主記憶全体の大きさを書く
2. ロードされたモジュールを先頭から置く
3. 解放されたモジュールを空きに戻す
4. 新しくロードするモジュールを、条件に従って空き領域に置く
5. 最後に、空き領域のかたまりを数える

例えば、500Kバイトの主記憶に、次の順でロード・解放したとします。

```text
Aロード → Bロード → Cロード → B解放 → Dロード → A解放 → Eロード
```

サイズは次のとおりです。

| モジュール | 大きさ |
|---|---:|
| A | 200K |
| B | 100K |
| C | 150K |
| D | 80K |
| E | 90K |

状態を追うと、次のようになります。

```text
初期状態
[ 空き500 ]

Aロード
[ A200 ][ 空き300 ]

Bロード
[ A200 ][ B100 ][ 空き200 ]

Cロード
[ A200 ][ B100 ][ C150 ][ 空き50 ]

B解放
[ A200 ][ 空き100 ][ C150 ][ 空き50 ]

Dロード
[ A200 ][ D80 ][ 空き20 ][ C150 ][ 空き50 ]

A解放
[ 空き200 ][ D80 ][ 空き20 ][ C150 ][ 空き50 ]

Eロード
[ E90 ][ 空き110 ][ D80 ][ 空き20 ][ C150 ][ 空き50 ]
```

最後の空き領域は、次の3か所です。

```text
空き110
空き20
空き50
```

したがって、空き領域の個数は **3か所** です。

ここで、空き容量の合計は次のようになります。

```text
110 + 20 + 50 = 180K
```

しかし、問題で聞かれているのが **空き領域の個数** なら、答えるのは **3** です。

## どんな場面で使う？


メモリ管理やOSの動きを読むときに、次の考え方は役立ちます。

```text
ロードする
→ 主記憶のどこかを使う

解放する
→ その場所が空きになる

ロードと解放を繰り返す
→ 空き領域が分かれることがある
```

問題文では、図や表が出たら、頭の中だけで考えず、簡単なメモリ図を書いて追うのが安全です。

```text
[ 使用中 ][ 空き ][ 使用中 ][ 空き ]
```

このように、区画を左から順に並べて書くと、空き領域の数を見落としにくくなります。

## よくある誤解・混同

可変区画方式では、次の混同がよく起こります。

| 誤解・混同 | 正しい見方 |
|---|---|
| 空き容量の合計を答えてしまう | 問題が聞いているのが容量か個数かを確認する |
| 解放した領域をすぐに前後の空きとまとめてしまう | 隣り合っていない空き領域は1つにはならない |
| 小さな空き領域を見落とす | D80を100Kの空きに入れると、20Kの空きが残る |
| 固定区画方式と同じように考える | 可変区画方式はモジュールの大きさに合わせて区画を作る |
| 空き容量の合計が足りれば必ずロードできると思う | 連続した空き領域が足りないとロードできない場合がある |

特に注意したいのは、**空き領域が隣り合っているかどうか** です。

```text
[ 空き100 ][ 空き50 ]
```

このように隣り合っていれば、まとめて1つの空き領域として見られます。

一方で、次のように間に使用中の領域がある場合は、別々の空き領域です。

```text
[ 空き100 ][ 使用中 ][ 空き50 ]
```

この場合、空き領域は **2か所** です。

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

- 可変区画方式は、モジュールの大きさに合わせて主記憶を割り当てる方式
- ロードは主記憶に置く、解放はその領域を空けること
- 空き容量の合計と、空き領域の個数は別
- D80を100Kの空きに入れると、20Kの空きが残るように、小さな空きを見落とさない
- 隣り合っていない空き領域は、別々に数える
- 空き領域が分かれることは、外部フラグメンテーションと関係する
- 固定区画方式はあらかじめ区画を分ける、可変区画方式は必要な大きさに合わせて区画を作る
