Повысится ли внутренняя фрагментация при увеличении размера блока?
Меньший размер блока приводит к низкой внутренней фрагментации по сравнению с большими размерами блока. Возможно ли иметь больше внутренней фрагментации с меньшим размером блока по сравнению с большим размером блока, если нам разрешено использовать типичные значения размера блока (кратные 2), то есть 512, 1024 или 2048 байтов?
1 ответ
Это хороший вопрос.
Позвольте мне попробовать ответ:
Внутренняя фрагментация - это "потеря" байтов при выделении памяти для данных. Если размер блока составляет, например, 512 байт, ваши данные должны храниться только 1 байт, будет потрачено 511 байт, увеличиваясь с увеличением размера блока.
Внешняя фрагментация, с другой стороны, является пустой тратой места памяти между используемыми блоками. Например: Есть блоки памяти A, B и C с размером блока 1 кбайт. Если используются A и C, и должны храниться данные размером 2 Кбайт, блок B никогда не может использоваться для этого. Вот почему мы должны дефрагментировать наши жесткие диски и объединять данные более эффективно.
Как вы спросите: возможно ли иметь больше внутренней фрагментации с меньшими размерами блоков, ответ должен быть: Это зависит от того, что вы обычно сохраняете.
Давайте сделаем некоторые расчеты:
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
Таким образом, это зависит от того, что вы экономите. У вас никогда не будет никакой системы, где файлы всегда будут иметь средний размер. Всегда будут большие файлы и много меньших, поэтому необходим компромисс.
При большом размере блока у вас будет больше внутренней дефрагментации, но тогда будет лучше внешняя фрагментация (так как между зарезервированными блоками будет много места). А с другой стороны, небольшие размеры блоков увеличат размер внешней фрагментации, но внутренний будет меньше.
Как правило, большие размеры блоков всегда увеличивают внутреннюю фрагментацию. Наилучшим является компромисс между размером блока, внутренней фрагментацией, временем доступа к диску и размером таблицы страниц.