Ноу Інти, лекція, функціонування менеджера пам'яті

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

Рекомендується модифікувати попередню програму для передачі інформації через фрагмент пам'яті, що, спроектований не в звичайний файл, а в системну область вивантаження. Для цього в якості параметра описателя файлу функції CreateFileMapping потрібно вказати INVALID_HANDLE_VALUE.

фізична пам'ять

Фізична (в даному випадку оперативна) пам'ять і зовнішня пам'ять також описуються відповідними структурами даних.

ОС Windows підтримує до 4 Гб (деякі версії і більш) фізичної пам'яті. Пам'ять понад 32 Мб вважається "великий". Обсяг пам'яті можна подивитися на вкладці "Швидкодія" диспетчера задач. Інформація про стан сторінок фізичної пам'яті і їх приналежності процесам знаходиться в базі даних PFN (page frame number), а використання зовнішньої пам'яті здійснюється через сторінкові файли або файли вивантаження.

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

Структура системних сторінкових файлів документально. Відомо, що в системі може бути до 16 сторінкових файлів. Інформація про сторінкових файлах знаходиться в розділі HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Memory Management \ PagingFiles реєстру, однак управління сторінковими файлами рекомендується здійснювати через аплет "система" адміністративної консолі управління. У кожного файлу підкачки є початковий і максимальний розмір. З метою зменшення ймовірну фрагментації їх створюють максимального розміру.

Корисну інформацію про використання сторінкових файлів можна отримати, спостерігаючи за лічильниками на вкладці "Продуктивність", а також за допомогою диспетчера задач. Наприклад, лічильник "Page File Bytes" показує загальне число переданих сторінок.

Робочі набори процесів

Згідно з документацією по ОС Windows, робочим набором процесу називається сукупність фізичних сторінок. виділених процесу. Розмір робочого набору повинен знаходитися в деяких межах, визначених константами системи в залежності від сумарного обсягу фізичної пам'яті. Наприклад, якщо фізичної пам'яті достатньо, то робочий набір процесу повинен бути в діапазоні від 50 до 345 сторінок. Маючи привілей Increase Scheduling Priority (про привілеї див. Частину V), ці значення можна змінювати за допомогою функції SetProcessWorkingSet.

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

Еволюцію робочого набору процесу можна "побачити", спостерігаючи за лічильниками Working Set і ін. В оснащенні "Продуктивність", а також за допомогою Диспетчера завдань і утиліт Pview, Pviewer і ряду інших. Важливо розуміти, що зміна робочих наборів є наслідком сторінкових порушень. які відбуваються при фактичному зверненні до сторінок пам'яті. Простого виділення і передачі пам'яті тут недостатньо.

Прогін програми, що ілюструє збільшення робочого набору процесу

Розглянемо легку модифікацію програми DemoVM, додавши туди операцію запису одного байта на кожну сторінку переданої пам'яті (програма DemoPageFaults.c).

Нарощування обсягу переданої пам'яті і розміру робочого набору буде відбуватися після натискання клавіші "Enter". Подивимося на поведінку лічильника "Робоча безліч" для процесів DemoVM і DemoPageFaults. Незважаючи на однаковий обсяг переданої фізичної пам'яті, розміри робочого набору сильно відрізняються. У DemoVM він залишається близьким до нуля, тоді як у процесу DemoPageFaults йде помітне ступеневу збільшення робочого набору (див. Рис. 10.5)

Ноу Інти, лекція, функціонування менеджера пам'яті


Мал. 10.5. Спостереження за змінами робочих наборів процесів

Заміщення сторінок в робочому наборі процесу - одна з найбільш відповідальних операцій. Справа в тому, що зменшення частоти page fault`ов є однією з ключових завдань системи управління пам'яттю (наприклад, відомо, що ймовірності page fault'а 5 * 10 -7 виявляється досить, щоб знизити продуктивність сторінкової схеми управління пам'яттю на 10%.) . Вирішення цього завдання пов'язане з розумним вибором алгоритму заміщення сторінок. Якщо стратегія заміщення обрана правильно, то в оперативній пам'яті залишається тільки найактуальніша інформація, яка може знадобитися в недалекому майбутньому і яка не потребує заміщення (на цю тему написано багато книг, див., Наприклад, [Карпов]).

В ОС Windows використовуються алгоритми FIFO (first input first output) в многопроцессорном варіанті і LRU - в однопроцесорному. Насправді застосовується не LRU. а його програмна реалізація NFU (not frequently used), згідно з якою сторінка характеризується не давністю, а частотою використання. Однак, згідно з документацією по ОС Windows, алгоритм, який здійснює модифікацію розміру робочого набору процесу, називається саме LRU. Що стосується алгоритму FIFO, незважаючи на певні недоліки, його застосування спрощує обробку посилань на сторінку від декількох процесорів.

База даних PFN. сторінкові демони

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

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

Формально, кожна сторінка фізичної пам'яті повинна знаходитися в складі робочого набору або входити в один з підтримуваних базою зв'язкових списків сторінок. Переміщення сторінок між списками і робочими наборами здійснюється системними потоками-демонами, що входять до складу менеджера пам'яті (див. [Руссинович]). Параметри настройки демонів зберігаються в розділі HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Memory Management реєстру

Загальне керівництво і реалізацію загальних правил управління пам'яттю здійснює диспетчер робочих наборів (working set manager), який викликається системним потоком ядра - диспетчером настройки балансу - раз в секунду або при зменшенні обсягу вільної пам'яті нижче порогового значення.

Схожі статті