Завантаження сторінок на вимогу. Особливості підкачування сторінок



Базовий підхід, який використовують під час реалізації підкачування сторінок із диска, називають технологією завантаження сторінок на вимогу (demand paging).

Ця технологія діє у припущенні, що не всі сторінки процесу мають завантажуватися у пам’ять негайно. Завантажуються тільки ті, що необхідні для початку його роботи, інші – коли стають потрібні. Процес переносу сторінки із диска у пам’ять називають завантаженням із диска (swapping in), процес переносу сторінки із пам’яті на диск – вивантаженням на диск (swapping out).

Апаратна підтримка підкачування сторінок

Для організації апаратної підтримки підкачування кожний елемент таблиці сторінок має містити спеціальний біт – біт присутності сторінки у пам’яті Р. Коли він дорівнює одиниці, то це означає, що відповідна сторінка завантажена в основну пам’ять, і їй відповідає деякий фрейм. Якщо біт присутності сторінки дорівнює нулю, це означає, що дана сторінка перебуває на диску і має бути завантажена в основну пам’ять перед використанням (рис. 9.2).У таблиці сторінок архітектури IA-32 даний біт називають Present.

Для сторінки може бути заданий біт модифікації М. Його спочатку (під час завантаження сторінки із диска) покладають рівним нулю, потім – одиниці, якщо сторінку модифікують, коли вона завантажена у фрейм основної пам’яті. Наявність такого біта дає змогу оптимізувати операції вивантаження на диск вміст сторінки, для якої біт М дорівнює нулю, це означає, що записування на диск можна проігнорувати, бо вміст сторінки не змінився від часу завантаження у пам’ять. У таблиці сторінок архітектури IA-32 даний біт називають Dirty.

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

 

Проблеми реалізації підкачування сторінок

Під час реалізації підкачування потрібно дати відповідь на такі запитання.

Які сторінки потрібно завантажити із диска і в який час?

Відповідь на це запитання визначає прийнята в цій системі стратегія вибірки сторінок. Однією з таких стратегій є завантаження сторінок на вимогу, яку щойно було розглянуто, коли сторінку завантажують у пам’ять тільки під час обробки сторінкового переривання. Іншою стратегією такого роду є попереднє завантаження сторінок (prepaging), коли у пам’ять завантажують кілька сторінок, розташованих на диску послідовно для того щоб зменшити кількість таких сторінкових переривань. Ця технологія ґрунтується на принципі локалізації, але переваги у продуктивності у разі її застосування довести не вдалося.

Яку сторінку потрібно вивантажити на диск, коли вільних фреймів у основній пам’яті більше немає?

Відповідь на це запитання визначає стратегія заміщення сторінок.

Де у фізичній пам’яті мають розміщуватися сторінки процесу?

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

Яким чином організувати керування резидентною множиною?

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

Заміщення сторінок

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

Припустимо, що в нашій системі кожен процес у конкретний момент часу середньому звертається тільки до половини своїх сторінок. Завантаження сторінок на вимогу залишає половину сторінок кожного процесу на диску, вивільняючи половину фреймів фізичної пам’яті, які міг би зайняти цей процес, для виконання інших процесів. Тому можна завантажити у пам’ять більше процесів. Нехай основна пам’ять містить 60 фреймів. Якщо не використовувати завантаження на вимогу, в основну пам’ять можна завантажити шість процесів, кожен з яких використає 10 сторінок, причому кожній сторінці буде відповідати певний фрейм. У разі використання завантаження на вимогу ці шість процесів у конкретний момент часу використовуватимуть тільки 30 фреймів пам’яті, а інші 30 залишатимуться вільними, тому можна завантажити в них ще до шести процесів (у сумі - до дванадцяти).

Припустимо, що у пам’ять завантажено одночасно вісім процесів; у цьому разі процесор використовуватиметься активніше, ніж для шести запущених процесів, м того, вивільниться 20 фреймів. Однак загальний обсяг адресного простору завантажених процесів перевищуватиме обсяг фізичної пам’яті. Поки процеси використовують свої сторінки звичайним чином (на 50 %), всі м будуть виконуватися в основній пам’яті без проблем. Але завжди може виникнути ситуація, коли процеси зажадають більше пам’яті, ніж їм це потрібно в середньому. Згадані вісім процесів можуть у якийсь момент зажадати весь свій адресний простір, тому всього їм знадобиться 80 фреймів основної пам’яті (а їх тільки 60). Що більше процесів одночасно виконується в системі, то вища ймовірність виникнення такої ситуації. Як домогтися того, щоб вона виникала не дуже часто, розглянемо в розділі 9.7. У цьому розділі зупинимося на діях, яких вимагають від ОС, коли така ситуація вже виникла.

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

Яку саме сторінку потрібно вилучати із пам’яті, визначає алгоритм заміщення сторінок (page replacement algorithm). Вибір такого алгоритму відчутно впливає на продуктивність системи, тому що вдало підібраний алгоритм зменшує кількість сторінкових переривань, а невдала його реалізація може її значно збільшити (якщо вилучити часто використовувану сторінку, то вона незабаром може знову знадобитися і т. д.). Навіть невеликі поліпшення в методах заміщення сторінок можуть спричинити великий загальний виграш у продуктивності.

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

Ось який вигляд матиме алгоритм завантаження сторінки з урахуванням заміщення сторінок.

Знайти вільний фрейм у фізичній пам’яті:

якщо вільний фрейм є, використати його (перейти до кроку 2);

якщо вільного фрейму немає, використати алгоритм заміщення сторінок для того щоб знайти фрейм-жертву (victim frame);

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

Знайти потрібну сторінку на диску.

Прочитати потрібну сторінку у вільний фрейм (якщо раніше були виконані кроки b і c п. 1, цим фреймом буде той, котрий щойно вивільнився).

Знову запустити інструкцію, на якій відбулося переривання.

 


Дата добавления: 2018-04-05; просмотров: 1081; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!