Компьютеры в современной жизни заняли своё твёрдое место, и уже трудно вспомнить, как без них обходились лет десять назад. Но компьютер без программного обеспечения - это только груда железа, из которого можно извлечь немного драгоценных металлов.
Я уверен, что программный рынок гораздо больше рынка компьютерного железа. Наряду с действительно полезными программами, пользователям предлагают и абсолютные пустышки. Но, разумеется, денег за них просят. Можно понять, если какой-нибудь молодой да ранний набрался поверхностных знаний из популярных книжек и начал выдавать программы "на гора". Может быть, со временем наберётся мастерства...
Но довольно часто для того, чтоб пользователи отдавали за пустышки деньги добровольно и с "чувством глубокого удовлетворения", запускается и раскручивается какой-нибудь миф. Самым большим таким надувательством в компьютерных технологиях, конечно же, была "проблема" 2000 года. Но и более мелкие "утки" продолжают летать и приносить деньги.
Первое, что из таких пернатых мне приходит на ум, это программы, "увеличивающие скорость передачи данных через аналоговые модемы на 300%". Даже комментировать не хочется...
Вот и программы, оптимизирующие память компьютера - из той же стаи. И просят за них от 10$ и до бесконечности (в зависимости от жадности и технических знаний). Не вдаваясь в подробности, на процессорах х86 под управлением Windows, программа, более точно - процесс, работает с виртуальной памятью, которую ему отводит операционная система. Фрагменты виртуальной памяти могут находиться в физической памяти компьютера (RAM), занимать часть файла подкачки (swap, он же paging file) и располагаться в кэш-памяти (cache).
Виртуальная память процесса, хотя и имеет непрерывную адресацию, разбивается на Страницы (page). Обычно, на 32-битных процессорах х86, размер Страницы равен 4096 байт. Размер 4096 байт определён архитектурой железа. В специальных случаях размер может быть и 4 Мбайта.
В качестве аналогии доступа к физической памяти: RAM можно представить, как ленту (а ещё лучше - логарифмическую линейку :), а страницу - как окно (визир), которое перемещается по ленте.
Прочитать или записать можно только в то место, над которым располагается окно и только страницу целиком. Управлением страницами виртуальной памяти занимается Менеджер памяти (Windows Memory Manager). Он входит в ядро операционной системы.
Менеджер памяти ведёт несколько списков состояния Страниц, которые используют процессы и операционная система. Это список Рабочих Страниц (Working Set) - тех, которые используются операционной системой, драйверами, процессами и программами. Если процесс пытается обратиться к странице, которой нет в списке Рабочих Страниц процесса, то генерируется ошибка на уровне железа (Page Fault) и Менеджер памяти может отвести ему новую страницу.
Если процесс освобождает Страницу, то Менеджер памяти убирает её из списка Рабочих Страниц и, если она была изменена, то помещает её в список Модифицированных Страниц (Modified Page List) для дальнейшей обработки, а после неё - в "Отстойник" (Standby List). В противном случае, Страница сразу отправляется в "Отстойник". Список Модифицированных Страниц и "Отстойник" могут выполнять функции кэша для процесса, но это отдаётся на усмотрение Менеджера памяти.
Менеджер памяти ведёт ещё два списка - Список Свободных Страниц (Free List) и список Пустых Страниц (Zeroed Page List). В список Свободных Страниц помещаются Страницы, которые освободились после окончания процесса. В список Пустых Страниц помещаются Страницы, которые заполнила нулями специальная подпрограмма Менеджера памяти (Zero Page Thread).
Теперь стоит обратить внимание на числа, которые показывает Task Manager.
Available - свободное место RAM. Это сумма объёмов "Отстойника", Пустых Страниц и Свободных Страниц. System Cache - RAM, занятая системным кэшем. Это сумма "Отстойника" и Рабочих Страниц операционной системы (System working set), которые управляются специальным кэш-менеджером (Cache Manager), входящим в ядро операционной системы.
Все оптимизаторы RAM построены на одном принципе. Заставить Менеджер памяти отдать оптимизатору как можно больше памяти. Если оптимизатор - очень настырный, то ему удастся заполучить и Страницы из "Отстойников" процессов и Рабочие Страницы операционной системы. После чего оптимизатор торжественно рапортует о проделанной работе и закрывается, освобождая всё захваченное место в памяти.
После чего в лучшем случае производительность не изменяется, а в худшем - упадёт. Как только Менеджер памяти дойдет до некоего предела в выделении памяти оптимизатору, он начинает сбрасывать Страницы в файл подкачки на диске. А некоторые из этих Страниц надо будет потом вернуть с диска в память, если в них кэшировались данные или программный код. Особенно это актуально для серверных приложений. И всё равно Менеджер памяти всё перекроит по-своему.
Программы, которые сидят в системном трее, управляются Менеджером памяти как фоновые процессы, т.е. с минимизацией используемой памяти.
Особенно меня порадовали оптимизаторы, которые грозятся произвести дефрагментацию виртуальной памяти. Оптимизатор никогда не знает, в каком физическом устройстве располагается тот или иной адрес его собственной памяти. И кто ж ему позволит залезть в память другой программы и там что-то передвигать...
В общем, оптимизаторы RAM - сплошная маниловщина...
P.S. Окончательным толчком к появлению этого материала послужила статья одного из самых сведущих в операционных системах Windows людей в мире Марка Руссиновича (Mark Russinovich) "The Memory-Optimization Hoax. RAM optimizers make false promises", опубликованной в январском номере "Windows & .NET Magazine", January 2004.
И я не могу не согласиться с ним в том, что как бы не относились к Microsoft, но если бы эти оптимизаторы работали как надо, их алгоритмы уже давно бы включили в ядра операционных систем Windows...
Внимание: ссылки работоспособны на момент публикации материала. Сайт www.fcenter.ru не несёт ответственности за изменения на сторонних серверах.