Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекції ОС.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.02 Mб
Скачать

5.5. Сторінкова організація пам'яті

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

Всі віртуальні адреси одного процесу відносяться до єдиного лінійному простору, Простіше сказати, віртуальний адреса виражається одним числом, від 0 до деякого максимуму. Старші розряди двійкового представлення цієї адреси визначають номер віртуальної сторінки, а молодші розряди - зміщення від початку сторінки. Наприклад, для сторінок по 4 Кб зсув займає 12 молодших розрядів адреси.

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

Найпростіший варіант схеми перетворення віртуального сторінкового адреси в фізичну адресу показаний на рис. 5-3.

Рис. 1‑22

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

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

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

Розмір простору віртуальних адрес кожного процесу може бути величезним, бо він визначається тільки розрядністю адреси. Для 32-розрядних процесорів цей розмір дорівнює 232 = 4 Гб. В даний час важко уявити програму, якою може всерйоз знадобитися стільки пам'яті, та й комп'ютер з таким обсягом пам'яті - річ не рядова [12]. Насправді, програма звичайно використовує лише невелику частину свого адресного простору, не більше декількох десятків або, в крайньому випадку, сотень мегабайт. Тільки ці використовувані сторінки і повинні бути відображені на фізичну пам'ять. Тим не менш, сумарний обсяг сторінок, котрі використовуються всіма процесами в системі, зазвичай перевершує обсяг наявної фізичної пам'яті, тому використання сторінкового файлу стає неминучим.

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

· Знайти вільну фізичну сторінку;

· Якщо вільної сторінки немає (а її найчастіше немає), то за певним алгоритмом вибрати зайняту сторінку, яка буде витіснена на диск;

· Якщо вибрана сторінка «брудна», тобто її вміст змінювалося після того, як вона востаннє була прочитана з диска, то «очистити» сторінку, тобто записати її у відповідний блок сторінкового файлу;

· На звільнену фізичну сторінку прочитати блок сторінкового файлу, закріплений за запитаної віртуальної сторінкою;

· Відкоригувати таблицю сторінок, помітивши витиснену сторінку як відсутню у фізичній пам'яті, а прочитану - як присутню і при цьому «чисту»;

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

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

Наведена схема роботи менеджера пам'яті із завантаженням сторінок по вимозі дуже схожа на кешування диска, розглянуте в п. 2.6.6. Ефективність роботи системи базується на тому ж самому ефекті локальності посилань, але тільки застосованому не до блокам диска, а до сторінок пам'яті.

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

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

Недоліком сторінкової організації є те, що при великому обсязі віртуального адресного простору сама таблиця сторінок повинна бути дуже великою. При розмірі сторінки 4 Кб і адресному просторі 4 Гб таблиця повинна містити мільйон записів! Однак навряд чи програма процесу постійно використовує весь величезний діапазон адрес. Як правило, на кожному інтервалі часу інтенсивно використовуються тільки деякі частини таблиці сторінок (це ще один прояв локальності посилань). Бажано мати можливість витісняти на диск тимчасово невикористовувані частини таблиці сторінок. Така можливість у сучасних процесорах забезпечується використанням більш складною, дворівневої схеми сторінкової адресації. У цій схемі всі адресний простір ділиться на розділи рівної величини, кожен з яких описується окремої невеликої таблицею сторінок. Є також каталог таблиць сторінок, який описує поточний стан кожної таблиці точно так само, як сама таблиця сторінок описує стан сторінок пам'яті.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]