Внутренняя фрагментация при выделении памяти фиксированными блоками (описание к предыдущей иллюстрации)
Допустим, у нас есть пространство памяти, разбитое на блоки, некоторые из которых выделены, некоторые используются впустую, а некоторые все еще свободны, размеры которых обозначены в килобайтах (КБ).
Проблема здесь в том, что процесс 𝟏𝟎 𝐊𝐁 должен вписываться в блок 𝟏𝟎𝟎 𝐊𝐁 , но есть одна загвоздка
Блок в 100 КБ уже частично использован 𝟖𝟓 𝐊𝐁 выделен, оставляя всего 15 КБ свободными. Этих 15 КБ кажется достаточно для процесса в 10 КБ.
Но вот тут-то и вступает в действие внутренняя фрагментация. Когда память выделяется блоками фиксированного размера, оставшееся пространство в этом блоке не может быть использовано другим процессом.
Итак, хотя 𝟏𝟓 𝐊𝐁 свободно, после получение процессом памяти в 𝟏𝟎 𝐊𝐁 у нас остается 𝟓 𝐊𝐁 , которые просто пустуют. Вот на что указывают желтые блоки.
Если посмотреть на остальную часть памяти, то там есть блок 𝟓𝟎 𝐊𝐁 с выделенным 𝟒𝟎 𝐊𝐁 , оставляя еще один небольшой кусок неиспользуемого пространства. Затем у нас есть несколько других блоков — некоторые свободны, некоторые используются. Диаграмма показывает, как образуется эта фрагментация.
Эти небольшие куски потерянного пространства в каждом блоке могут показаться незначительными, но когда у нас много процессов, которые приходят и уходят, это может действительно снизить эффективности. Система в итоге имеет меньше полезной памяти, чем должна была бы иметь.
Внутренняя фрагментация происходит из-за этой настройки фиксированного блока. Если размер блока не соответствует размеру процесса в точности, у нас всегда будет некоторое остаточное пространство, которое нельзя использовать.
Другой подход, например, динамическое распределение памяти, может помочь уменьшить этот показатель, но он имеет свои недостатки, такие как внешняя фрагментация.
Post #1581
1.82K
- 👍 14
- ❤ 3
- 👏 1
- 🍌 1