Особливості сегментації пам’яті

Сегментація пам’яті.

План

1. Особливості сегментації пам’яті

2. Реалізація сегментації в архітектурі IA-32

Особливості сегментації пам’яті

Сегментація пам’яті дає змогу зображати логічний простір як сукупність незалежних блоків змінної довжини, які називають сегментами. Кожний сегмент звичайно містить дані одного призначення, наприклад в одному може бути стек, в іншому – програмний код і т.д.

У кожного сегмента є ім’я і довжина (для зручності реалізації поряд з іменами використовують номери). Логічна адреса складається з номера сегмента і зсуву всередині сегмента; з такими адресами працює прикладна програма. Компілятори часто створюють окремі сегменти для різних даних програми (сегмент коду, сегмент даних ,сегмент стека). Під час завантаження програми у пам’ять створюють таблицю дескрипторів сегменту процесу, кожний елемент якої відповідає одному сегменту і складається із базової адреси, значення межі та прав доступу.

Під час формування адреси її сегментна частина вказує на відповідний елемент таблиці дескрипторів сегментів процесу. Якщо зсув більший, ніж задане значення межі (або якщо права доступу процесу не відповідають правам, заданим для сегмента), то апаратне забезпечення генерує помилку. Коли ж усе гаразд, сума бази і зсуву в разі чистої сегментації дасть у результаті фізичну адресу в основній пам’яті. У підсумку кожному сегменту відповідає неперервний блок пам’яті такої самої довжини, що перебуває в довільному місці фізичної пам’яті або на диску. Загальний підхід до перетворення адреси у разі сегментації показаний на рис. 1.

Рис. 1. Перетворення адреси у разі сегментації

Загальний вигляд пам’яті у разі сегментації показано на рис. 2.

Рис. 2. Логічний і фізичний адресний простір у разі сегментації

Переваги сегментації пам’яті:

З’явилася можливість організовувати кілька незалежних сегментів пам’яті для процесу і використати їх для зберігання даних різної природи. При цьому права доступу до кожного такого сегмента можуть бути задані по-різному.

Окремі сегменти можуть спільно використовуватися різними процесами, для цього їхні таблиці дескрипторів сегментів повинні міститися однакові елементи ,що описують такий сегмент.

Фізична пам’ять, що відповідає адресному простору процесу, тепер не обов’язково має бути неперервною. Сегментація дає змогу окремим частинам адресного простору процесу відображатися не в основну пам’ять, а на диск, і довантажуватися з нього за потребою, забезпечуючи виконання процесів будь-якого розміру.

Цей підхід не позбавлений і недоліків:

Необхідність введення додаткового рівня перетворення пам’яті спричиняє зниження продуктивності. Для ефективної реалізації сегментації потрібна відповідна апаратна підтримка.

Керування блоками пам’яті змінної довжини з урахуванням необхідності їхнього збереження на диску може бути досить складним.

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

Сьогодні сегментацію застосовують доволі обмежено передусім через фрагментацію і складність реалізації ефективного звільнення пам’яті та обміну із диском. Ширше використання отримав розподіл пам’яті на блоки фіксованої довжини – сторінкова організація пам’яті.