Управления оперативной памятью в Windows.
Вся память делится на две части: 2Гб – пользовательская, 2Гб – системная. Системная состоит из подкачиваемой и неподкачиваемой, а пользовательская часть – вся подкачиваемая (состоит только из вытесняемых страниц). Пользовательский процесс использует страницы, монопольно ему принадлежащие и общие (например, *.dll). Для упрощения работы существует каталог страниц и собственная таблица страниц.
Исполнительный адрес (p, s), p = (Ic, It), а s = Ib, где Ic – индекс каталога, It – индекс таблицы, Ib – индекс байта.

PTE (Page Table Entry) описывает как найти нужную страницу для процесса.
PFN (Page Frame Number) содержит информацию о блоках.
Страница может быть либо пользовательская, либо системная. PTE должен содержать информацию о том, какая это страница. Будем считать, что только системные страницы являются разделяемыми, реально это не так. Если страница разделяемая, то PTE называется прототипом, т.к. он ссылается не на реальную базу данных, а на другую таблицу страниц, где находится ссылка на физический блок. Пользовательский PTE бывает либо действительный и указывает на страницу, загружаемую в память и принадлежащую процессу, либо недействительный и указывает на страницу, не принадлежащую страницу. Если PTE недействителен, то происходит обращение диспетчеру памяти, который должен удовлетворить запрос на эту страницу.
База PFN тоже структурирована. Все блоки в базе разбиты на несколько групп:
· Свободные блоки (фреймы), т.е. те, в которые не загружена ни одна страница и которые могут быть выделены или требуют загрузки новой страницы
· Неиспользуемые блоки
· Модифицированные блоки
Неиспользуемые и модифицированные блоки не принадлежат ни одному процессу, при чем неиспользуемые после загрузки не были модифицированы. Эти два типа страниц появляются из-за того, что Windows работает с предварительным вытеснением и предварительной загрузкой. Если страница долго не использовалась, то она вытесняется из памяти и помещается в один из этих типов. Если нужно догрузить страницу и нет свободной ОП, то сначала вытесняются неиспользуемые, затем модифицированные страницы.
Активные фреймы памяти ни в какие списки не помещаются, информация о них хранится в таблице страниц. Активная страница называется рабочим пулом процесса. Ссылки на страницы, не входящие в рабочий пул недействительны. Если же такая ссылка нужна, то просматриваются списки и если она там есть, то она переводится в таблицу, если нет – страничное прерывание.


свободные
неиспользуемые
модифицированные
активные
PTEa –активный
PTEn – недействительный
PTEs – разделяемый
При необходимости загрузить страницу загружается сразу несколько (кластер). Этим сокращается объем операций I/O. Те страницы, которые загружаются дополнительно к необходимой, помещаются в конец списка неиспользуемых.
|