Управління пам'яттю - одна з основних функцій операційної системи. Сучасні операційні системи дозволяють кожному процесу отримати більше віртуальної пам'яті, ніж загальний розмір фактичної (фізичної) пам’яті в даній комп'ютерній системі. Основна мета управління пам'яттю полягає в тому, щоб, поєднуючи велику, але повільну пам'ять з малою, але швидкісною пам'яттю, досягти ефекту більшої швидкодіючої пам'яті.
Розмежування між фіксованим та змінним розділенням неефективно з точки зору використання пам'яті, оскільки фіксований розподіл призводить до внутрішнього, а динамічного у зовнішній фрагментації. Можливе рішення проблеми фрагментації полягає в тому, щоб дозволити процес не записуватись у безперервний блок пам'яті. Програма може бути розкидана довільно в пам'яті. У цьому випадку робоча пам'ять ділиться на менші блоки фіксованого розміру, які називаються кадрами. Логічний адресний простір програми також розділений на блоки однакового розміру, що називаються сторінками. Коли програма вводиться в пам'ять, сторінки записуються у вільні кадри пам'яті. Для зручності передачі програм з диска в робочу пам'ять, диск також розділений на кадри такого ж розміру, що і кадри пам'яті. Таким чином, один кадр з диска записується в один кадр робочої пам'яті. Система підкачки функціонує таким чином: коли програма прийнята до виконання, обчислюється її розмір, який виражається необхідною кількістю сторінок. Якщо достатня кількість кадрів вільна, процес записується на сторінку пам'яті на сторінку. При цьому кількість кадрів, в яких написана кожна сторінка, вводиться в таблицю кадрів.
Користувацьку програму та пов’язані з цим дані можна розділити на ряд сегментів. Сегменти всіх програм не повинні бути однакового розміру, хоча існує максимальна довжина сегмента. Як і у випадку підкачки, логічна адреса, яка використовує сегментацію, складається з двох частин, в даному випадку - кількості сегментів та дислокацій у цьому сегменті. Через використання сегментів різного розміру сегментація схожа на динамічний розподіл. За відсутності схеми накладання або використання віртуальної пам’яті потрібно, щоб всі сегменти програми були завантажені в пам’ять для виконання. Різниця порівняно з динамічним розділенням полягає в тому, що сегментація може займати більше одного розділу, і що розділ не повинен бути суміжним. Сегментація вирішує проблему внутрішньої фрагментації, але, як і динамічний розподіл, проблема зовнішньої фрагментації залишається. Однак, оскільки процес розділений на ряд менших частин, зовнішня фрагментація зазвичай менша. На відміну від підкачки, яка невидима для програміста, сегментація зазвичай видима і підходить для організації програм та даних. З метою модульного програмування програму або дані можна далі розділити на кілька менших сегментів. Недоліком цієї методики є те, що програміст повинен знати обмеження максимального розміру сегмента. Наступною зручністю використання сегментів різного розміру є те, що між логічною та фізичною адресами немає перспективного зв’язку. Подібно до пейджингу, проста технологія сегментації використовує таблицю сегментів для кожного процесу та список доступних блоків у основній пам'яті.
Підказка забезпечує віртуальний та фізичний адресний простір та вторинний простір пам’яті на блоках (сторінках) однакової довжини. Це дозволяє виділяти постійний віртуальний адресний простір для процесу дисперсії (не обов'язково постійно розподіленої) у реальному адресному просторі та вторинній пам'яті. Навіть сторінка, як термін, відноситься до пам'яті, а не до логічних об'єктів, які видно на програмному рівні. Сегментація забезпечує віртуальний адресний простір на блоки (сегменти), які безпосередньо відповідають об'єктам на програмному рівні. Через це сегмент не має фіксованої довжини, тому навіть розмір сегмента можна змінювати під час виконання програми. Отже, захист і поділ можливі на об'єктному рівні, і там є видимі процеси, де здійснюється сегментація.
Розробник додатків не знає про підкачку. Він пише програми так, ніби пам'ять лінійна, а операційна система і процесор стурбовані її розділенням і перетворенням на віртуальні адреси. Однак програміст в системах сегментації перераховує дві частини адреси, сегмента та сторінки у своїх програмах. Усі сторінки однакового розміру, тоді як сегменти різні. Сегментація має декілька лінійних адресних просторів, а підказка лише одна. Сегменти дозволяють логічно розділити і захистити компоненти програми, а сторінки - ні.
Пейджинг, прозорий для програміста, виключає зовнішню фрагментацію і, таким чином, забезпечує ефективне використання основної пам'яті. Шматки, що переміщуються в основну пам'ять і виходять з неї, мають фіксований розмір і однакового розміру, тому можливо розробити складні алгоритми управління пам'яттю, що експлуатують поведінку програми. Сегментація є видимою для розробника і має можливість керувати ростом структури даних, модульності та підтримкою обміну та захисту.
Пейджинг | Сегментація |
фіксований розмір сторінок | сегменти не фіксуються за розміром |
невидимий для програміста | видно програмісту |
один лінійний адресний простір | безліч лінійних адресних просторів |
не дозволяє логічно розділити і захистити компоненти програми | дозволяє |