Windows избыточно заменяется? - PullRequest
3 голосов
/ 10 октября 2008

Возможно, это не связано исключительно с программированием, а связано со структурой ОС.

Запуск Vista 32 бит на новом ноутбуке с 3 ГБ памяти. При простое система занимает около 40% памяти. Кроме того факта, что это возмутительно само по себе, ОС должна быть способна хорошо вписать все процессы в память и не должна перезаписываться на диск НИКОГДА.
Тем не менее, глядя на диспетчер задач, я вижу процессы, имеющие ошибки страницы все время. Не много, но все же. например, в explorer.exe примерно одна секунда.

Почему это? Почему ОС чувствует необходимость менять страницы, хотя у нее достаточно физической памяти?

Ответы [ 6 ]

3 голосов
/ 10 октября 2008

Совершенно логично, что проводник каждую секунду сталкивается с ошибкой страницы, когда вы смотрите на диспетчер задач. Диспетчер задач обновляется каждую секунду, что также обновит график в области уведомлений. Это explorer.exe, который управляет областью уведомлений и ее значками. Таким образом, каждый раз, когда диспетчер задач обновляет свой маленький график, проводнику необходимо загрузить соответствующий значок из taskmgr.exe, который вызывает сбой страницы. (Подробнее о Отличный блог Раймонда Чена )

Я почти уверен, что Рэймонд Чен объясняет несколько других "проблем" с ошибками страниц, но я не могу сейчас найти статьи. По сути, ошибка страницы не всегда означает, что что-то должно быть загружено с диска.

3 голосов
/ 10 октября 2008

Ошибка страницы не обязательно означает, что что-то было записано на диск. Современная ОС имеет много уровней состояния, в которых может находиться страница, например, Windows, вероятно, будет различать страницу памяти, которая активно используется, и страницу памяти, которая не была затронута в течение некоторого времени и могла быть выгружена на диск, если это необходимо. (Это облегчает работу пейджера, потому что ему нужно только взглянуть на страницу второго типа, чтобы выяснить, какие из них могут быть страницами.) Теперь, как страница переходит из второго состояния обратно в первое? Ядро устанавливает бит на этой странице, указывая, что если что-то получит к нему доступ, то страница будет помечена как «активная» и вернется в первое состояние. Это приводит к ошибке страницы.

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

Реальная ситуация намного сложнее, чем описанная выше, но это должно дать вам общее представление о том, что может происходить.

1 голос
/ 10 октября 2008

При простое система занимает около 40% памяти.

Всякий раз, когда я слышу это, я удивляюсь, почему люди жалуются на то, что программное обеспечение использует системные ресурсы. Как пользователь, я предпочитаю, чтобы ОС занимала 40% моей памяти (при условии, что она не используется иным образом) для агрессивной предварительной выборки и кэширования; это делает конечный опыт намного лучше, поскольку в системе будет больше обращений в памяти (и меньше ошибок страниц), чем в противном случае.

Что касается обширной подкачки, я думаю (но не уверен), что это еще одна агрессивная стратегия кэширования. Если бы системная память была переполнена (что было бы довольно легко, скажем, 1 ГБ с парой больших приложений, таких как Visual Studio, или даже на 4 ГБ, если вы работали с виртуальной машиной или двумя), системе пришлось бы просматривать страницу. некоторый кусок памяти на диск, прежде чем он сможет прочитать страницу с диска в память. Если операционная система активно выкладывает неактивную память на диск во время простоя, она может сохранить эту операцию, если у другого процесса возникла ошибка страницы.

0 голосов
/ 13 октября 2008

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

Очевидно, что по техническим причинам вы не можете иметь все байты как на диске, так и в оперативной памяти. Но вы, конечно, не должны выбрасывать байты из оперативной памяти только потому, что они также находятся на диске. И если у вас есть как вращающийся диск, так и страницы ОЗУ, которые не изменились за минуту, имеет смысл упреждающе записать байты. Вы бы хотели, чтобы ОС делала это с минимальными затратами, но приоритетность операций ввода-вывода в Windows встречается реже (впервые для Vista, и, честно говоря, это реализация 1.0)

0 голосов
/ 10 октября 2008

Да, я заметил то же самое. Это также происходит с Windows XP.

Похоже, что в Windows действует политика «быстрого выделения» в отношении подкачки: сохраняет много свободной памяти, чтобы она была доступна при необходимости . На компьютере, где память является ограничением, это стратегия с некоторым смыслом. Загрузка больших программ в любом случае приведет к некоторому обмену, поэтому система делает это заранее.
Конечно, в системах с большим объемом памяти это не имеет никакого смысла. На одном из моих компьютеров у меня XP с 3 ГБ оперативной памяти. Компьютер работает намного быстрее, если я просто отключу файл подкачки!
Также эта стратегия влияет на время «загрузки оболочки»: под загрузкой оболочки я подразумеваю все, что происходит между тем, когда вы входите в систему и когда вы действительно можете использовать компьютер. Обмен происходит в то же время, когда загружается множество программ значков в резидентном трее, что приводит к очень неэффективному использованию диска.

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

0 голосов
/ 10 октября 2008

Конечно, Vista использует память, которую ваш компьютер должен загружать и работать быстрее. Он освободит / поменяет память, когда это понадобится другой программе.

Почему бы не использовать ресурс, если он есть и доступен и может быть выпущен позже без проблем?

Об ошибках на странице, смотрите это объяснение, менеджер задач создает такие: http://blogs.msdn.com/oldnewthing/archive/2008/08/21/8880075.aspx

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

...