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

  1. Віртуальна пам'ять. Архітектурні засоби підтримки віртуальної пам'яті
  2. 9.2 Архітектурні засоби підтримки віртуальної пам'яті.
  3. 9.2.1 Сторінкова пам'ять
  4. Мал. 9.1 Зв'язок логічного і фізичного адрес при сторінкової організації пам'яті.
  5. Мал. 9.4 Приклад дворівневої таблиці сторінок.

Передрук ОТСЮДА

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

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

Було запропоновано перекласти проблему на компьюте р. Розвиток архітектури комп'ютерів привело до значного ускладнення організації пам'яті, відповідно, ускладнилися і розширилися завдання операційної системи з управління пам'яттю. Одним з головних удосконалень архітектури стала поява віртуальної пам'яті (virtual memory). Вона вперше була реалізована в 1959 р на комп'ютері Атлас, розробленому в Манчестерському університеті, і стала популярною тільки через десятиліття.

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

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

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

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

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

Таким чином, можливість забезпечення (за підтримки операційної системи) для програми видимості практично необмеженої (32- або 64-розрядної) адресується пам'яті користувача за наявності основної пам'яті суттєво менших розмірів дуже важливий аспект. Але введення віртуальної пам'яті дозволяє вирішувати іншу не менш важливу задачу забезпечення контролю доступу до окремих сегментів пам'яті і зокрема =

  • захист призначених для користувача програм один від одного
  • і захист ОС від призначених для користувача програм.

З метою захисту віртуальна пам'ять підтримувалась і на комп'ютерах з 16-розрядної адресацією, в яких обсяг основної пам'яті найчастіше істотно перевищував 64 Кбайта (розмір віртуальної пам'яті). Наприклад, 16-розрядний комп'ютер PDP-11/70 міг мати до 2 Мбайт оперативної пам'яті. Операційна система цього комп'ютера, проте, підтримувала віртуальну пам'ять, основним змістом якої було забезпечення захисту та перерозподілу основної пам'яті між призначеними для користувача процесами.

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

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

Традиційно вважається, що існує три моделі віртуальної пам'яті:

  • сторінкова,
  • сегментна
  • і їх комбінація - сегментно-сторінкова модель.

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

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

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

Одним з досягнень сучасних ОС є грамотне та ефективне поділ коштів управління віртуальною пам'яттю на =

  • апаратно-незалежну
  • і апаратно-залежну частини.

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

Отже, ми маємо велике (для 32-розрядних архітектур це зазвичай 2 ^ 32 = 4 Гб) ВАП і фізичний простір істотно меншого розміру. Призначений для користувача процес або ОС повинні мати можливість здійснити запис по віртуальному адресою, а завдання ОС зробити так, щоб записана інформація виявилася в фізичної пам'яті (згодом при нестачі оперативної пам'яті вона може бути витіснена в зовнішню пам'ять).

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

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

9.2.1 Сторінкова пам'ять

У найбільш простому і найбільш часто використовується випадку сторінкової віртуальної пам'яті віртуальна пам'ять і фізична представляються що складаються з наборів блоків або сторінок однакового розміру. Віртуальні адреси діляться на сторінки (page), відповідні одиниці в фізичної (оперативної) пам'яті утворюють сторінкові кадри (page frames), а в цілому система підтримки сторінкової віртуальної пам'яті називається ПЕЙДЖИНГ (paging).

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

Віртуальний адреса в сторінкової системі впорядкована пара (p, d), де =

  • p - номер сторінки у віртуальній пам'яті,
  • d - зміщення в рамках сторінки p де розміщується адресованих елементів.

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

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

Для посилання на таблицю сторінок використовується спеціальний регістр процесора. Особливості зберігання таблиці сторінок описані нижче. Інтерпретація віртуального (логічного) адреси показана на рис. 9.1

Мал. 9.1 Зв'язок логічного і фізичного адрес при сторінкової організації пам'яті.

9.2.3 Таблиця сторінок

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

Отже, віртуальний адреса складається з =

  • віртуального номера сторінки (high-order bits)
  • і зміщення (low-order bits) - всередині сторінки із заданим номером.

Номер віртуальної сторінки використовується як індекс в таблиці сторінок для знаходження запису (entry) про віртуальну сторінці.
З цього запису в таблиці сторінок знаходиться номер кадру (page frame number), потім додається зсув і формується фізичну адресу. Крім цього запис в таблиці сторінок з здобуде інформацію про атрибути сторінки, зокрема біти захисту.

Основну проблему для ефективної реалізації таблиці сторінок створюють великі розміри віртуальних адресних просторів сучасних комп'ютерів, які зазвичай визначаються розрядністю архітектури процесора. Найпоширенішими на сьогоднішній день є 32-розрядні процесори, що дозволяють створювати віртуальні адресні простори такого розміром 4 Гб (для 64-розрядних комп'ютерів ця величина дорівнює 2 ^ 64б).

Підрахуємо приблизний розмір таблиці сторінок.

У 32-бітному адресному просторі при розмірі сторінки (Intel) отримуємо сторінок, а в 64-бітному та того більше. Т.e. таблиця повинна мати 1М рядків (entry), причому запис в рядку складається з декількох байт. Зауважимо, що кожен процес, потребує своєї таблиці сторінок (а в разі сегментно-сторінкової схеми по одній на кожен сегмент). Отже, в цьому випадку таблиця сторінок може бути занадто великий.

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

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

Розглянемо модельний приклад (див. Рис. 9.4). Припустимо, що 32-розрядний адреса ділиться на =

  • 10-розрядне поле Рtr1
  • 10-розрядне поле Рtr2
  • і 12-розрядний зсув Offset.

12 розрядів зсуву дозволяють локалізувати байт всередині сторінки розміром 4К (2 ** 12), а всього маємо 2 ** 20 сторінок. Як видно з рис. 9.4 1024 рядки в таблиці верхнього рівня за допомогою поля Ptr1 посилаються на 1024 таблиці другого рівня, кожна з яких містить також 1024 рядки. За допомогою поля Ptr2 кожен рядок таблиці другого рівня вказує на конкретну сторінку. Сенс такої організації в тому, щоб уникнути підтримки всіх таблиць другого рівня (а їх 1024) в пам'яті постійно. Розглянемо приклад з круглими цифрами. Припустимо, що процесу потрібні 12М пам'яті: 4М в нижній частині пам'яті для коду, 4М в нижній частині для даних і 4М у верхній частині пам'яті для стека. Між дном стека і верхом даних гігантський простір розміром 4Gb-12Mb, яке не використовується. Для цього випадку необхідні лише 1 таблиця верхнього рівня і 3 таблиці другого рівня.

Мал. 9.4 Приклад дворівневої таблиці сторінок.

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

Розглянемо одну із записів таблиці сторінок. Її розмір коливається від системи до системи, але 32 біта - найбільш загальний випадок. Найважливіше поле - номер кадру. Мета сторінкового відображення - локалізувати цю величину. Далі біт присутності. Далі біти захисту (наприклад, 0 - read / write, 1 - read only ...) Є ще біти модифікації (якщо на неї писали) і біти посилання, які допомагають виділити мало використовувані сторінки, біти дозволяють кешування. Зауважимо, що адреси сторінок на диску не є частиною таблиці сторінок.

Як наявність декількох рівнів позначається на продуктивності менеджера пам'яті? Якщо припустити, що кожен рівень - окрема таблиця в пам'яті, перетворення адреси може зажадати декількох звернень до пам'яті.

Кількість рівнів в таблиці сторінок залежить від конкретних особливостей архітектури. Можна навести приклади реалізації одноуровневого (DEC PDP-11), дворівневого (Intel, DEC VAX), трирівневого (Sun SPARC, DEC Alpha) paging'а, а також paging'а з заданим кількістю рівнів (Motorola). Функціонування RISC процесора MIPS R2000 здійснюється взагалі без таблиці сторінок. Тут пошук потрібної сторінки, якщо ця сторінка відсутня в асоціативної пам'яті, повинна взяти на себе ОС (так званий zero level paging).

про інші способи організації пам'яті читайте тут

_____________________________________________
Джерела (читати детальніше) =
http: //cs.mipt.ru/docs/courses/osstud/09 ...
Ключові слова і фрази (для пошуку) =
Як наявність декількох рівнів позначається на продуктивності менеджера пам'яті?