フラグメンテーション
出典: フリー百科事典『ウィキペディア(Wikipedia)』
フラグメンテーション(fragmentation)、断片化(だんぺんか)とは、コンピュータ上のメモリの管理上の一単位が、そのままでは有効利用できない状態になることを言う。
具体的には、使用中のメモリ領域がわずかな大きさの未使用領域を挟んで飛び飛びに配置され、連続した未使用領域が大きく確保できなくなる状態を言う。 このような状態に陥ると、メモリ領域の新たな確保、走査に時間がかかるため、コンピュータのパフォーマンスが低下する傾向にある。
メモリ上での領域確保・解放の操作を長期間繰り返していると、フラグメンテーションは必然的に、主記憶・二次記憶を問わず発生する。これを解消するには、使用中のメモリ領域を移動させ、隣り合わせに配置し直すことで相対的に連続未使用領域を大きくする。この操作をデフラグメンテーション(defragmentation, デフラグ)もしくはメモリ・コンパクション(memory compaction)と呼ぶ。
[編集] 内部断片化
メモリ管理をブロック単位で行う場合に発生する。メモリ領域のサイズと、実際に必要なデータのサイズとが完全に一致せず、ブロックの中に未使用の空き部分が存在してしまうためである。空きブロックが無くなってしまうと、実際には使われていない部分があるにも関わらず、それ以上の領域割当てができなくなる。
例として仮想記憶におけるページや、ファイルシステムにおけるクラスタなどがある。
ブロック内の空き部分の全体量は、ブロックサイズに比例する。反面、必要なブロック数はブロックサイズに反比例するため、ブロック管理のためのコストもブロックサイズに反比例する。
[編集] 外部断片化
メモリ管理を可変長で行う場合に発生する。メモリ上での領域確保・解放(サイズ変更を含む)を繰り返すと、メモリ上の未割り当ての領域のうち連続した領域として最長のものが、割り当てたいデータのサイズよりも小さくなってしまい、そのままでは新たな領域割当てができなくなる。
この場合、データのために割当てるメモリが連続した領域でなければならない事が前提となる。例として主記憶のセグメント方式において発生する。この場合、物理アドレス空間で連続してなくとも、論理アドレス空間で連続していれば良いため、ページング方式をセグメント方式と組み合わせて用いる事も多い。
また、ヒープ等のデータ構造を、通常は線形空間であるメモリに展開する場合にも、データの加除に伴い同様に外部断片化が生じうる。断片化の解決には、データ構造に応じたコンパクションアルゴリズムが適用される。
補助記憶のデフラグメンテーションも、ファイルシステムの機能によりメモリが連続領域でなくても動作可能だが、ヘッドのシークにより効率が(かなり)低下するような場合に、外部断片化を解消して性能向上を図るものである。