ブロック サイズが小さいほど、ブロック サイズが大きい場合と比較して、内部の断片化が少なくなります。一般的なブロック サイズ値 (2 の倍数)、つまり 512、1024、または 2048 バイトを使用できる場合、大きなブロック サイズと比較して、小さなブロック サイズでより多くの内部フラグメンテーションを行うことは可能ですか?
1 に答える
いい質問ですね。
答えを試してみましょう:
内部フラグメンテーションは、データにメモリを割り当てるときのバイトの「無駄」です。ブロック サイズがたとえば 512 バイトの場合、データを 1 バイトだけ格納すると、511 バイトが無駄になり、ブロック サイズが大きくなるにつれて大きくなります。
一方、外部フラグメンテーションは、使用されたブロック間のメモリの場所の無駄です。例: メモリブロック A、B、および C があり、ブロックサイズは 1kbyte です。A と C が使用され、2 キロバイトのサイズで格納されたデータが存在する場合、ブロック B はそのために使用することはできません。そのため、HDD を最適化し、データをより効率的にまとめる必要があります。
あなたが尋ねるように: ブロックサイズを小さくして内部断片化を増やすことは可能ですか? 答えは次のようになります: 通常何を保存するかによって異なります。
計算してみましょう。
Block size: 512 byte
Data to store: 64 kbyte
Blocks needed: 128
Internal fragmentation: 0%
Block size: 512 byte
Data to store: 64,1 kbyte
Blocks needed: 128,2
Internal fragmentation: 80% of 1 block
--
Block size: 2048 byte
Data to store: 64 kbyte
Blocks needed: 32
Internal fragmentation: 0%
Block size: 2048 byte
Data to store: 64,1 kbyte
Blocks needed: 32,05
Internal fragmentation: 95% of 1 block
--
Block size: 4096 byte
Data to store: 64 kbyte
Blocks needed: 32
Internal fragmentation: 0%
Block size: 4096 byte
Data to store: 64,1 kbyte
Blocks needed: 16,025
Internal fragmentation: 97,5% of 1 block
だから、それはあなたが保存するものに依存します。ファイルが常に平均サイズになるようなシステムはありません。大きなファイルと多くの小さなファイルが常に存在するため、トレードオフが必要です。
ブロック サイズが大きいと、内部のデフラグが多くなりますが、外部のフラグメンテーションはより適切になります (予約されたブロック間に多くのスペースがあるため)。一方、ブロックサイズが小さいと、外部の断片化のサイズが大きくなりますが、内部の断片化は小さくなります。
一般に、ブロック サイズが大きくなると、常に内部の断片化が増加します。ブロック サイズ、内部断片化、ディスク アクセス時間、およびページ テーブル サイズの間のトレードオフが最適です。