Сторінково-сегментна організація пам’яті



Базові принципи

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

Для того щоб об’єднати переваги обох підходів, у деяких апаратних архітектурах (зокрема, в IA-32) використовують комбінацію сегментної та сторінкової організації пам’яті. За такої організації перетворення логічної адреси у фізичну відбувається за три етапи.

  1. У програмі задають логічну адресу із використанням сегменту і зсуву.
  2. Логічну адресу перетворюють у лінійну (віртуальну) адресу за правилами, заданими для сегментації.
  3. Віртуальну адресу перетворюють у фізичну за правилами, заданими для сторінкової організації.

Таку архітектуру називають сторінково-сегментною організацією пам’яті.

Перетворення адрес в архітектурі IA-32

Розглянемо особливості реалізації описаних трьох етапів перетворення адреси в архітектурі IA-32.

  1. Машинна мова архітектури IA-32 (а, отже, будь-яка програма, розроблена для цієї архітектури) оперує логічними адресами. Логічна адреса, як було зазначено раніше, складається із селектору і зсуву.
  2. Лінійна або віртуальна адреса – це ціле число без знака завдовжки 32 біти. За його допомогою можна дістати доступ до 4 Гбайт комірок пам’яті. Перетворення логічної адреси в лінійну відбувається всередині пристрою сегментації (segmentation unit) за правилами перетворення адреси на базі сегментації, описаними раніше.
  3. Фізичну адресу використовують для адресації комірок пам’яті в мікросхемах пам’яті. ЇЇ теє зображають 32-бітовим числом без знака. Перетворення лінійної адреси у фізичну відбувається всередині пристрою сторінкової підтримки (paging unit) за правилами для сторінкової організації пам’яті (лінійну адресу розділяють апаратурою на адресу сторінки і сторінковий зсув, а потім перетворюють у фізичну адресу із використанням таблиць сторінок, кеша трансляції тощо).

Формування адреси у разі сторінково-сегментної організації пам’яті показане на рис. 8.10.

Рис. 8.10. Сторінково-сегментна організація пам’яті в архітектурі IA-32

Необхідність підтримки сегментації в IA-32 значною мірою є даниною традиції (це пов’язано з необхідністю зворотньої сумісності зі старими моделями процесорів, у яких була відсутня підтримка сторінкової організації пам’яті). Сучасні ОС часто обходять таку сегменту організацію майже повністю, використовуючи в системі лише кілька загальних сегментів, причому кожен із них задають селектором, у дескрипторі поле base дорівнює нулю, а поле limit – максимальній адресі лінійної пам’яті. Зсув логічної адреси завжди буде рівний лінійній адресі, а отже, лінійну адресу можна буде формувати у програмі, фактично переходячи до чисто сторінкової організації пам’яті.

Реалізація керування основною пам’яттю: Windows XP

Сегментація у Windows XP

Система Windows XP використовує загальні сегменти пам’яті. Для всіх сегментів у програмі задають однакові значення бази і межі, тому роботу з керування пам’яттю аналогічним чином передають на рівень лінійних адрес (які є зсувом у цих загальних сегментах).

Сторінкова адресація у Windows XP

Під час роботи з лінійними адресами у Windows XP використовують дворівневі таблиці сторінок, повністю відповідні архітектурі IA-32. У кожного процесу є свій каталог сторінок ,кожен елемент якого вказує на таблицю сторінок. Таблиці сторінок усіх рівнів місять по 1024 елементи таблиці сторінок, кожний такий елемент вказує на фрейм фізичної пам’яті. Фізичну адресу каталогу сторінок зберігають у блоці KPROCESS.

Розмір лінійної адреси, з якою працює система, становить 32 біти. З них 10 біт відповідають адресі в каталозі сторінок, ще 10 – це індекс елемента в таблиці, останні 12 біт адресують конкретний байт сторінки (і є зсувом).

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

Для платформо-незалежного визначення розміри сторінки у Win32 API використовують універсальну функцію отримання інформації про систему GetSystemInfo():

SYSTEM_INFO info;                  //структура для отримання інформації про систему

GetSystemInfo(&info);

printf(“Розмір сторінки: %d\n”, info.dwPageSize);


Дата добавления: 2018-04-05; просмотров: 409; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!