Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционные системы. Персонализация и виртуальная память в Windows 7.pdf
Скачиваний:
37
Добавлен:
11.03.2016
Размер:
1.52 Mб
Скачать

2. ВИРТУАЛЬНАЯ ПАМЯТЬ В

WINDOWS 7

2.1.Менеджмент памяти в Windows 7

ВWindows 7 есть системная область памяти, в которой содержатся ресурсы ОС и

драйверов. Эти данные хранятся в единственном физическом экземпляре, но могут иметь несколько виртуальных отображений. Область делится на 2 типа, называемых пулами:

резидентный (англ. non-paged pool) и нерезидентный (англ. paged pool).

Резидентный пул содержит данные, которые могут понадобиться, если система не может обработать страничные прерывания. В этом случае Kernel входит в такое состояние, когда он выполняет различные функции, относящиеся к аппаратным прерываниям. Типичные системные данные, хранящиеся в резидентном пуле,

включают Kernel и объекты, представляющие процессы и потоки,

синхронизационные объекты, такие как мьютексы, семафоры и события, ссылки на файлы, которые являют собой файловые объекты и пакеты запросов I/O (англ. IRP),

которые представляют I/O операции [20b]. Разумеется, резидентный пул всегда находится в памяти [20c].

Нерезидентный пул содержит данные, которые могут перемещаться между ОЗУ и файлом подкачки, откуда и берёт своё название. Перемещение происходит путём обыкновенных страничных прерываний. Наиболее влиятельным потребителем этого пула, по крайней мере начиная с Windows Vista, обычно является Реестр. Структуры данных, описывающие сегментную организацию памяти, также хранятся в нерезидентном пуле [20b]. Таких пулов может быть несколько.

Драйвера используют ExAllocatePoolWithTag WinAPI, чтобы выделить память в одном

из пулов. Ещё один параметр — 4-байтный тег —, который драйвера должны использовать,

чтобы однозначно идентифицировать запрашиваемую память, и это может быть использовано, чтобы определять утечку пула у конкретных драйверов (более подробно см источник 20b).

Отметим механизм системного кэша (англ. термин System File Cache) — это относится к I/O операциям в резидентном пуле, о которых мы говорили чуть выше. Введём понятие memory mapped файла — это отображённый в память файл процесса, которые являются аналогом файла подкачки, но резервируют для себя место в ОЗУ и принадлежат конкретному процессу. Системный кэш — это memory-mapped файл в резидентном пуле,

Страница 12 из 31

 

кэшируюший данные с диска при чтении или

 

записи. Windows кэш менеджер работает

 

всегда. Процесс системного кэширования

 

проиллюстрирован

на

рисунке

10.

 

Кэширование

регулируется

файловыми

 

объектами. Операции записи с данными

 

производятся

в

физической

оперативной

 

памяти (в

системном

кэше)

и

через

Рисунок 10 [20e]

определённые операционной системой равные

промежутки времени эти данные заносятся на диск (а также удаляются из кэша — англ.

термин flushing — рус. очистка) крупными порциями (инициацию проводит кэш менеджер). Чтение тоже происходит через этот файл. Очистка кэша базируется на времени,

когда конкретные данные были в последний раз запрошены для операции чтения и сколько времени эти данные уже хранятся в кэше [20e]. Данный принцип работы существенно снижает количество обращений к диску, что положительно влияет на производительность.

Наглядно посмотреть процесс работы памяти в Windows 7 можно с помощью удобной встроенной системной утилиты — монитора ресурсов. Данная утилита позволяет посмотреть работу и других аппаратных частей, но нас интересует лишь область работы с памятью. Вся информация там отображается в реальном времени. Рисунок 11 показывает вкладку «Память» (англ. Memory) монитора ресурсов (англ. Resource Monitor). В данной вкладке имеется 3 таблицы.

Рисунок 11

Страница 13 из 31

2.1.1 Процессы (англ. Processes).

Это верхняя левая таблица.

Использование памяти каждого запущенного процесса разбивается на несколько категорий:

1.Образ (англ. Image). Имя исполняемого файла.

2.ИД процесса (англ. PID — Process ID). Уникальный номер процесса.

3.Ошибок отсутствия страницы в памяти/сек. (англ. Hard Faults/sec). Среднее

количество жёстких страничных прерываний в секунду за последнюю минуту [20a].

4.Завершено (КБ) (англ. Commit (KB)). Количество виртуальной памяти в килобайтах,

зарезервированное для данного процесса, то есть используемая память в ОЗУ, для которой зарезервировано место в файле подкачки, чтобы её можно было туда скопировать в случае надобности (англ. термин pagefile space; рус.

зарезервированное место в файле подкачки). Эта секция не включает в себя memorymapped фалы процесса. Поэтому рабочий набор процесса, который включает в себя такие файлы, может быть больше его коммита (см. рис. 11).

5.Рабочий набор (КБ) (англ. Working Set (KB)). Количество физической оперативной памяти в килобайтах, зарезервированное для данного процесса, то есть только используемая ОЗУ. Рабочий набор подразделяется на 2 типа:

a.Общий (КБ) (англ. Shareable (KB)). Часть рабочего набора данного процесса,

ккоторой могут обращаться другие процессы. Эти резидентные страницы находятся в ОЗУ в единственном экземпляре, но отображены на несколько ВАП. Примером могут служить системные библиотеки, такие как: Ntdll, Kernel32, Gdi32, Advapi, Commctl32 и Msvcrt [20a].

b.Частный (КБ) (англ. Private (KB)). Часть рабочего набора данного процесса,

ккоторой не могут обращаться другие процессы. Частный рабочий набор, как его ещё называют, является типичным показателем влияния данного процесса на память и ориентировочным объёмом памяти, необходимым для работы процесса. Однако, это число не показывает пик использования памяти или память, которая используется данным процессом, но не отражается в

менеджере памяти в структурах данных рабочего набора. Например,

страницы из кучи данного процесса (или С runtime кучи, или CLR кучи и т.п.);

выделенная данным процессом память в результате вызова функции WinAPI

VirtualAlloc; страницы из стека; страницы, помеченные как «копировать при записи», и уже скопированные с тех пор [20a].

Страница 14 из 31

Ко многим страницам процессы обращаются не напрямую. Такие страницы не входят в

рабочий набор. Наиболее важные страницы:

Страницы, находящиеся в памяти Kernel, такие как: данные в резидентном и нерезидентном пулах, стеках Kernel, страницы, которые являются частью слоя аппаратных абстракций (англ. Hardware Abstraction Layer [HAL]) или частью

Win32k.sys [20a].

Страницы, к которым обращаются другие процессы, такие как спулеры

(примером спулера служит менеджер печати, составляющий очередь из документов на печать), для данного процесса [20a].

Файлы, которые читает данный процесс с помощью WinAPI буферного чтения,

например, ReadFile [20a].

Менеджер памяти Windows 7 подгоняет (англ. термин Trimming) размеры рабочих наборов процессов, при этом удаляя некоторые страницы из листа используемой памяти в лист ожидания или изменения (подробнее о листах в следующем подразделе), что не связано с файлом подкачки. Тримминг происходит при следующих ситуациях:

Нехватка доступной памяти.

Рабочий набор не может быть расширен, так как достиг ограничения по размеру

(если оно есть).

Процесс явно уменьшает или освобождает свой рабочий набор путём вызова одной

из SetProcessWorkingSet WINAPI функций [20a] (данная ситуация имеет место в программах-оптимизаторах памяти).

Если система имеет большое количество доступной памяти — обычно несколько сотен мегабайтов — менеджер памяти тримминг не выполняет. Чем больше установленной ОЗУ имеет система, тем выше этот барьер, а значит, больше менее часто запрашиваемых страниц находятся используемой памяти, из чего следует, что частота страничных перемещений между листами ОЗУ уменьшается.

Страничные прерывания в Windows 7 генерируются, когда процесс пытается получить доступ к странице, которой нет в его рабочем наборе. Они подразделяются на

жёсткие (англ. hard) и мягкие (англ. soft):

Hard page fault возникает при обращении к странице, которой нет в ОЗУ.

Например, частные страницы, которые хранятся в файле подкачки; общие страницы, такие как исходный код или файловые данные, которые должны быть прочтены из файла [20a].

Soft page fault возникает, когда данный процесс обращается к странице, которая уже в ОЗУ, но не в его рабочем наборе. Например, страница в другом рабочем

Страница 15 из 31