Некоторые аспекты операционной системы Windows 7 касающиесы:
1. Поддерживаемого объема оперативной памяти
2. Причин большого потребления оперативной памяти
надеюсь, кому то пригодится…
Сколько памяти поддерживает Windows 7?
Согласитесь, вопрос интересный и далеко не праздный, хотя мало кто из нас может похвастаться, что у него на системе больше, чем 4 Гбайт оперативной памяти. Итак, по данным от WinSuperSite, Windows 7 поддерживает до 192 Гбайт оперативной памяти, чего не скажещь про Windows Vista. С другой стороны, она может работать даже с 1 Гбайт RAM, пишет Softpedia. Как известно, абсолютное большинство Netbook могут похвастаться только 1 Гбайт оперативной памяти, но для Windows 7 это вообще не проблема.
Правда, только 64-битная версия Windows 7 обладает такими широкими возможностями. Что касается 32-битной версии, она по-прежнему “видит” не больше 4 Гбайт RAM. И если Windows 7 “увидит” все 4 Гбайт, все равно она не может работать с таким объёмом оперативной памяти. Скажем, если у вас 4 Гбайт RAM, то 32-битная версия Windows может использовать только от 3,3 до 3,5 Гбайт. Как известно, это настоящий бич для 32-битных версий всехоперационных систем для desktop и laptop с процессорами на архитектуре x86, и тут Windows 7 не исключение.
Что касается 64-битной версии Windows 7, как мы уже писали выше, она корректно “видит” 192 Гбайт RAM, но опять таки только версии Professional, Enterprise и Ultimate. Верхний лимит для версии Home Basic и Home Premium составляет 8 и 16 Гбайт соответственно. Тем не менее, прогресс налицо, так как 64-битная Windows Vista Business, Enterprise и Ultimate “видят” только 128 Гбайт. Правда, в случае с версиями Home Basic и Home Premium этот предел также составляет 8 и 16 Гбайт. А 32-битная версия Vista, сами понимаете, больше 4 Гбайт все равно ничего не “увидит”.
Windows 7 «жрет» память. Так ли это плохо?
В интернете мне доводилось слышать множество гневных комментариев в стиле «Да Windows 7 — полный отстой! Вы посмотрите, как она жрет память!» В доказательство приводятся скриншоты вроде того, что ниже, и опять же — все списывается на «криворуких индусских программистов». Давайте посмотрим, насколько эти наезды на программистов Microsoft обоснованы.
Допустим, вы приобрели компьютер с 8 гигабайтами памяти. Но неужели то, что используется от силы 1 гигабайт, а вся остальная память простаивает — так уж хорошо? С выходом Windows Vista и Windows 7 подход к использованию оперативной памяти кардинально поменялся: теперь ОС пытается использовать всю имеющуюся память максимально эффективно. В частности, в Windows Vista и Windows 7 появилась фича с названием SuperFetch.
Что же такое SuperFetch?
SuperFetch — это системный сервис, запускающийся внутри системного процесса svchost. Код его находится внутри DLL-ки %SystemRoot%\System32\Sysmain.dll. Этот сервис постоянно следит за тем, какие приложения запускает пользователь, и к каким исполняемым файлам и файлам данных они обращаются. Вся эта информация сохраняется в файлах с расширением *.db в каталоге %SystemRoot%\Prefetch. Для чего это все делается? А вот для чего: сервис SuperFetch, имея информацию о том, с какими приложениями пользователь работает наиболее часто — заранее подгружает в память соответствующий код и данные, и, когда пользователь запускает свое приложение — вся необходимая информация уже имеется в памяти, и запуск происходит намного быстрее — потому как нет необходимости считывать информацию с жесткого диска. Особенно это заметно на таких «тяжелых» приложениях, как семейство MS Office, функционал которых может быть «размазан» по десяткам и сотням exe-шников и dll-ок. SuperFetch настолько «умна», что может даже определять предпочтения пользователя в разные дни и время суток — например, то, что в рабочие дни он работает с Word и Excel, а по выходным — играется в Call of Duty, и, соответственно — подгружает в память нужные данные. Соответственно, эта область памяти помечается как «занятая», что и отображается в Task Manager’e, создавая впечатление «утечек памяти». Тем не менее, если вдруг запускается какое-то приложение, требующее выделения памяти — memory manager спокойно освобождает нужное пространство, а по завершении работы приложения память освобождается и данные подгружаются снова.
Если же какое-нибудь приложение, к примеру, завершает свою работу и освобождает память — то SuperFetch обращается к менеджеру памяти с просьбой подгрузить только что выгруженный код и даннные. Процесс этот происходит с маленькой скоростью и с низшим (Very Low) приоритетом, поэтому работа SuperFetch не приводит к падению производительности. Если вы, к примеру, отойдете покурить, а в это время запустится фоновый процесс, которому необходима память (например — антивирусная проверка), то код и данные приложения, с которым вы работали — возможно будут выгружены из памяти. Благодаря же SuperFetch — к тому моменту, когда вы вернетесь с перекура — данные вашего активного приложения будут полностью или частично подгружены обратно в память.
Более того, SuperFetch может обрабатывать режимы гибернации, «спящий режим» и смены пользователя (fast user switching). К примеру, если система уходит в гибернацию — то SuperFetch сохраняет в файл hiberfil.sys код и данные тех приложений, которые, по его мнению, скорее всего будут использоваться после выхода из гибернации. Как это «мнение» формируется? Очень просто — Большой БратSuperFetch смотрит за тобой, и за тем, что ты запускал после выхода из предыдущих гибернаций, и основываясь на этом — может предположить, что в следующий раз при выходе из гибернации ты наверняка запустишь «аську» и откроешь свой любимый браузер, чтобы почитать «хабрахабр». Ну а через часок-другой — откроешь Visual Studio, потому что проект горит, а сроки сдачи — «вчера».
Можно понаблюдать за работой SuperFetch с помощью того же Task Manager’a:
Если какое-то время поюзать Windows Vista/7, то можно заметить, что объем свободной памяти уменьшается. Это происходит из-за того, что SuperFetch стандартный систмный кэш Windows пытаются утилизировать доступную память для кэширования данных с диска. К примеру, если сразу после загрузки Windows запустить Task Manager — видно, что Free Memory — уменьшается, а Cached Memory — наоборот увеличивается. Если же запустить какую-нибудь «жадную до памяти» программу, или же просто запустить копирование большого файла — Free Memory увеличится и график «Physical Memory Usage» резко упадет, потому что система будет освобождать память для запущенного приложения, но потом начнет потихоньку расти — потому что собственно приложение начнет эту память забирать. Однако, со временем SuperFetch будет подгружать в память недавно выгруженные данные, поэтому значение Cached Memory будет расти, а Free Memory — уменьшаться.