Рабочий набор

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

Если процесс ссылается на страницу памяти, которая в настоящее время не входит в рабочий набор, происходит ошибка страницы . Обработчик ошибки системной страницы пытается устранить ошибку страницы, и в случае успеха страница добавляется в рабочий набор. (Доступ к AWE или выделению больших страниц никогда не приводит к ошибке страницы, так как эти выделения не являются страничными.)

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

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

Страницы можно удалить из рабочего набора процесса в результате следующих действий:

  • Процесс уменьшает или очищает рабочий набор, вызывая функцию SetProcessWorkingSetSize, SetProcessWorkingSetSizeEx или EmptyWorkingSet .
  • Процесс вызывает функцию VirtualUnlock в не заблокированном диапазоне памяти.
  • Процесс отменяет сопоставление сопоставленного представления файла с помощью функции UnmapViewOfFile .
  • Диспетчер памяти обрезает страницы из рабочего набора, чтобы создать больше доступной памяти.
  • Диспетчер памяти должен удалить страницу из рабочего набора, чтобы освободить место для новой страницы (например, потому, что рабочий набор имеет максимальный размер).

Если несколько процессов совместно используют страницу, удаление страницы из рабочего набора одного процесса не влияет на другие процессы. После удаления страницы из рабочих наборов всех процессов, которые ее использовали, страница становится страницей перехода. Страницы перехода остаются кэшируемыми в ОЗУ, пока на страницу не будет повторно ссылаться какой-либо процесс или не будет перепрофилирована (например, заполнены нулями и передана другому процессу). Если страница перехода была изменена с момента последней записи на диск (т. е. если страница имеет значение "грязное"), то перед перепрофилированием страницу необходимо записать в ее резервное хранилище. Система может начать писать грязное переходных страниц в их резервное хранилище, как только такие страницы станут доступными.

Каждый процесс имеет минимальный и максимальный размер рабочего набора, который влияет на поведение процесса подкачки виртуальной памяти. Чтобы получить текущий размер рабочего набора указанного процесса, используйте функцию GetProcessMemoryInfo . Чтобы получить или изменить минимальный и максимальный размер рабочего набора, используйте функции GetProcessWorkingSetSizeEx и SetProcessWorkingSetSizeEx .

Интерфейс PSAPI для состояния процесса предоставляет ряд функций, возвращающих подробные сведения о рабочем наборе процесса. Дополнительные сведения см. в разделе Сведения о рабочем наборе.