Аннотация: Компьютерные мифы: оптимизация памяти. Время написания: июль 2005 г.
Компьютерные мифы: "оптимизация памяти"
Человеческая фантазия неистощима. Особенно, когда это касается способа заработать денег из воздуха. Основной рецепт прост - запускается и раскручивается какой-нибудь миф, затем либо предлагается способ решения высосанной из пальца проблемы, либо чудодейственное средство, позволяющее из ничего получить некую выгоду. Подробности же в красках разрисовывает воображение творцов этих легенд.
В компьютерной области за примерами таких надувательств далеко ходить не надо - о "проблеме 2000 года" не слышал только человек, проведший последние 10 лет вдали от цивилизации. Из той же оперы и чудесные программы "увеличивающие скорость передачи данных через аналоговые модемы на 300%".
Но здесь будет рассматриваться еще один способ заработка денег "из воздуха" для программистов-системщиков - "оптимизаторы памяти".
Программы эти достаточно широко распространены, также они могут включаться отдельными модулями в программы-настройщики для Windows. Просят за них от 10$ до бесконечности (зависит от жадности разработчиков), и обещают "катастрофическое увеличение производительности системы памяти". Но что происходит на самом деле? Для этого придется углубиться в принципы работы ОС Windows...
Windows отводит для каждого процесса (грубо говоря, программного модуля) запрашиваемое им количество "виртуальной памяти". Эта память может частично находится в физической (оперативной) памяти компьютера - RAM, частично в файле подкачки (swap или paging file), а также в кэш-памяти (cache), причем с точки зрения процесса, все это - одна непрерывная область памяти.
Одновременный доступ ко всей виртуальной памяти, выделенной процессу, невозможен. Виртуальная память разбивается на "страницы" (page) - области размером 4 килобайта. Одновременно доступна для чтения или записи только одна область. Всем механизмом виртуальной памяти ведает "Менеджер памяти" (Windows memory manager), который входит в ядро операционной системы.
Менеджер памяти ведёт несколько списков состояния страниц, которые используют процессы и операционная система. Это "Рабочий Список" (Working Set) - страницы, которые используются операционной системой, драйверами, процессами и программами. Если процесс пытается обратиться к странице, которой нет в Рабочем Списке, то генерируется "ошибка страницы" (Page Fault) и Менеджер памяти может отвести ему новую страницу в Рабочем Списке.
Когда процесс заканчивает работу с текущей страницей и переходит к следующей, то Менеджер памяти убирает её из Рабочего Списка и, если она была изменена, то помещает её в "список Модифицированных Страниц" (Modified Page List) для дальнейшей обработки, а после неё - в "Отстойник" (Standby List, "Список Ожидания"). Если страница не изменялась, то она сразу отправляется в "Отстойник".
Менеджер памяти ведёт ещё два списка - "Список Свободных Страниц" (Free List) и "список Обнуленных Страниц" (Zeroed Page List). Первый список помещаются страницы, которые освободились после окончания процесса. В список Обнуленных Страниц помещаются страницы, которые заполнила нулями специальная подпрограмма Менеджера памяти (Zero Page Thread).
Теперь рассмотрим работу "оптимизатора". Все они построены на одном принципе - заставить Менеджер памяти отдать оптимизатору как можно больше оперативной памяти. Если оптимизатор - очень настырный, а его разработчик достаточно хорошо разбирается во внутренностях Windows, то ему удастся заполучить и место, занимаемое в оперативной памяти страницами из "Отстойников" и списками Модифицированных Страниц процессов и даже Рабочими Страницами операционной системы. После чего оптимизатор торжественно рапортует доверчивому пользователю о проделанной работе и закрывается, освобождая всё захваченное место в памяти.
После этого в лучшем случае производительность не изменится, а в худшем - упадёт. Как только Менеджер памяти дойдет до некоего предела в выделении памяти оптимизатору, он начинает сбрасывать страницы других процессов в файл подкачки на диске. А некоторые из этих страниц надо будет потом вернуть с диска в память, если в них находятся необходимые запущенным процессам данные или программный код. Особенно это актуально для серверных приложений. Тем более что всё равно после закрытия оптимизатора Менеджер памяти перекроит всё по-своему. Тратится время, увеличивается нагрузка на жесткий диск, производительность системы падает.
Некоторые "оптимизаторы" могут еще "висеть" в системном трее, постоянно пытаясь поддерживать заданный пользователем объем свободной памяти. Эти "собаки на сене" только замедляют работу компьютера, не делая ничего полезного. Ведь задать, для какого процесса все время высвобождаются заветные мегабайты, совершенно невозможно.
Особенно же знающего человека веселят "оптимизаторы", грозящиеся произвести дефрагментацию виртуальной памяти - выстроить области памяти процессов едиными блоками без разбиения на куски. Интересно, как это можно сделать, если только Менеджер Памяти "знает", на каком физическом устройстве располагается тот или иной адрес памяти процессов. А Microsoft (из соображений безопасности) постоянно закрывает лазейки, позволяющие залезть в память другой программы и что-то там передвигать...
А что до "оптимизации памяти" - рецепт ее прост: не запускать "висеть" ненужные приложения. Удаление ненужных программ из автозагрузки и отключение неиспользуемых служб (для Windows 2000/XP) с помощью входящей в Windows программы msconfig.exe позволит освободить больше памяти, чем самый лучший "оптимизатор". Только перед тем, как что-либо выключать, проверьте, как это скажется на работоспособности системы, благо документацию по оптимизации Windows можно найти и бесплатно, например, здесь: www.3dnews.ru/reviews/software/win_tweak и www.3dnews.ru/reviews/software/win-xp-faq