Назад | Перейти на главную страницу

Что такое «рабочий набор» процессов в Windows?

На сегодняшний день у меня не было удовлетворительного ответа на этот вопрос, но меня постоянно ошарашивает непристойная цифра в столбце «Рабочий набор» в Sysinternals Process Explorer. Может ли кто-нибудь дать это простое для понимания определение?

Рабочий набор можно определить как:

Рабочий набор байтов = Sizeof (RAM) - (Доступные байты + невыгружаемые байты пула + резидентные байты выгружаемого пула + резидентные байты системного кэша + резидентные байты системного кода + резидентные байты системного драйвера)

со следующими определениями:

Байт невыгружаемого пула: они представляют выделения, направленные в невыгружаемый пул, который представляет собой набор страниц виртуальной памяти, которые всегда остаются резидентными в ОЗУ. (Это не выгружаемые байты.) Драйверы устройств и ОС используют невыгружаемый пул для хранения структур данных, которые должны оставаться в физической памяти и никогда не могут быть выгружены на диск. (Например, драйвер TCP / IP должен выделить некоторый объем невыгружаемой памяти для каждого соединения TCP / IP, которое активно на компьютере, для структур данных, которые требуются во время обработки прерываний сетевого адаптера, когда ошибки страниц недопустимы.)

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

Резидентные байты системного кэша : представляет сегменты файлового кеша, которые в настоящее время находятся в ОЗУ.

Резидентные байты системного кода: ячейки памяти, связанные с системным кодом, который в настоящее время находится в ОЗУ.

Резидентные байты системного драйвера: ячейки памяти, связанные с кодом драйвера устройства, который в настоящее время находится в ОЗУ.

Вот мой простой для понимания объяснение.

Рабочий набор процесса - это объем физической ОЗУ, который он в настоящее время использует (ссылается) в целом для выполнения своей работы.

Это может немного сбивать с толку, потому что учитывается и «общее» пространство в ОЗУ. Например, если процессу process1 нужно запустить некоторую системную dll, ОС прочитает ее в RAM. Если процессу 2 также необходимо запустить эту системную dll, ОС не нужно читать ее в ОЗУ, так как она уже есть. ОДНАКО объем ОЗУ, используемый для хранения этого системного кода DLL, будет отображаться под рабочим набором обе процессы, поскольку они оба используют этот код для выполнения своей работы.

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

Смотрите MSDN?

«Рабочий набор программы - это совокупность тех страниц в ее виртуальном адресном пространстве, на которые недавно ссылались».

Вкратце: диапазоны адресов (страниц), которые в данный момент напрямую используются приложением.

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

Это важно, потому что, если рабочий набор вашей программы больше, чем RAM, вы начнете перебивать - постоянно выгружать страницы RAM на диске. Приведенный выше пример может быть прекрасным или неизбежным, если вы обращаетесь к каждой ячейке только один раз, но если вам постоянно нужно все, вы фактически ограничены скоростью обмена. Самое дешевое решение: добавить больше оперативной памяти. Более сложное решение: перепишите свою программу, чтобы она учитывала кеш (доступ к (m * n) массивам с шагом 1, 2, 3, 4, ... m + 1, m + 2, а не 0 * m + 0, 1 * m + 0, 2 * m + 0 ... n * m + 0, 0 * m + 1 ... n * m + n

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

Эти обычно используемые и недавно использованные страницы, исходя из теории, что это также те страницы, которые ему, скорее всего, понадобятся в будущем, но не обязательно. Вполне возможно, что рабочий набор процесса может включать в себя много страниц, которые он не использовал в последнее время или которые могут никогда не понадобиться в будущем (т. Е. «Раздувание»).

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

Обратите внимание, что WS (рабочий набор) - это не количество физического пространства, которое требуется программе, это количество, которое она в настоящее время имеет.

Вот визуализированное представление научное определение модели рабочего набора от Питера Деннинга (что не обязательно будет соответствовать тому, какие операционные системы и особенно диспетчер задач Windows сообщают вам).

Предположим, у вас есть набор процессов: {P1, P2, P3, P4}

И предположим, что у вас есть следующий список ссылок на страницы по процессам с течением времени:

    T-5  T-4  T-3  T-2  T-1
---------------------------
P1:  2,   3,   5,   4,   5
P2:  2,   3,   4,   1,   2
P3:  2,   3,   1,   4,   5
P4:  4,   5,   5,   2,   5 

Также предположим, что у вас дельта (dt), равная 4.

Ваш рабочий набор - это набор всех уникальных ссылок на страницы от T-дельты времени до T.

Рабочий набор для каждого процесса в момент времени T следующий:

P1: {3,4,5}
P2: {1,2,3,4}
P3: {1,3,4,5}
P4: {2,5}