Принцип дії віртуальної пам 'яті

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

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

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

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

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

(ця адреса зберігається в регістрах CS, DS тощо) та ефективної адреси ЕА (зміщення в сегменті). Підсумовуючи належним чином ці дві частини логічної адреси, ми одержуємо фізичну адресу.

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

При підготовці задачі до розв'язання операційна система складає список (таблицю) адрес дескрипторів тих сегментів, котрі будуть використані й задіяні при розв'язанні задачі. Складання таких таблиць відбувається на етапі компонування програми. Вони бувають двох типів: глобальна таблиця дескрипторів (GDT) і локальні таблиці дескрипторів (LDT). Таблиця GDT - одна в системі. До неї записуються дескриптори сегментів, які можуть бути задіяні при виконанні багатьох задач. Звичайно в GDT знаходиться перелік сегментів операційної системи, котрі можуть знадобиться для даної задачі.

Таблиць LDT може бути багато. Вони містять перелік сегментів програм, що працюють під керівництвом операційної системи, тобто прикладних програм окремих задач. Таблиці дескрипторів у МП-286 можуть мати об'єм від 8 байтів до 64 Кбайтів, тобто можуть містити від одного до 8192 дескрипторів. Кожній таблиці відповідає свій базовий регістр GDTR та LDTR, у котрих записані базові адреси відповідних таблиць.

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

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

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

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

Логічна адреса, за якою складається фізична адреса шуканого байта, у МП-86 складається з базової адреси програмного сегмента

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

Основну частину 64-бітового (тобто восьмибайтового) дескриптора складає 24-розрядна базова адреса шуканого сегмента. По ній визначається й обирається сегмент. А ефективна адреса дає зміщення шуканого байта в цьому сегменті.

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

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

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

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

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

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

- процесор перевіряє таблицю дескрипторів і виявляє, що такого сегмента в операційній пам'яті немає;

- відсутність сегмента викликає переривання;

- виконується запис із диска потрібного сегмента в режимі ПДП;

- операційна система коригує таблицю дескрипторів;

- керування передається перерваній програмі.

За переповнення операційної пам'яті операційна система повертає сегменти, що давно не використовувались, на диск.

Для кращого розуміння того, що являє собою дескриптор, можна запропонувати таку аналогію:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: