Віртуальна пам'ять. Розбиття адресного простору процесу на частини і динамічна трансляція адреси. Архітектурні засоби підтримки віртуальної пам'яті


Суть концепції віртуальної пам'яті полягає в наступного . Інформація, з якою працює активний процес, повинна розташовуватися в оперативній пам'яті. У схемах віртуальної пам'яті у процесу створюється ілюзія того, що вся необхідна йому інформація є в основній пам'яті. Для цього, по-перше, займана процесом пам'ять розбивається на кілька частин, наприклад сторінок. По-друге, логічна адреса (логічна сторінка), до якого звертається процес, динамічно транслюється в фізична адреса (Фізичну сторінку). І, нарешті, в тих випадках, коли сторінка, до якої звертається процес, чи не знаходиться у фізичній пам'яті, потрібно організувати її підкачування з диска. Для контролю наявності сторінки в пам'яті вводиться спеціальний біт присутності, що входить до складу атрибутів сторінки в таблиці сторінок.

Можливість виконання програми, що знаходиться в пам'яті лише частково , Має ряд цілком очевидних переваг.



  • Програма не обмежена об'ємом фізичної пам'яті. Спрощується розробка програм, оскільки можна задіяти великі віртуальні простори, не піклуючись про розмір використовуваної пам'яті.

  • Оскільки з'являється можливість часткового приміщення програми (процесу) в пам'ять і гнучкого перерозподілу пам'яті між програмами, можна розмістити в пам'яті більше програм, що збільшує завантаження процесора і пропускну здатність системи.

  • Обсяг введення-виведення для вивантаження частини програми на диск може бути менше, ніж в варіанті класичного свопінгу , В результаті кожна програма буде працювати швидше.

Але введення віртуальної пам'яті дозволяє вирішувати іншу, не менш важливе завдання - забезпечення контролю доступу до окремих сегментів пам'яті і, зокрема, захист призначених для користувача програм один від одного і захист ОС від призначених для користувача програм. Кожен процес працює зі своїми віртуальними адресами, трансляцію яких у фізичні виконує апаратура комп'ютера. Таким чином, призначений для користувача процес позбавлений можливості безпосередньо звернутися до сторінок основної пам'яті, зайнятим інформацією, що відноситься до інших процесів.

Архітектурні засоби підтримки віртуальної пам'яті діляться на сегментні, сторінкові і сегментно-сторінкові розподілу пам'яті.

сегментний

Програму необхідно розбивати на частини і вже кожній такій частині виділяти фізичну пам'ять. Природним способом розбиття програми на частини є розбиття її на логічні елементи - сегменти.

Розбиття на сегменти дозволяє диференціювати користувач може отримати доступ до різних частин програми (сегментам). Можна заборонити звертатися з операціями запису і читання в кодовий сегмент програми, а для сегмента даних дозволити тільки читання. Розбиття програми на «осмислені» частини робить принципово можливим розділенням одного сегмента декількома процесами.

Логічно звернення до елементів програми в цьому випадку буде складатися з імені сегмента і зміщення відносно початку цього сегмента.

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

При розміщенні кожного з сегментів в оперативній або зовнішньої пам'яті ОС відзначає в дескрипторі поточне місце розташування сегмента.

При передачі управління наступної задачі ОС повинна занести до відповідного регістру адресу таблиці дескрипторів сегментів цього завдання.

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

Тому:


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

Навіть якщо потреби в пам'яті не такі великі, можна розміщувати в пам'яті більше завдань , Оскільки будь-якого завдання, як правило, всі її сегменти одночасно не потрібні.

Рішення проблеми заміщення (визначення того сегмента, який повинен бути або переміщений в зовнішню пам'ять, або просто заміщений новим) використовуються наступні дисципліни:

FIFO (First In First Out) перший прийшов - перший пішов

LRU (Least Recently Used) що не використовується довше інших

LFU (Least Frequently Used) використовується рідше інших

Random-випадковий вибір сегмента
Сторінковий спосіб при якому всі фрагменти завдань вважаються рівними, причому довжина фрагмента в ідеалі повинна бути кратна ступеня 2, щоб операції додавання можна було замінити операціями конкатенації.

Частина віртуальних сторінок завдання можуть бути розміщені в ОП, а частина - в зовнішній пам'яті.

Місце у зовнішній пам'яті називають файлом підкачки, або сторінковим файлом (paging file). Іноді це файл називають swap - файлом, тим самим підкреслюючи, що записи цього файлу - сторінки - заміщають один одного в ОП

Розбиття всієї ОП на сторінки однакового розміру, причому кратної ступеня двійки, призводить до того, що замість одновимірного адресного простору пам'яті можна говорити про двовимірному. Перша координата адресного простору - це номер сторінки , Друга координата - номер комірки всередині обраної сторінки (індекс).

Таким чином, фізичну адресу визначається парою (Рр, i), а віртуальний адреса - парою (Pv, i), де Pv - номер віртуальної сторінки, Рр - номер фізичної сторінки, i - індекс осередки всередині сторінки

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

Зазвичай надається перша ж вільна сторінка. Якщо вільної фізичної Сторінка наразі не має, то диспетчер пам'яті по одній з дисциплін заміщення (LRU, LFU, FIFO, випадковий доступ) визначить сторінку, що підлягає розформуванню або збереженню у зовнішній пам'яті. На її місці він розмістить нову віртуальну сторінку, до якої було звернення з завдання, але якої не виявилося в ОП. Для абсолютної більшості сучасних ОС характерна дисципліна заміщення сторінок LRU як найбільш ефективна. Так, саме ця дисципліна використана в OS / 2 і Linux.

Однак в ОС Windows NT / 2000 / XP розробники, бажаючи зробити їх максимально незалежними від апаратних можливостей процесора, відмовилися від цієї дисципліни і застосували правило FIFO. Тому, щоб компенсувати її неефективність була введена «буферизация» тих сторінок, які повинні бути записані в файл підкачки на диск або просто розформовані. Принцип буферизації наступний: перш ніж замещаемая сторінка дійсно виявиться у зовнішній пам'яті або просто розформованої, вона позначається як «кандидат на вивантаження».

Якщо наступного разу відбудеться звертання до сторінки, що знаходиться в такому «буфері», то сторінка нікуди не вивантажується і йде в кінець списку FIFO

В іншому випадку сторінка дійсно вивантажується, а на її місце в «буфер» потрапляє наступний «кандидат».

Величина «буфера» не може бути великою, тому ефективність сторінкової реалізації пам'яті в Windows NT / 2000 / XP набагато нижче, ніж в інших ОС , І явище пробуксовки проявляється навіть при відносно великій обсязі ОП
Структура таблиці сторінок
Багаторівневі таблиці сторінок

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

У 32-бітному адресному просторі при розмірі сторінки 4 Кбайт (Intel) отримуємо 232/212 = 220, тобто приблизно 106 сторінок - таблиця повинна мати приблизно 106 рядків, а запис в рядку складається з декількох байтів. Кожен процес має потребу в своїй таблиці сторінок.

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

В ОП зберігають лише деякі , Необхідні для конкретного моменту виконання фрагмента таблиці сторінок.

В силу властивості локальності число таких фрагментів відносно невелике.


Локальність - здатність протягом обмеженого відрізка часу працювати з невеликим набором адрес пам'яті.

Розрізняють тимчасову локальність (висока ймовірність повторного звернення по одному і тому ж адресою в найближчим час) і просторову локальність (висока ймовірність повторного звернення по сусідньому адресою найближчим часом).

Одним з найбільш поширених способів розбиття є організація так званої багаторівневої таблиці сторінок.

За допомогою однієї таблиці другого рівня можна охопити 4Мбайт ОП. Для розміщення процесу з великим об'ємом займаної пам'яті досить мати в ОП одну таблицю першого рівня і кілька таблиць другого рівня. Очевидно, що сумарна кількість рядків в цих таблицях багато менше 220.

Кількість рівнів в таблиці сторінок залежить від конкретних особливостей архітектури.

Прикладом реалізації одноуровневого (DEC PDP-11), дворівневого (Intel, DEC VAX), трирівневого (Sun SPARC, DEC Alpha) пейджінга, а також пейджінга із заданою кількістю рівнів (Motorola).
Інвертована таблиця сторінок

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

Наприклад, для Pentium з 256 Мбайт ОП потрібна таблиця розміром 64 Кбайт рядків.

Незважаючи на економію ОП, застосування інвертованою таблиці має істотний мінус - записи в ній (як і в асоціативної пам'яті) НЕ відсортовані по зростанню номерів віртуальних сторінок, що ускладнює трансляцію адреси.

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

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


Інвертована таблиця сторінок

Кожній сторінці фізичної пам'яті відповідає одна запис в хеш-таблиці і інвертованою таблиці сторінок.

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

Пошук номера кадру, відповідного потрібній сторінці, в багаторівневої таблиці сторінок вимагає декількох звернень до основної пам'яті, тому займає багато часу. У деяких випадках така затримка недопустима.

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

Це пристрій називають асоціативної пам'яттю або буфером пошуку трансляції (translation lookaside buffer - TLB).

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

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

Якщо запис в асоціативної пам'яті відсутній, відображення здійснюється через таблицю сторінок: відбувається заміна однієї з записів в асоціативної пам'яті знайденої записом з таблиці сторінок (конструкція асоціативної пам'яті повинна дозволяти виявляти ті «старі» записи, які можуть бути заміщені «новими»).

Одна запис таблиці в асоціативної пам'яті містить інформацію про одну віртуальної сторінці: її атрибути і кадр, в якому вона знаходиться (поля в точності відповідають полям у таблиці сторінок).

Число вдалих пошуків номера сторінки в асоціативної пам'яті по відношенню до загальної кількості пошуків називається hit ratio ( «відсоток влучень в кеш»).

Звернення до одних і тих же сторінок підвищує hit ratio (чим більше hit ratio, тим менше середній час доступу до даних, що знаходяться в ОП).


Приклад: Якщо для доступу до пам'яті через таблицю сторінок необхідно 100 нс, а для доступу через асоціативну пам'ять - 20 нс. Якщо hit ratio = 90%, то середній час доступу -> 0,9x20 + 0,1x100 = 28нс.
Мінус: При перемиканні контексту процесу при використанні асоціативної пам'яті потрібно її «очищення», що веде до збільшення часу перемикання контексту.
Сегментно-сторінковий

Метод являє собою комбінацію сегментного і сторінкового розподілу пам'яті і поєднує в собі переваги обох підходів.

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

Завантаження процесу виконується ОС посторінково, при цьому частина сторінок розміщається в ОП, а частина на диску.

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

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

Віртуальний адреса складається з двох складових:
1. вказівка на номер сегмента
2. зміщення відносно початку сегмента
2.1. віртуальна сторінка
2.2. індекс

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


+ Розбиття програми на сегменти дозволяє розміщувати окремі сегменти в пам'яті цілком , Що дозволяє скоротити число звернень до відсутніх сторінок, тому що ймовірність виходу за межі сегмента менше ймовірності виходу за межі сторінки;

+ Наявність сегментів полегшує поділ програмних модулів між паралельними процесами;

+ Можлива динамічна компоновка завдання;

+ Виділення пам'яті всередині сторінок дозволяє мінімізувати фрагментацію.

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

Принципова можливість реалізації сегментно-сторінкової організації пам'яті закладена в сімейство мікропроцесорів i80x86, однак внаслідок слабкої апаратної підтримки, труднощів при створенні систем програмування і ОС в ПК ця можливість не використовується.


  1. Поділіться з Вашими друзями: