情報処理試験を勉強していると、「フラグメンテーションって何が問題なの?」「デフラグって何をしてるの?」と疑問に思うことがあるはずです。この記事では、フラグメンテーション(断片化)の意味・発生の仕組み・解消方法を、日常の例え話と図解で整理します。
対象試験と出題頻度
フラグメンテーションは、基本情報技術者・応用情報技術者で出題されるテーマです。
OSの記憶管理に関する問題の中で、コンパクションやページングとの区別を問う形式が定番化しています。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
用語の定義
フラグメンテーション(Fragmentation)とは、一言で言うと
「記憶領域の割当てと解放を繰り返すことで、未使用領域が細切れに散らばってしまう現象」
のことです。日本語では「断片化」と呼びます。
イメージとしては、「駐車場の歯抜け状態」です。
100台分の駐車スペースがある駐車場で、出入りを繰り返すうちに「1台分の空き」がバラバラに点在するようになります。
合計すれば大型バスを停められる面積が空いているのに、連続したスペースがないので実際にはバスを停められない。これがフラグメンテーションです。
📊 フラグメンテーションの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Fragmentation |
| 日本語名 | 断片化 |
| 発生する場所 | 主記憶(メモリ)、補助記憶装置(HDDなど) |
| 主な解消方法 | コンパクション(主記憶)、デフラグメンテーション(ディスク) |
| 関連分野 | OSの記憶管理、データベース管理 |
解説
なぜフラグメンテーションが起きるのか
OSはプログラムを実行するとき、主記憶上に必要なサイズの領域を確保します。プログラムが終了すると、その領域は解放されます。
サイズの異なるプログラムが次々と確保・解放を繰り返すと、解放された領域が飛び飛びに残ります。これが断片化の正体です。
ディスク上でも同様に、ファイルの書き込みと削除を繰り返すと、1つのファイルが離れたセクタに分散して記録されるようになります。
図解:断片化の発生過程
メモリ上でプログラムの確保と解放が進む様子を3ステップで示します。
メモリ上での断片化の発生過程
Step 1:3つのプログラムが連続して配置されている
Step 2:プログラムBが終了 → 中間に空きが発生
Step 3:プログラムD(大きい)を配置したいが、連続した空きがない
▲ 合計40%の空きがあるのに、連続した40%の領域が確保できない = フラグメンテーション
解消方法の比較
断片化を解消・回避する代表的な手法は3つあります。それぞれ対象領域と動作が異なるため、ここだけは確実に押さえてください。
| 手法 | 対象 | 動作内容 |
|---|---|---|
| コンパクション | 主記憶 | 使用中の領域を一方向に詰め寄せ、連続した空き領域をまとめて作り出す |
| デフラグメンテーション | ディスク(HDD) | 分散して記録されたファイルのデータを連続領域に並べ替え、読み書き効率を回復させる |
| ガベージコレクション | ヒープ領域 | プログラムが不要になったメモリ領域を自動的に回収し、再利用可能にする |
図解:コンパクションによる断片化の解消
コンパクション(メモリの詰め寄せ)
Before:断片化した状態
⬇
After:コンパクション実行後
▲ 使用中の領域を左に詰め、右側に大きな連続空き領域を確保する
もう少し詳しく:可変長方式と固定長方式の違い
断片化が発生するのは可変長方式でメモリを管理している場合です。プログラムごとに異なるサイズの領域を割り当てるため、解放後に中途半端な空きが残ります。
一方、固定長方式(ページング方式)では、メモリを同じサイズのブロック(ページ)に分割して管理します。ブロックサイズが統一されているため、どの空きブロックにも同じサイズのデータを配置でき、外部フラグメンテーションは発生しません。
ただし、固定長方式でも割り当てたブロックの中に使い切れない余り領域が生じることがあり、これを内部フラグメンテーションと呼びます。前述の断片化(空き領域が飛び飛びになる現象)は「外部フラグメンテーション」に分類されます。
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 フラグメンテーションの核心を3行で
・記憶領域の確保と解放の繰り返しで、未使用領域が細切れになる現象
・合計では十分な空きがあっても、連続領域を確保できなくなる
・コンパクション(主記憶)やデフラグメンテーション(ディスク)で解消する
試験ではこう出る!
フラグメンテーションは、FE・APの午前問題で記憶管理の選択肢問題として繰り返し出題されています。
出題パターンは大きく2つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H24秋 問18 |
OSが記憶領域の割当てと解放を繰り返すことで細切れの未使用領域ができる現象名を選ぶ。 | ・正解は「フラグメンテーション」 ・コンパクション、スワッピング、ページングがひっかけ |
| FE H25春 問17 |
DB応答性能の悪化原因として断片化を想定し、調査項目を選ぶ。 | ・正解は「データの格納状況の確認」 ・ディスクI/O増加との因果関係を問う応用問題 |
| FE H31春 問15 |
H25春 問17の流用問題。 | ・FEでは同一問題の再出題がある典型例 |
| AP R4春 問18 |
フラグメンテーションに関する記述のうち適切なものを選ぶ。 | ・「合計の空きは十分でも連続領域を確保できない」が正解 ・可変長/固定長方式の違い、ガベージコレクションの適用タイミングがひっかけ |
📝 IPA試験での出題パターン
パターン1:「この現象の名称を選べ」
「記憶領域の割当てと解放を繰り返すことで未使用領域が細切れになる現象」の名称を選ばせる形式。コンパクション(解消手段)やスワッピング(退避処理)を混同させるのが典型的なひっかけです。
パターン2:「記述の正誤を判定せよ」
AP R4春のように、可変長方式での発生有無やガベージコレクションとの関係など、周辺知識の正確さを問う形式。「固定長方式では外部フラグメンテーションは発生しない」という知識が鍵になります。
試験ではここまででOKです。内部フラグメンテーションの計算問題が出ることはほぼないので、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. OSが記憶領域の割当てと解放を繰り返した結果、細切れの未使用領域が多数発生する現象として、最も適切なものはどれでしょうか?
- A. 主記憶上の断片化した空き領域を一方向に詰め寄せ、連続した空き領域を作り出す処理。
- B. 記憶領域の割当てと解放を繰り返すことで、不連続な未使用領域が散在してしまう現象。
- C. 実行中のプログラムを一時的に補助記憶装置に退避し、他のプログラムに主記憶を明け渡す処理。
正解と解説を見る
正解:B
解説:
フラグメンテーション(断片化)とは、記憶領域の確保と解放が繰り返された結果、未使用領域が不連続に散らばる現象です。合計では空きが十分あっても連続領域を確保できなくなる点が本質です。
選択肢Aはコンパクションの説明です。コンパクションは断片化を「解消する手段」であり、断片化という「現象」そのものではありません。選択肢Cはスワッピングの説明です。スワッピングは主記憶と補助記憶の間でプログラムを退避・復帰させる処理であり、断片化とは直接関係しません。
よくある質問(FAQ)
Q. SSDでもフラグメンテーションは問題になりますか?
SSDはフラッシュメモリを使用しており、HDDのような物理的なヘッド移動がありません。そのため、データが分散していても読み書き速度への影響はごくわずかです。SSDに対してデフラグを実行すると、書き込み回数の上限を無駄に消費して寿命を縮めるだけなので、実務では行いません。IPA試験でSSDとデフラグの関係が直接問われた実績はないため、「デフラグはHDD向けの処理」と覚えておけば十分です。
Q. 「内部フラグメンテーション」と「外部フラグメンテーション」の違いは?
外部フラグメンテーションは、空き領域が飛び飛びに散らばって連続領域を確保できない状態です。可変長方式で発生します。一方、内部フラグメンテーションは、固定長のブロックを割り当てたときにブロック内部に使い切れない余り領域が生じる状態です。ページング方式で起こり得ます。試験で「フラグメンテーション」とだけ書かれている場合は、外部フラグメンテーションを指していると判断して問題ありません。
Q. データベースでもフラグメンテーションは発生しますか?
発生します。データベースでレコードの挿入・更新・削除を繰り返すと、テーブルやインデックスのデータページに空き領域が散在し、ディスクI/Oが増加して応答性能が悪化します。FE H25春 問17(= H31春 問15)では、まさにこのパターンが出題されました。実務ではデータベースの再編成(REORGANIZE)やインデックスの再構築を定期的に行うことで対処します。
Q. コンパクションとガベージコレクションの違いは?
コンパクションは、主記憶上の使用中領域を物理的に移動させて連続した空き領域を作り出す処理です。OSの記憶管理機能が実行します。ガベージコレクションは、プログラムが確保したヒープ領域のうち、参照されなくなった不要領域を自動で回収する処理です。JavaやPythonなどのプログラミング言語のランタイムが担います。AP R4春 問18では「返却されるたびにガベージコレクションを行う必要がある」という記述がひっかけとして出題されました。実際には処理コストが高いため、毎回実行するのは不適切です。