Память частный рабочий набор что это
Перейти к содержимому

Память частный рабочий набор что это

  • автор:

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

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

Процесс имеет связанный минимальный размер рабочего набора и максимальный размер рабочего набора. При каждом вызове CreateProcess он резервирует минимальный размер рабочего набора для процесса. Диспетчер виртуальной памяти пытается сохранить достаточно памяти для минимального рабочего набора, если процесс активен, но не превышает максимальный размер.

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

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

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

Связанные темы

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе https://aka.ms/ContentUserFeedback.

Отправить и просмотреть отзыв по

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

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

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

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

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

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

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

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

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

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

Память в диспетчере задач

Вот код, в котором выделяется массив на 6 миллиардов байт — это чуть больше 5.5 GB:

#define _CRT_SECURE_NO_WARNINGS #include int main() < puts("Started"); long long n = 6'000'000'000; auto *a = new char[n]; puts("Created"); for (long long q = 0; q < n; q += 100) a[q] = q / 100; puts("Written"); for (long long i; scanf("%lld", &i), i >= 0; ) printf("a[%lld] = %d = %d\n", i, a[i], (char)(i/100)); getchar(); delete[] a; > 

Программа скомпилирована под x64 и работает верно:

Started Created Written 0 a[0] = 0 = 0 100 a[100] = 1 = 1 1000 a[1000] = 10 = 10 1000000 a[1000000] = 16 = 16 1000000000 a[1000000000] = -128 = -128 2000000000 a[2000000000] = 0 = 0 2000000100 a[2000000100] = 1 = 1 4000000100 a[4000000100] = 1 = 1 5000000100 a[5000000100] = -127 = -127 5999999900 a[5999999900] = -1 = -1 

Visual Studio 2017 показывает потребление памяти 6 GB: скриншот VS2017 Но в диспетчере задач видно совершенно другое: Скриншот диспетчера задач

Пиковый рабочий набор (память) 4 769 092 К Память (активный частный рабочий набор) 2 480 568 К Память (частный рабочий набор) 2 480 568 К Память (общий рабочий набор) 292 К 

Или даже так:

Рабочий набор (память) 2 396 008 К Пиковый рабочий набор (память) 2 507 724 К Память (активный частный рабочий набор) 2 395 780 К Память (частный рабочий набор) 2 395 780 К Память (общий рабочий набор) 228 К 

Что значат эти числа (каждая из 5 колонок) и можно ли в диспетчере задач увидеть те 6 GB, которые потребляет программа?

Sysadminium

Изучая память процессов в системе Windows вы обязательно столкнётесь с таким понятием как рабочий набор процесса. В этой статье разберём что это такое.

Оглавление скрыть

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

Рабочий набор — это виртуальные страницы памяти в которых процесс хранит необходимые ему данные.

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

А если свободная память (free) окажется ниже порогового значения, то страницы изымаются из рабочих наборов. Такие страницы могут быть помещены с кэш. То есть они все равно останутся в оперативной памяти. При обращении к таким страницам, процесс получит ошибку page fault и страница вернется из кэша.

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

Наблюдение за рабочим набором процесса

Наблюдать за рабочим набором процесса будем с помощью «Системного монитора«.

  1. Находим оснастку «Системный монитор«:

Пуск / Системный монитор

  1. Удаляем счетчик производительности, который был по умолчанию:

Системный монитор / Удаление счетчиков

  1. И добавляем новый счетчик производительности:
    • Находим группу счетчиков «Процесс«, в ней находим процесс (я посмотрю за процессом Chrome).
    • Выбираем счетчики: «Ошибок страниц/с«, «Рабочий набор» и его пик.
    • Нажимаем кнопку «Добавить» и «OK«

Системный монитор / Добавление счетчиков

  1. Переключаем внешний вид на «Отчет».

Системный монитор / Настройка внешнего вида

  1. Смотрим данные:
    • Рабочий набор — это объем страниц в памяти для данного процесса в байтах.
    • Рабочий набор (пик) — это максимальный объем страниц, который был в памяти для данного процесса за все время работы процесса.
    • Ошибок страницы/с — это частота ошибок, когда поток не находит нужную страницу в памяти и её необходимо подгружать.

Системный монитор / Просмотр информации

Сумма рабочих процессов не равна используемой памяти

Суммарный объем всех рабочих наборов процессов не равен всей используемой оперативной памяти. Если помните, в системе присутствует общая память. Страницы от туда могут быть замаплены к разным процессам. Про это было написано тут. А каждый процесс думает что эта страница относится к его рабочему набору. Другими словами, одна общая страница будет считаться несколько раз для каждого процесса.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *