Открыть сервис

Внутренняя фрагментация

Внутренняя фрагментация — это явление в компьютерных системах, при котором выделенная область памяти оказывается больше, чем запрошенный процессом или файлом объём данных, что приводит к неиспользуемому пространству внутри этой области. В контексте управления памятью операционной системы внутренняя фрагментация возникает при использовании схем распределения фиксированными блоками (разделами), когда программа не может полностью заполнить выделенный ей блок, и часть памяти остаётся пустой. В файловых системах внутренняя фрагментация связана с неполным заполнением последнего кластера файла. Явление противопоставляется внешней фрагментации, при которой свободная память разбита на мелкие несмежные участки, не позволяющие выделить большой блок.

Причины возникновения

Управление памятью

В операционных системах, использующих сегментацию или страничную организацию памяти, внутренняя фрагментация возникает из-за того, что память выделяется блоками фиксированного размера (страницами или сегментами). Если процесс запрашивает объём, не кратный размеру блока, последний блок оказывается частично заполненным. Например, при размере страницы 4 КБ и запросе процесса на 10 КБ будет выделено 3 страницы (12 КБ), из которых 2 КБ останутся неиспользованными внутри третьей страницы. Это пространство недоступно для других процессов, пока текущий процесс не освободит всю выделенную область.

Файловые системы

В файловых системах внутренняя фрагментация связана с кластеризацией. Файловая система разбивает дисковое пространство на кластеры фиксированного размера (например, 4 КБ, 8 КБ или 16 КБ). Если файл имеет размер, не кратный размеру кластера, последний кластер заполняется не полностью. Например, файл размером 5 КБ при кластере 4 КБ займёт 2 кластера (8 КБ), из которых 3 КБ будут пустовать. Эта потеря называется «остатком» или «слэком» (slack space).

Сравнение с внешней фрагментацией

Внутренняя фрагментация отличается от внешней тем, что неиспользуемая память находится внутри выделенных блоков, а не между ними. Внешняя фрагментация характерна для динамического распределения памяти переменными блоками, когда после многократных выделений и освобождений образуются мелкие свободные участки, которые невозможно объединить для удовлетворения крупного запроса. Внутренняя фрагментация, напротив, возникает при статическом или фиксированном выделении, когда размер блока задан заранее.

Классификация по типам систем

В операционных системах

  • Страничная память: внутренняя фрагментация возникает в последней странице процесса. Размер страницы варьируется от 512 байт до 64 КБ в разных архитектурах; чем больше страница, тем выше потенциальные потери.
  • Сегментная память: при сегментации сегменты имеют переменную длину, поэтому внутренняя фрагментация минимальна, но может возникать, если сегмент выравнивается по границе блока.
  • Схемы с фиксированными разделами: в ранних ОС (например, IBM OS/360) память делилась на разделы фиксированного размера, и процесс занимал целый раздел, даже если требовал меньше. Это приводило к значительной внутренней фрагментации.

В файловых системах

  • FAT (File Allocation Table): использует кластеры фиксированного размера; внутренняя фрагментация зависит от размера кластера. Для дисков большого объёма размер кластера может достигать 64 КБ, что увеличивает потери.
  • NTFS (New Technology File System): размер кластера по умолчанию — 4 КБ для дисков до 16 ТБ, но может быть изменён. Внутренняя фрагментация в NTFS незначительна для большинства файлов, но проявляется для большого числа мелких файлов.
  • ext4 (Fourth Extended File System): в Linux используется аналогичный принцип; внутренняя фрагментация минимизируется за счёт поддержки экстентов и субблоков.

Влияние на производительность

Внутренняя фрагментация приводит к неэффективному использованию памяти и дискового пространства. В оперативной памяти это может снизить количество одновременно выполняемых процессов, так как часть памяти остаётся недоступной. В файловых системах внутренняя фрагментация уменьшает полезную ёмкость диска: например, при кластере 4 КБ и миллионе файлов среднего размера 1 КБ потери составят около 3 ГБ.

Однако внутренняя фрагментация может улучшить производительность за счёт упрощения управления памятью. Фиксированные блоки позволяют быстрее выделять и освобождать память, чем динамические схемы, требующие дефрагментации. В файловых системах большие кластеры уменьшают количество операций ввода-вывода, так как данные читаются блоками.

Методы уменьшения

В операционных системах

  • Уменьшение размера страницы: снижает потери в последней странице, но увеличивает количество страниц и накладные расходы на таблицы страниц.
  • Использование сегментации с подкачкой: комбинирует сегменты и страницы, позволяя выделять память более гибко.
  • Динамическое выделение блоков переменного размера: применяется в современных ОС (например, в куче (heap) в пользовательском пространстве), где внутренняя фрагментация минимизируется за счёт точного соответствия запросу.

В файловых системах

  • Выбор оптимального размера кластера: для дисков с большим количеством мелких файлов рекомендуется кластер 512 байт или 1 КБ, для крупных файлов — 4 КБ или 8 КБ.
  • Использование субблоков (sub-block allocation): в ext4 и Btrfs мелкие файлы могут занимать часть кластера, а остаток используется другими файлами.
  • Сжатие на уровне файловой системы: в NTFS и ZFS сжатие уменьшает объём данных, сокращая количество неиспользуемого пространства в кластерах.
  • Дефрагментация: в некоторых файловых системах (например, FAT) дефрагментация может уменьшить внутреннюю фрагментацию за счёт переупаковки файлов, но не устраняет её полностью.

Примеры

  • Операционная система Linux: при размере страницы 4 КБ процесс, запрашивающий 1 байт, получает целую страницу, что даёт 4095 байт внутренней фрагментации. Для множества мелких процессов (например, сотен фоновых задач) потери могут быть значительными.
  • Файловая система FAT32: на диске объёмом 32 ГБ размер кластера по умолчанию — 16 КБ. Файл размером 1 байт занимает 16 КБ, создавая 16383 байта внутренней фрагментации.
  • Виртуальная память: в системах с гипервизорами (например, VMware) внутренняя фрагментация может возникать при выделении гостевой ОС фиксированных блоков памяти, не совпадающих с размером страниц хоста.

Критика и ограничения

Концепция внутренней фрагментации критикуется за то, что она не учитывает динамику современных систем. В многозадачных ОС с виртуальной памятью внутренняя фрагментация в страницах часто компенсируется за счёт подкачки и свопинга, а потери в последней странице обычно не превышают 50 % от размера страницы. В файловых системах с развитыми механизмами (например, copy-on-write в Btrfs) внутренняя фрагментация может быть частично устранена за счёт перераспределения данных. Однако в системах реального времени и встраиваемых устройствах, где память ограничена, внутренняя фрагментация остаётся критической проблемой, требующей тщательного выбора размера блоков.

Источники

  • Таненбаум Э., Бос Х. «Современные операционные системы». 4-е изд. — СПб.: Питер, 2015.
  • Сильбершатц А., Гэлвин П., Гэгн Г. «Операционные системы: концепции и проектирование». 9-е изд. — М.: Вильямс, 2013.
  • Карп Д. «Файловые системы: структура и алгоритмы». — М.: ДМК Пресс, 2018.
  • Документация Linux Kernel: «Memory Management» (kernel.org).
  • Microsoft Docs: «NTFS Overview» (learn.microsoft.com).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →