フラグメンテーション
テンプレート:Otheruseslist テンプレート:出典の明記 フラグメンテーション(fragmentation)、断片化(だんぺんか)とは、コンピュータ上のメモリの管理上の一単位が、そのままでは有効利用できない状態になることを言う。
具体的には、使用中のメモリ領域がわずかな大きさの未使用領域を挟んで飛び飛びに配置され、連続した未使用領域が大きく確保できなくなる状態を言う。 このような状態に陥ると、メモリ領域の新たな確保、走査に時間がかかるため、コンピュータのパフォーマンスが低下する傾向にある。
メモリ上での領域確保・解放の操作を長期間繰り返していると、フラグメンテーションは必然的に、主記憶・二次記憶を問わず発生する。これを解消するには、使用中のメモリ領域を移動させ、隣り合わせに配置し直すことで相対的に連続未使用領域を大きくする。この操作をデフラグメンテーション(defragmentation, デフラグ)もしくはメモリ・コンパクション(memory compaction)と呼ぶ。
内部断片化
記憶すべきデータを記憶装置に書き込む場合、購入当初は基本的に全領域が書き込める空きブロックであり、OS等の制御ソフトウェアは記憶領域の端から順番に書き込んでゆく。時間の経過と共に、消去済みとされた空きブロックが多くの場合ではランダムに生じるため、やがては1ブロックより長いデータの書き込み時にはそれより長い連続した空きブロックは不足してしまい、複数の空きブロックに分割して書き込まれる。複数の領域に分割された場合、書き込みと読み出し(記憶装置によっては削除)の動作時に、複数の領域へ読み書き機構を移動させる時間が余分に掛かることになる。
特に、HDDのように連続した領域での読み書きは早いが当該領域までの位置合わせに時間が掛かる記憶装置では断片化による影響は大きくなる。
例として仮想記憶におけるページや、ファイルシステムにおけるクラスタなどがある。
外部断片化
メモリ管理を可変長で行う場合に発生する。メモリ上での領域確保・解放(サイズ変更を含む)を繰り返すと、メモリ上の未割り当ての領域のうち連続した領域として最長のものが、割り当てたいデータのサイズよりも小さくなってしまい、そのままでは新たな領域割当てができなくなる。
この場合、データのために割当てるメモリが連続した領域でなければならない事が前提となる。例として主記憶のセグメント方式において発生する。この場合、物理アドレス空間で連続してなくとも、論理アドレス空間で連続していれば良いため、ページング方式をセグメント方式と組み合わせて用いる事も多い。
また、ヒープ等のデータ構造を、通常は線形空間であるメモリに展開する場合にも、データの加除に伴い同様に外部断片化が生じうる。断片化の解決には、データ構造に応じたコンパクションアルゴリズムが適用される。
補助記憶のデフラグメンテーションも、ファイルシステムの機能によりメモリが連続領域でなくても動作可能だが、ヘッドのシークにより効率が(かなり)低下するような場合に、外部断片化を解消して性能向上を図るものである。