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

Керування віртуальною й фізичною пам'яттю й робочими наборами в Windows

Для організації віртуальної пам'яті використаються наступні функції Win32:

  • VirtualAlloc резервує або погодить для резервування віртуальну пам'ять.

  • VirtualFree звільняє віртуальну пам'ять.

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

Додаток може використати пам'ять, відобразивши файл у свій адресний простір. Два процеси можуть спільно використати пам'ять, відображаючи той самий файл у свою віртуальну пам'ять.

Купа (heap) в оточенні Win32 - це область (region) зарезервованого адресного простору. Для процесу Win32 створюється купа, розмір якої за замовчуванням дорівнює 1 MB .Доступ до купи синхронізований, з метою захисту структур даних, пов'язаних з розподілом пам'яті в купі, від руйнування при спільному доступі з декількох потоків.

Оскільки функції, які засновані на глобальні або статичних даних, неправильно працюють у многопоточном оточенні, наданий механізм виділення глобальної, але пов'язаної з конкретним потоком пам'яті ( thread-local storage - TLS ). Даний механізм надає як статичні, так і динамічні методи виділення пам'яті, пов'язаної з потоком.

Для керування фізичною пам'яттю підтримується традиційна концепція робочого набору (безлічі) – working set.Робочий набір — всі фізичні сторінки, якими "володіє" процес. Власне кажучи, це все сторінки, до яких процес може звернутися, не викликавши збою сторінки. Межа робочого набору — максимальне число сторінок, який процес може володіти. При досягненні межі додавання кожної нової сторінки повинне супроводжуватися виключенням однієї сторінки з набору ( заміна в робочому наборі ).

Верхня межа розміру набору для кожного процесу за замовчуванням - максимальне значення для всієї системи - обчислюється й зберігається в MmMaximumWorkingSetSize. Це приблизно обсяг основної пам'яті мінус 512 сторінок (2 мегабайти в архітектурі x86) і мінус мінімальний розмір системного робочого набору (1.5 мегабайта в x86). Це цікаві дані, оскільки вони дають подання, скільки пам'яті реально губиться на потреби ОС. Реальна верхня межа становить 2 гігабайти мінус 64 мегабайта для 32-бітової ОС Windows.

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

Коли розмір робочого набору досягає максимуму (або виконується підстроювання робочого набору), виконується викид сторінок, щоб визволити місце для нових. В Windows використається політика локальної заміни сторінок (для порівняння, у більшості систем типу UNIX реалізована глобальна заміна). Це означає, що один процес не може зайняти всю фізичну пам'ять, крім випадку, коли інші процеси не використають неї. Алгоритм заміни заміщає найбільш давні по використанню сторінки (ведеться облік віку сторінок).

В Windows 2000 подібна схема реалізована тільки для однопроцесорних систем, в Windows XP й Windows Server 2003 — для будь-яких, у тому числі – для многопроцессорных систем. У системах Windows XP й Windows Server 2003 для керування пам'яттю реалізований новий прапор VirtualAlloc MEM_WRITE_WATCH.

В Windows розрізняються наступні типи відмов сторінок основної пам'яті:

  • Сторінки можуть бути повернуті шляхом механізму відмови в процес зі списків резервних і змінених сторінок;

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

Деякі відмови сторінок диска неминучі, наприклад, при запуску нового процесу (і відповідному завантаженню EXE- або DLL-файлів). Крім того, нормальна файлова операція вводу-виводу виконується за допомогою підкачування. При цьому кэшированные файли додаються збоєм у системний робочий набір.

Системний робочий набір.Подібно тому, як всі процеси мають робочі набори, що підкачують код і дані системного простору Windows розміщаються в системному робочому наборі. Він складається з 4 компонентів:

  • пул, що підкачує;

  • підтримуюче підкачування код і дані у виконавчому сегменті ядра;

  • підтримуюче підкачування код і дані в драйверах режиму ядра, Win32K.Sys, графічних драйверах і т.д.;

  • глобальний кэш даних файлової системи.

Щоб підрахувати фізичний (резидентний) розмір цих компонентів за допомогою системної утиліти PerfMon, варто з'ясувати значення наступних показників:

  • Пам'ять | число подкачанных у пул резидентних байтів

  • Пам'ять | число резидентних байтів системного коду

  • Пам'ять | число резидентних байтів системних драйверів

  • Пам'ять | число резидентних байтів системного кэша.

Показник лічильника байтів у пам'яті | кэше являє собою суму показників цих чотирьох "резидентних" (фізичних) лічильників.

Керування фізичною пам'яттю.Система зберігає не призначені фізичні сторінки в одному з декількох списків:

  • Список вільних сторінок

  • Список змінених сторінок

  • Список резервних сторінок

  • Список нульових сторінок

  • Список поганих сторінок - сторінки, не минулий тест пам'яті при завантаженні системи.

Списки реалізовані як записи в базі даних PFN. Вони обслуговуються як списки FIFO, або черги.

Динаміка підкачування.Нові сторінки розподіляються по робочих наборах з початку списку вільних або нульових сторінок. Сторінки, виключені з робочого набору в ході операції заміни, містяться в кінець одного з наступних списків:

  • Список змінених сторінок (якщо вони були змінені в робочому наборі)

  • Список резервних сторінок (якщо зміни не вносилися).

Рішення приймається на основі значенні біта D (dirty = змінена) у записі таблиці сторінки. Поки фізична сторінка перебуває в одному із цих списків, між нею й процесом як і раніше підтримується зв'язок.

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