файлом, у якому зберігається програма, що виконується. Під зв'язком з файлом розуміється відображення віртуального сегмента і його сторінок на визначену область диска, з якої завантажуються дані віртуальних сторінок сегмента при їхньому переміщенні в ОП, а також куди містяться дані при витисненні віртуальних сторінок на диск. Віртуальні сторінки, що були споконвічно узяті з визначеного файлу, називаються vnode-сторінками, а сторінки, що з'явилися тільки при розгортанні процесу (а це звичайно сторінки чи стека неініціалізованих сегментів даних) - анонімними сторінками. Однак анонімні сторінки також мають зв'язок з файлом, у який вони виштовхуються при їхньому витисненні з фізичної пам'яті (так званий свопінг-прилад). На свопінг-прилад також указує vnode, тому в цій якості може виступати будь-як файл, а переміщення сторінок зі свопінг-прилад в пам'ять здійснюється тими ж функціями, що використовуються для vnode-сторінок.
Віртуальний адресний простір. Теоретично будь-який ВАП може бути розрідженим, так що здатність використовувати велику кількість розкиданих секцій не є в дійсності властивістю архітектури ВП. Іншими словами, будь-яка 32-х бітна машина повинна дозволяти процесу мати 50 000 секцій даних, розділених проміжками по 100 Мбайт, у межах від 0 до 4 Гбайт. Однак, у багатьох реалізаціях лінійна сторінкова таблиця від 0 до самої старшої використовуваної сторінки зберігається в пам'яті ядра. На машині з розміром сторінки в 1 Kб. ця конфігурація вимагає 4 мільйони елементів таблиці сторінок, роблячи таку схему дуже дорогою. Навіть при багаторівневій організації сторінкової таблиці така розрідженість у кращому випадку неприйнятна. Наприклад у ядрі Mach ОC UNIX при його розробці споконвічно ставилася задача повної підтримки розріджених адресних просторів.
Мал. 26. Адресний простір із призначеними областями,
відображеними об'єктами і не використовуваними адресами
Ключовим поняттям, зв'язаним з використанням ВАП, є об'єкт пам'яті (memory object). Об'єкт пам'яті може бути сторінкою чи набором сторінок, а також може бути файлом чи більш спеціальною структурою даних, наприклад, записом БД. Об'єкт пам'яті може бути відображений у не використовувану частину ВАП, формуючи нову область, як це показано на рис.26. Коли файл відображений у ВАП, то його можна читати в нього чи можна писати за допомогою звичайних машинних команд. Відображені (mapped) файли посторінково витісняються з пам'яті звичайним чином. Коли процес завершується, то його відображені в пам'ять файли автоматично повертаються у ФС разом із усіма змінами, що відбулися з їхнім змістом у той час, коли вони були відображені в пам'ять. Також можливо скасувати відображення файлу іншого об'єкта пам'яті, звільняючи його адресний простір і роблячи його доступним для послідовного його розподілу відображення.
Звичайно, відображення файлів у пам'ять не єдиний спосіб доступу до них. Їхній вміст можна читати і звичайним способом. Однак і в цьому випадку бібліотечні функції можуть відображати файли в пам'ять крім бажання користувача, а не використовувати систему в/в. Такий спосіб дозволяє сторінкам файлів використовувати систему ВП, а не спеціально виділені буфери де-небудь у системі.
Таблиця
Примітиви для керування віртуальним адресним простором
Виклик | Опис
Allocate | Робить область віртуального адресного простору використовуваною
Deallocate | Звільняє область віртуального адресного простору
Map | Відображає об'єкт пам'яті у віртуальний простір
Copy | Копіює область в інший діапазон віртуальних адрес
Inherit | Встановляє атрибут спадкування для області
Read | Читає дані з адресного простору іншого процесу
Write | Записує дані в адресний простір іншого процесу
Перший виклик, Allocate, робить область віртуальних адрес використовуваною. Процес може успадковувати призначений адресний простір, а може і призначити додаткове, але будь-яка спроба звернутися до непризначеної адреси буде викликати помилку. Другий виклик, Deallocate, звільняє область (тобто видаляє її з карти пам'яті), що дає можливість призначити її чи занову відобразити що-небудь у неї, використовуючи виклик Map.
Виклик Copy копіює об'єкт пам'яті в нову область. Оригінальна область залишається незмінною. Операція Copy виконується оптимізованим способом з використанням поділюваних сторінок, щоб уникнути фізичного копіювання.
Виклик Inherit впливає на спосіб спадкування областю властивостей при створенні нового процесу. Адресний простір може бути сконфігурованим так, що деякі області будуть успадковувати властивості, а деяких немає. Виклики Read і Write дозволяють одержати доступ до віртуальної пам'яті, що відноситься до іншого процесу.
5.2. Стратегії: переміщення ардес по вимозі, заміщення сторінок та
звільнення зайнятих сторінок
Всі методи управління ВП мають одну і ту ж мету – зберігати в пам’яті мультипрограмну суміш, необхідну для мультипрограмування.
Віртуальна пам’ять – це технологія, яка дозволяє виконувати процес, який може тільки частково знаходитись в основній пам’яті. Таким чином ВП дозволяє виконувати програми, розміри яких більше розмірів фізичного адресного простору.
Переміщення адрес по вимозі (demand paging). ВП найчастіше реалізується на базі сторінкової організації пам’яті, поєднаної зі свопінгом сторінок.
Свопінгу підлягають тільки ті сторінки, які необхідні процесору. Таким чином, переміщення сторінок по вимозі означає:
програма може виконуватися CPU, коли частина сторінок знаходиться в основній пам’яті, а частина – в зовнішній;
в процесі виконання нова сторінка не переміщується в основну пам’ять доти, доки в ній не з’явилося потреби.
Для врахування розподілу сторінок між зовнішньою і основною пам’яттю кожен рядок таблиці сторінок доповнюється бітом місцезнаходження сторінки (valid/invalid bit).
В тому випадку, коли процесор намагається використати сторінку, яка помічена значенням invalid , виникає подія, яка називається сторінкова недостатність (paging fault).
Сторінкова недостатність викликає переривання виконання програми і передачу виконання програми ОС. Реакція ОС на сторінкову недостатність полягає в тому, що необхідна сторінка загружається в основну пам’ять.
Основні етапи обробки сторінкової недостатності:
Процесор, перед тим, як переводити логічну адресу в