2

Я смотрю на распределение физической памяти с помощью инструмента RAMMap от SysInternals. Распределение (см. Изображение ниже) показывает

  1. 1,7 ГБ в списке свободной (нулевой) памяти
  2. 1,2 ГБ в списке рабочих наборов
  3. 550 МБ в режиме ожидания
  4. 125 МБ в Модифицированном списке

Я понимаю, что когда процессу требуется память, Windows выполняет поиск памяти в списках в следующем порядке: Свободно (Ноль) -> Ожидание -> Изменено. Следовательно, до тех пор, пока у нас есть свободные рамки страниц, все должно быть либо в списке рабочих наборов, либо в списке свободных.

  1. Это предположение верно?
  2. Если да, то почему мы видим 125 МБ страниц в Модифицированном списке?
  3. В общем, когда Windows решает вытащить страницы из списка «Рабочий набор» в список «Модифицированный / Резервный», даже если остается свободная память?

Я использую Windows 7, с 4,0 ГБ установленной оперативной памяти, 3,5 ГБ используется.

1 ответ1

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

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

Второй вопрос (глупое автоматическое форматирование списка здесь начинается с "1"): это довольно много. Вы удалили свой файл подкачки?

Третий вопрос: во-первых, имейте в виду, что для каждого процесса есть рабочий набор, а не только один. И у каждого есть свой "предел". Когда ограничения применяются (их нет, если имеется много свободной оперативной памяти), процесс должен отдавать страницу для каждой новой страницы, в которой он отказывает. Существует также процесс восстановления рабочего набора, который пытается сократить длительные процессы простоя.

Когда процесс теряет страницу, он попадает в измененный список, если к нему был применен операнд в стиле "изменение", когда он был в рабочем наборе, или в резервный список, если нет. Если впоследствии процесс переходит на страницу с ошибкой, прежде чем он будет назначен для какого-либо другого использования или процесса, он может быть возвращен в рабочий набор процесса, не переходя на диск для этого. (Это типичный пример "мягкой" ошибки страницы.) Таким образом, эти списки образуют некое общее общесистемное расширение для рабочих наборов всех процессов. Но все в списке ожидания все еще считается частью "доступной" памяти, потому что это может быть немедленно использовано любым другим процессом - запись должна быть записана на диск.

Начиная с Vista, появилась новая концепция, называемая приоритетом памяти. Страницы в резервном списке с низким приоритетом могут быть переназначены для использования новым упреждающим файловым кешем SuperFetch. Но это не стоит никакой "доступной" оперативной памяти, потому что они все еще находятся в резервном списке. (Старый реактивный кэш все еще там; раньше он был частью рабочего набора системы; в Windows 7 он был свой.)

Это всего лишь верхушка айсберга. Mm глава Windows Internals имеет длину 200 страниц, что достаточно для самой маленькой книги. Но если вы действительно хотите понять эту вещь, на самом деле нет замены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .