内部断片化と外部断片化の主な違いは、内部断片化では、あるプロセスに割り当てられたメモリブロックが大きいため、残りの部分を他のプロセスに使用できないことである。
一方、外部フラグメンテーションでは、プロセスが常駐するのに十分な総メモリ容量が確保されます。
しかし、連続ではないため、その領域は未使用となる。
フラグメンテーションは、空きメモリ空間をより小さなセクションに分割するプロセスです。
メモリブロックのサイズが必要なサイズより小さいため、プロセスに割り当てることが困難なために発生することがあります。
この問題は、メモリブロックが未使用のままであるため、メモリの浪費を引き起こす可能性があります。
フラグメンテーションには、内部フラグメンテーションと外部フラグメンテーションという2つのタイプがあります。
フラグメンテーションとは
プロセスがロードされ、メモリから削除されるとき、その空き領域は小さな断片に分割されます。
これらのメモリブロックはサイズが小さいので、同じプロセスや他のプロセスのために割り当てることはできません。
したがって、それらのメモリブロックは未使用のままです。
この問題をフラグメンテーションと呼びます。
例えば、メインメモリにプロセス(p1)があるとします。
それは4MBのスペースを取っています。
その後、メインメモリから削除され、セカンダリメモリに格納されます。
p1が属していた最初のメモリ空間は、現在では空きスペースになっています。
その空間は、2MB、2MBといったように細かく分割される。
もしプロセスp1がメインメモリに割り当てなければならない場合、すでに分割されているため、その前の空間を使うことはできない。
つまり、そのメモリ空間は未使用のままなのです。
内部フラグメンテーションとは
内部フラグメンテーションでは、あるプロセスに割り当てられたメモリブロックが必要以上に大きくなります。
そのため、メモリの一部が未使用のままになっています。
その領域は、他のプロセスで使用することはできません。
例えば、3MBのプロセスp1があるとする。
メインメモリにはそのプロセスのために4MBが割り当てられています。
残りの1MBを他のプロセスに使うことはできない。
この1MBは無駄になってしまいます。
この無駄を内部フラグメンテーションと呼ぶ。
図1:内部フラグメンテーション
外部フラグメンテーションとは
総メモリ容量がプロセスを常駐させるのに十分であっても、それが連続的でない場合、その領域をプロセス用に使用することはできません。
このようなフラグメンテーションを外部フラグメンテーションと呼びます。
プロセスが4MBだと仮定します。
メモリには2MB、1MB、1MBの空間があります。
メモリの総量は、プロセスを常駐させるのに十分な量です。
しかし、それらのスペースは様々な場所にあるため、連続したものではありません。
したがって、そのスペースは未使用のままです。
これが外部フラグメンテーションです。
外部フラグメンテーションの解決策として、コンパクションまたはシャッフルメモリがあります。
これは、すべての空きメモリを1つの大きなブロックにまとめて配置するものです。
図2:コンパクション
上図によると、p1とp2の後に空き領域があります。
p3、p4、p5の後にも空き領域があります。
したがって、すべての工程は片側に圧縮される。
これで、連続した空きスペースができました。
その空き領域を他のプロセスに割り当てることが可能です。
すべての空き領域が一カ所で利用可能です。
内部フラグメンテーションと外部フラグメンテーションの違い
定義
内部フラグメンテーションとは、プロセス用に必要以上に大きなメモリーを割り当てたために、メモリーの一部が残ってしまうことを言います。
外部フラグメンテーションとは、プロセスに割り当てられる十分なメモリがあるにもかかわらず、そのメモリが連続でない場合に発生するフラグメンテーションの一形態です。
機能性
内部断片化では、あるプロセスに割り当てられたメモリブロックは大きい。
そのため、残りの部分は他のプロセスに割り当てることができず、未使用のままとなる。
外部フラグメンテーションでは、プロセスを常駐させるだけのメモリ領域はあるが、連続性がない。
そのため、その領域は割り当てに使用できない。
解決方法
内部フラグメンテーションの解決策は、プロセスに対して十分な大きさのパーティションを割り当てることです。
外部フラグメンテーションの解決策としては、コンパクションまたはシャッフルメモリコンテンツがあります。
結論
内部フラグメンテーションでは、あるプロセスに割り当てられたメモリブロックが大きいため、残りの部分を他のプロセスで使用することができない。
外部フラグメンテーションでは、メモリブロックの総量はプロセスを常駐させるのに十分であるが、連続ではないため、その領域は未使用です。
これが、内部フラグメンテーションと外部フラグメンテーションの主な違いです。