Фізичний адрес
Рис. 25. Схема перетворення віртуальної адреси у фізичну для
сегментно-сторінкової організації пам'яті
5. Управління віртуальною пам’яттю
5.1. Організація ВП
ВП відрізняється від звичайної ОП тим, що якісь її рідко використовувані фрагменти можуть знаходитися на диску і довантажуватися в реальну ОП у міру необхідності. Така організація пам'яті дозволяє зняти обмеження, що накладається обсягом фізичної пам'яті, установленої на ЕОМ. Для реалізації ВП використовують, наприклад, динамічнупереадресацію. Сегментом у термінах ВП називається область пам'ятіз 2Lсторінок. Спочатку по номеру в таблиці сегментів відшукується сегмент. Таблиця сегментів міститьпочаткову адресу таблиці сторінок. Друга частина адресу використовується для звертання в цютаблицю, і по нійзнаходитьсяфізичний адрес даноїсторінки. Результатипошуку по таблицяхзапам'ятовуються у швидкодіючомуасоціативному ЗП, названомуTLB. Найбільш часто вживаніадресивідкладаються в TLB і тому 98-99% звертань до пам'ятійдуть без перегляду таблиць.
Сторінковаорганізаціяпам'яті – організація, при якійадреснийпростірпам'ятірозбивається на малі ділянки – сторінки. Використовується для керуванняпам'яттю в системах, щопрацюють у захищеному режимі. Як правило, такаорганізаціяпам'ятімає на увазіпейджинг – механізмВП, при якомусторінкивитісняються на диск і підкачуютьсяз диска.
Кожен сегмент має зв'язок з дисковим простором, на якому зберігаються дані, відображувані в даний сегмент ВАП. Це може бути чи файл частина файлу на диску, чи ж це може бути областьсвопінгу, що файлом не є. Сегмент чи сегмент коду ініціалізованих даних звичайно зв'язаний з файлом, у якому зберігається програма, що виконується. Під зв'язком з файлом розуміється відображення віртуального сегмента і його сторінок на визначенуобласть диска, з якої завантажуються дані віртуальних сторінок сегмента при їхньому переміщенні в ОП, а також куди містяться дані при витисненні віртуальних сторінок на диск. Віртуальні сторінки, що були споконвічно узяті з визначеного файлу, називаються vnode-сторінками, а сторінки, що з'явилися тільки при розгортанні процесу (а це звичайно сторінки чи стека неініціалізованих сегментів даних) - анонімними сторінками. Однак анонімні сторінки також мають зв'язок з файлом, у який вони виштовхуються при їхньому витисненні з фізичної пам'яті (так званий свопінг-прилад). На свопінг-прилад також указує vnode, тому в цій якості може виступати будь-як файл, а переміщення сторінок зі свопінг-прилад в пам'ять здійснюється тими ж функціями, що використовуються для vnode-сторінок.
Віртуальний адресний простір. Теоретично будь-який ВАП може бути розрідженим, так що здатність використовувати велику кількість розкиданих секцій не є в дійсності властивістю архітектури ВП. Іншими словами, будь-яка 32-х бітна машина повинна дозволяти процесу мати 50 000 секцій даних, розділених проміжками по 100 Мбайт, у межах від 0 до 4 Гбайт. Однак, у багатьох реалізаціях лінійна сторінкова таблиця від 0 до самої старшої використовуваної сторінки зберігається в пам'яті ядра. На машині з розміром сторінки в 1 Kб. ця конфігурація вимагає 4 мільйони елементів таблиці сторінок, роблячи таку схему дуже дорогою. Навіть при багаторівневій організації сторінкової таблиці така розрідженість у кращому випадку неприйнятна. Наприклад у ядрі Mach ОCUNIX при його розробці споконвічно ставилася задача повної підтримки розріджених адресних просторів.
Мал. 26. Адресний простір із призначеними областями,
відображеними об'єктами і не використовуваними адресами
Ключовим поняттям, зв'язаним з використанням ВАП, єоб'єкт пам'яті (memoryobject). Об'єкт пам'яті може бути сторінкою чи набором сторінок, а також може бути файлом чи більш спеціальною структурою даних, наприклад, записом БД. Об'єкт пам'яті може бути відображений у не використовувану частину ВАП, формуючи нову область, як це показано на рис.26. Коли файл відображений у ВАП, то його можна читати в нього чи можна писати за допомогою звичайних машинних команд. Відображені (mapped) файли посторінково витісняються з пам'яті звичайним чином. Коли процес завершується, то його відображені в пам'ять файли автоматично повертаються у ФС разом із усіма змінами, що відбулися з їхнім змістом у той час, коли вони були відображені в пам'ять. Також можливо скасувати відображення файлу іншого об'єкта пам'яті, звільняючи його адресний простір і роблячи його доступним для послідовного його розподілу відображення.
Звичайно, відображення файлів у пам'ять не єдиний спосіб доступу до них. Їхній вміст можна читати і звичайним способом. Однак і в цьому випадку бібліотечні функції можуть відображати файли в пам'ять крім бажання користувача, а не використовувати систему в/в. Такий спосіб дозволяє сторінкам файлів використовувати систему ВП, а не спеціально виділені буфери де-небудь у системі.
Таблиця
Примітиви для керування віртуальним адресним простором
Виклик | Опис |
Allocate | Робить область віртуального адресного простору використовуваною |
Deallocate | Звільняє область віртуального адресного простору |
Map | Відображає об'єкт пам'яті у віртуальний простір |
Copy | Копіює область в інший діапазон віртуальних адрес |
Inherit | Встановляє атрибут спадкування для області |
Read | Читає дані з адресного простору іншого процесу |
Write | Записує дані в адресний простір іншого процесу |
Перший виклик, Allocate, робить область віртуальних адрес використовуваною. Процес може успадковувати призначений адресний простір, а може і призначити додаткове, але будь-яка спроба звернутися до непризначеної адреси буде викликати помилку. Другий виклик, Deallocate, звільняє область (тобто видаляє її з карти пам'яті), що дає можливість призначити її чи занову відобразити що-небудь у неї, використовуючи виклик Map.