Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



“Інформаційні управляючі системи та технології” 080402 “Інформаційні технології проектування” Одеса 2010

“Інформаційні управляючі системи та технології” 080402 “Інформаційні технології проектування” Одеса 2010




Сторінка19/24
Дата конвертації10.03.2017
Розмір1.41 Mb.
1   ...   16   17   18   19   20   21   22   23   24

7. 1. 3. Логічна і фізична адресація пам’яті


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

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

Фізична адреса – адреса, якою оперує мікросхема пам’яті. Прикладна програма в сучасних комп’ютерах ніколи не має справи з фізичними адресами. Спеціальний апаратний пристрій MMU (memory management unit-пристрій керування пам’яттю) відповідає за перетворення логічних адрес у фізичні. Сукупність усіх доступних фізичних адрес становить фізичний адресний простір. Отже, якщо в комп’ютері є мвкросхеми на 128 Мбайт пам’яті, то саме такий обсяг пам’ятіадресують фізично. Логічно адресують зазвичай значно більше пам’яті. Найпростіша схема перетворення адрес зображена на рис. 7.3.

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




Рис. 7.3 Перетворення логічних адрес пам’яті у фцзичні адреси

7. 1. 4 Підхід базового і межового регістрів


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

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

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

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






Рис. 7.4 Використання базового і межового регістрів

За такого підходу до процесу виділяють тільки одну пару значень „базова адреса-межа”. Природним розвитком цієї ідеї стало відображення адресного простору процесу за допомогою кількох діапазонів фізичної пам’яті, кожен з яких задають власною парою значень базової адреси і межі. Так виникла концепція сегментації пам’яті.


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

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


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

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

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






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

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






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

Наведемо переваги сегментації пам’яті.



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



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

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

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

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

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

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

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

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


В архітектурі ІА-32 логічні адреси в програмі формуються із використаннням сегментації і мають такий вигляд „селектор-зсув”. Значення селектора завантажують у спеціальний регістр процесора (сегментний регістр) і використовують як індекс у таблиці дескрипторів сегментів, що перебуває в пам’яті та є аналогом таблиці сегментів, описаної раніше. В архітектурі ІА-32 підтримуються шість сегментних регістрів. Це означає, що виконуваний код в один і той самий час може адресувати шість незалежних сегментів.

Селектор містить індекс дескриптора в таблиці, біт індикатора локальної або глобальної таблиці та необхідний рівень привілеїв.

Для системи задають спільну глобальну таблицю дескрипторів (Global Descriptor Table, GDT), а для кожної задачі – локальну таблицю дескрипторів (Local Descriptor Table, LDT).

Дескриптори в ІА-32 мають довжину 64 біти. Вони визначають властивості програмних об’єктів (наприклад, сегментів пам’яті або таблиць дескрипторів ).

Дескриптор містить значення бази (base), яке відповідає адресі об’єкта (наприклад, початок сегмента); значення межі (limit); тип об’єкта (сегмент, таблиця дескрипторів тощо); характеристики захисту.

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

Проте жодного разу не було згадано, що в дескрипторі зберігають фізичну адресу. Річ у тому, що для архітектури ІА-32 внаслідок перетворення логічної адреси отримують не фізичну адресу, а ще один вид адреси, який називають лінійною адресою. У розділі 7.4 розглянемо таке двопорівневе перетворення адреси.

1   ...   16   17   18   19   20   21   22   23   24



  • 7. 1. 4 Підхід базового і межового регістрів
  • 7. 2 Сегментація пам’яті
  • 7.2.2. Реалізація сегментації в архітектурі ІА-32