Подтвердить что ты не робот

"Использование Mem" выше, чем "Размер виртуальной машины" в диспетчере задач WinXP

В моем диспетчере задач Windows XP некоторые процессы отображают более высокое значение в столбце Mem Usage, чем VMSize. Мой экземпляр Firefox, например, показывает 111544 K как использование памяти и 100576 K как VMSize.

В соответствии с файлом справки диспетчера задач Mem Usage - это рабочий набор процесса, а VMSize - это память в виртуальном адресном пространстве.

Мой вопрос: если количество зафиксированных страниц для процесса равно A, а количество страниц в физической памяти для одного и того же процесса - B, не должно ли оно всегда быть B ≤ A? Разве количество страниц в физической памяти на процесс не является подмножеством зафиксированных страниц?

Или это как-то связано с разделением памяти между процессами? Пожалуйста, объясни. (Возможно, мое определение "Рабочий набор" не соответствует значению).

Спасибо.

4b9b3361

Ответ 1

Виртуальная память

Предположим, что ваша программа (например, Oracle) выделила 100 МБ памяти при запуске - ваш размер виртуальной машины увеличивается на 100 МБ, хотя никаких дополнительных физических/дисковых страниц не затрагивается. т.е. VM - это не что иное, как хранение книг памяти.

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

Частная память

Если программа копирует 10 МБ данных в 100 МБ, ОС понимает, что ни один из страниц не был назначен процессу, соответствующему этим адресам, и назначает физические страницы на 10 МБ в вашу личную память процесса. (Этот процесс называется сбоем страницы)

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

Определение: Рабочий набор - это набор страниц памяти, которые были недавно затронуты программой.

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

Поведение рабочего набора

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

Когда рабочий набоp > Виртуальная память

Теперь представьте, что одна и та же программа отменяет все 100 Мб памяти. Размер виртуальной машины программ сразу уменьшается на 100 МБ (помните VM = бухгалтерский учет всех запросов на распределение памяти)

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

Это фактически сделало бы VM- рабочий комплект. Однако это исправит, если вы начнете другой процесс, который потребляет больше памяти, а рабочие страницы заданий будут восстановлены ОС.

Ответ 2

XP Task Manager просто ошибается. EDIT: Если вы мне не верите (а кто-то этого не делает, потому что они проголосовали за это), прочитайте Использование Firefox 3 в памяти. Я цитирую:

Если вы ищете использование памяти под Windows XP ваши номера arent будет так здорово. Причина: Microsoft изменила значение "личные байты" между XP и Vista (к лучшему).

Похоже, что MS запуталась. Вы только что измените что-то подобное, если оно сломалось.

Попробуйте Process Explorer. Какой диспетчер задач имеет надпись "Размер виртуальной машины", "Проводник процессов" (точнее), метки "Частные байты". И в Process Explorer рабочий набор (и частные байты) всегда меньше или равен виртуальному размеру, как и следовало ожидать.

Ответ 3

Отображение файлов

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

См. также:

Что означает "Размер виртуальной машины" в диспетчере задач Windows? в Stackoverflow

Разбивка 32-битного барьера в блоге разработчиков

Обсуждение Usenet По-прежнему запутано, почему рабочий набор больше виртуальной памяти

Ответ 4

Использование памяти - это количество электронной памяти, выделенной в данный момент для процесса.

Размер виртуальной машины - количество виртуальной памяти, выделенной в данный момент для процесса.

так...

  • Страница, которая существует только в электронном виде, увеличит только использование памяти.
  • Страница, которая существует только на диске, увеличит только размер виртуальной машины.
  • Страница, которая существует как в памяти, так и на диске, увеличит оба.

Некоторые примеры для иллюстрации:

В настоящее время на моей машине, iexplore имеет 16 000K использования памяти и 194,916 VM Size. Это означает, что большая часть памяти, используемой Internet Explorer, неактивна и была выгружена на диск, и только основная часть хранится в основной памяти.

Контраст с mcshield.exe с объемом памяти 98 984K и размером 98,168K VM. Мой вывод здесь заключается в том, что McAfee AntiVirus активен, причем при использовании большой памяти. Поскольку он работает в течение некоторого времени (весь день, начиная с загрузки), я ожидаю, что большинство из 98,168K VM Size являются копиями электронной памяти - хотя в диспетчере задач нет ничего, чтобы подтвердить это.

Ответ 5

Вы можете найти некоторое объяснение в Игра в оболочку памяти

Рабочий набор (A). Это набор страниц виртуальной памяти (которые предназначены) для процесса и находятся в физической памяти. Эти страницы полностью принадлежат процессу. Рабочий набор похож на список "в настоящее время/недавно работающий над этими страницами".

Виртуальная память. Это память, которую может обращаться операционная система. Независимо от объема физической памяти или места на жестком диске, это число ограничено вашей архитектурой процессора.

Committed Memory. Когда приложение касается страницы виртуальной памяти (чтение/запись/программная запись), страница становится фиксированной страницей. Теперь он поддерживается страницей физической памяти. Обычно это будет физическая страница RAM, но в конечном итоге она может быть страницей в файле страницы на жестком диске или может быть страницей в файле с отображением памяти на жестком диске. Менеджер памяти обрабатывает переводы с виртуальной памяти на физическую страницу. Виртуальная страница может находиться в физической памяти, а страница рядом с ней может находиться на жестком диске в файле страницы.

BUT: PF (Page File) Использование. Это общее количество зафиксированных страниц в системе. Это не говорит вам, сколько на самом деле написано в файле. Это говорит только о том, сколько файла страницы будет использоваться, если все зафиксированные страницы должны быть записаны в файл страницы одновременно.

Следовательно, B > A...

Если мы согласны с тем, что B представляет "использование памяти" или также использование PF, проблема возникает из-за того, что она фактически представляет потенциал использование страниц: в Xp это потенциальное файловое пространство может использоваться как место для назначения страниц виртуальной памяти, которые запросили программы, но никогда не использовались...

Ответ 6

Возможно, фрагментация памяти является причиной: Если процесс выделяет 1 октет, он подсчитывает 1 октет в VMSize, но для этого 1 октета требуется физическая страница (4K для операционной системы Windows). Если после выделения/освобождения памяти процесс имеет второй октет, который разделяется более чем на 4 К от первого, этот второй октет всегда будет храниться на отдельной физической странице, чем 1. Таким образом, размер виртуального пространства составляет 2 октета, но использование памяти составляет 2 страницы == 8K

Таким образом, факт, что MemUsage больше, чем VMSize, показывает, что процесс выполняет множество операций выделения и освобождения памяти и фрагментирует память. Это может быть связано с тем, что процесс запущен давным-давно. Или еще есть место для оптимизации; -)