| 
 Оптимизаторы памяти для Windows NT/2000/XP: мысли вслух Компьютеры в современной жизни заняли своё твёрдое место, и 
            уже трудно вспомнить, как без них обходились лет десять назад. Но 
            компьютер без программного обеспечения - это только груда железа, из 
            которого можно извлечь немного драгоценных металлов. 
   
  Я 
            уверен, что программный рынок гораздо больше рынка компьютерного 
            железа. Наряду с действительно полезными программами, пользователям 
            предлагают и абсолютные пустышки. Но, разумеется, денег за них 
            просят. Можно понять, если какой-нибудь молодой да ранний набрался 
            поверхностных знаний из популярных книжек и начал выдавать программы 
            "на гора". Может быть, со временем наберётся мастерства... 
   
  Но 
            довольно часто для того, чтоб пользователи отдавали за пустышки 
            деньги добровольно и с "чувством глубокого удовлетворения", 
            запускается и раскручивается какой-нибудь миф. Самым большим таким 
            надувательством в компьютерных технологиях, конечно же, была 
            "проблема" 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... |