Фрагментация памяти. Часть 2: Разрозненные свободные блоки - внешняя фрагментация памяти. Описание (к рисунку из предыдущего поста)
Пусть у нас есть куча блоков памяти, некоторые из которых используются, некоторые свободны, и процесс размером 50 КБ, который нужно где-то разместить. Проблема здесь в том, как разместить этот процесс размером 50 КБ в этой разбросанной памяти.
Обратите внимание на свободные блоки: 10 КБ, 5 КБ, 15 КБ, 5 КБ, 10 КБ и 5 КБ. Если их сложить, то получится 50 КБ свободного места. Похоже, что это достаточно для процесса с потребностью в 50 КБ
Но эти свободные блоки не находятся в одном непрерывном куске. Они разбросаны, разделены выделенной памятью.
Вот как выглядит внешняя фрагментация: достаточно общего пространства, но не в едином куске, достаточно большом для использования. Самый большой свободный блок — 15 КБ, что слишком мало для 50 КБ.
Этот тип фрагментации происходит в системах динамической памяти, где процессы приходят и уходят. По мере того, как память выделяется и освобождается, вы в конечном итоге получаете эти небольшие, разбросанные свободные пространства.
Это как куча маленьких пустых мест на парковке — места в целом предостаточно, но ни одного достаточно большого для большого грузовика.
На схеме показано, как эти промежутки (10 КБ, 5 КБ, 15 КБ и т. д.) не могут быть объединены для размещения процесса объемом 50 КБ, в результате чего он не может быть запущен, даже если технически имеется достаточно свободной памяти.
Один из способов исправить это — сжатие, когда вы перемещаете всю выделенную память вместе, чтобы создать больший свободный блок. Но это требует времени и ресурсов, и не все системы могут это сделать.
Другой подход заключается в использовании более эффективных стратегий распределения, таких как «наилучшее соответствие» (best-fit) или «первое соответствие» (first-fit), чтобы уменьшить частоту возникновения подобных ситуаций.
Post #1583
1.83K
- 👍 6
- 🥰 1
- 👏 1
- 🍌 1