Глобальне і локальне заміщення сторінок



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

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

У більшості сучасних ОС реалізоване глобальне заміщення сторінок або змішаний варіант, за якого більшу частину часу використовують локальне заміщен­ня, а у разі нестачі пам’яті – глобальне.

Блокування сторінок у пам’яті

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

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

2. Процес А видає команду контролеру (вказавши як параметр адресу буфера) і призупиняється, чекаючи введення.

3. ОС перемикає контекст і передає керування процесу В.

4. Процес В генерує сторінкове переривання.

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

6. Внаслідок пошуку алгоритм вибирає для заміщення сторінку, де розташований буфер введення процесу А.

7. ОС заміщає сторінку, зберігаючи її дані на диску і завантажуючи у фрейм нову сторінку.

8. ОС перемикає контекст і передає керування знову процесу А.

9. Контролер починає запис даних за адресою, заданою на кроці 2.

10.Ця адреса тепер відповідає фрейму, у який завантажена сторінка процесу В, у результаті дані процесу В будуть перезаписані, і він швидше за все завершиться аварійно.

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

Використання блокування сторінок у пам’яті не обмежене описаною ситуацією. Приміром, код і дані ОС мають увесь час перебувати в основній пам’яті, тому всі відповідні сторінки варто заблокувати у пам’яті. Пам’ять, що не бере участі у заміщенні сторінок, називають невивантажуваною (nonpaged memory) на противагу вивантажуваній (paged memory).

Блокування сторінки у пам’яті потенційно небезпечне тим, що ця сторінка взагалі не буде розблокована і залишиться в основній пам’яті надовго. На практиці це зазвичай зводиться до обмеження блокування сторінок процесами користувача (наприклад, деякі ОС приймають «підказки» від процесів із приводу блокування сторінок, але залишають за собою право ігнорувати їх у разі нестачі пам’яті або коли процес збирається блокувати занадто багато сторінок).

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

Фонове заміщення сторінок

Дотепер ми припускали, що заміщення сторінок відбувається за необхідності (коли процес генерує сторінкове переривання, а ОС не знаходить вільного фрейму Насправді із погляду продуктивності такий підхід не є оптимальним. У більшості сучасних ОС реалізується інший підхід – фонове заміщення сторінок.

Під час запуску ОС стартує спеціальний фоновий процес, або потік, який називають процесом підкачування або сторінковим демоном (swapper). Цей процес час від часу перевіряє, скільки вільних фреймів є в системі. Якщо їхня кількість менша за деяку допустиму межу, сторінковий демон починає заміщувати сторінки різних процесів, вивільняючи відповідні фрейми. Він продовжує займатися цим доти, поки кількість вільних фреймів не перевищить потрібної межі чи він не вивільнить деяку наперед відому кількість фреймів. Таким чином кількість вільних фреймів у системі підтримують на певному рівні, що підвищує її продуктивність

Фонове заміщення сторінок звичайно використовують разом із буферизацієї сторінок, у цьому разі сторінковий демон переносить фрейми у список Lf або зберігає на диску сторінки зі списку Lm.

Зберігання сторінок на диску

Дисковий простір, що використовують для зберігання сторінок, називають простором підтримки (backing store) або простором підкачування (swap space), а пристрій (диск), на якому він перебуває, – пристроєм підкачування (swap device). Цей пристрій повинен бути якомога продуктивнішим.

У більшості випадків обмін даними із простором підкачування відбувається: швидше, ніж із файловою системою, оскільки дані розподіляються більшими блоками і не потрібно працювати з каталогами і файлами. Ця перевага може бути використана по-різному. Наприклад, під час запуску процесу можна заздалегідь копіювати весь його адресний простір у простір підкачування і вести весь подаль ший обмін даними тільки із цим простором. У результаті на диску завжди перебуватиме образ процесу. При цьому одним сторінкам на диску відповідатимуть фрейми пам’яті, іншим – ні, але кожна сторінка, завантажена у фрейм пам’яті завжди відповідатиме сторінці на диску. Така стратегія вимагає багато місця для простору підкачування. Можна також під час першого завантаження на вимог звертатися до файлу із файлової системи та зчитувати дані з нього, а в разі заміщення сторінок зберігати їх у просторі підкачування. Тому там зберігатимуться тільки заміщені сторінки, і не кожній сторінці у пам’яті відповідатиме сторінка на диску, тобто образ процесу на диску не зберігатиметься.


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

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






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