PC Magazine/RE logo
©СК Пресс 9/96
PC Magazine, March 12, 1996, p. 239

Диспетчер виртуальной памяти Windows 95

Джефф Просис


Интерпретация данных об используемой памяти.

Если бы мне пришлось выбирать самую "первоклассную" утилиту из состава Windows 95, я бы выбрал программу Sysmon.exe, более известную как System Monitor (системный монитор) Windows 95. С ее помощью можно следить за всеми видами системных показателей, характеризующих работу компьютера, начиная от степени использования ЦП до быстродействия файловой системы.

Ряд наиболее интригующих параметров системы, которые выводит системный монитор, относятся к "сфере влияния" диспетчера памяти (Memory Manager). Диспетчер памяти - это модуль в составе Windows 95, который управляет виртуальной памятью, охватывающей не только физическое ОЗУ компьютера, но и файл подкачки (swap file) на жестком диске. В эту категорию входят элементы Page-ins (ввод страниц), Page-outs (вывод страниц), Page faults (отсутствие страниц), Discards (Очистка страниц), Locked Memory (Заблокированная память) и многие другие. Наряду с остальными эти характеристики использовани памяти могут дать некоторое представление о внутренней работе диспетчера виртуальной памяти Windows. Но и дл тех, кто незнаком с механизмом постраничной организации памяти, применяемым в ЦП корпорации Intel, эти показатели имеют почти такое же значение, как схемы электропроводки космического корабля многоразового использования.

Советуем познакомиться с этим механизм, так как системный монитор представляет массу информации о том, как Windows 95 использует память. Чтобы внести ясность в предмет нашего разговора, мы кратко рассмотрим, что такое постраничная организация памяти и как она работает. Затем мы используем полученные знания дл описания показателей работы диспетчера памяти, которые выводит системный монитор.

Механизм страничной организации памяти: основы

Cтраничная организация - это механизм, позволяющий ПК "делать вид", что объем памяти у него больше, чем есть на самом деле. При включенном механизме страничной организации операционная система может присоединять к 16 Мбайт ОЗУ 24 Мбайт жесткого диска, чтобы прикладные программы воспринимали это как 40 Мбайт ОЗУ. Дополнительные 24 Мбайт называются виртуальной памятью, потому что в действительности это не та память, котора представлена 16-Мбайт ОЗУ, физически установленного на ПК. Виртуальная память - иллюзия, создаваема операционной системой, но это очень хорошая иллюзия.

Ценность виртуальной памяти обусловлена тем, что память на жестком диске намного дешевле микросхем оперативной памяти. При сегодняшних ценах 1-Гбайт ОЗУ может стоить около 40 тыс. долл. В то же время, жесткие диски, вмещающие 1 Гбайт информации, можно приобрести примерно за 400 долл.

Секрет способности операционной системы замещать ОЗУ пространством на жестком диске заключается во встроенном в процессор механизме страничной организации памяти. Для имитации 40-Мбайт ОЗУ на ПК с 16 Мбайт памяти операционная система создает файл подкачки на жестком диске и, объединив усилия с процессором, делит 40 Мбайт виртуального адресного пространства на 4-Кбайт цепочки, называемые страницами (pages). 16 Мбайт физического ОЗУ аналогичным образом делятся на 4-Кбайт страницы, и каждая физическая страница отображается на логическую страницу - одну из 10 000 страниц, которые создают иллюзию имеющегося в распоряжении 40-Мбайт ОЗУ. Из этих 40 Мбайт 16 Мбайт представлены реальным ОЗУ, а остальные 24 Мбайт адресного пространства пусты. Система же использует все 40 Мбайт так, будто они реально существуют.

Происходящее далее зависит от того, как используетс память, которую предоставляет операционная система. При запуске и выполнении программ данные записываются и считываются из различных мест 40-Мбайт адресного пространства. До тех пор пока все обращения к памяти происходят через логические страницы, которым соответствуют реальные физические страницы, механизм этот не используется и ПК ведет себя почти, как компьютер с 16 Мбайт памяти. Данные, записываемые на логическую страницу, хранятся в ОЗУ на соответствующей физической странице, а данные, считываемые из логической страницы, извлекаются из страницы в ОЗУ.

Логическая страница, на которую отображена физическая страница, называется присутствующей (present). Логическая страница, которой не соответствует физическая страница, называетс отсутствующей (not-present). Отличает два этих вида один бит в 32-разрядном элементе страничной таблицы (page table entry), в который записывается состояние страницы. Элементы этой таблицы хранятся в памяти наряду с другими данными операционной системы. Средства виртуальной памяти включаются в работу, когда происходит обращение к памяти, затрагивающее отсутствующую страницу.

Если процессор обнаруживает попытку обращения к отсутствующей странице, он генерирует сигнал отсутстви страницы (page fault), информируя операционную систему о том, что доступ к памяти невозможен. В ответ на этот сигнал операционная система отображает физическую страницу на логическую, чтобы сделать доступ к памяти возможным. Как только отображение завершено, страница может быть записана и считана, потому что теперь она скопирована в реальное ОЗУ.

На первый взгляд все просто, но давайте посмотрим, что произойдет, если физическая страница, только что отображенная на другую логическую страницу, использовалась и в другом процессе? Вот в этот момент в дело вступает файл подкачки. До отображения физической страницы на другую логическую страницу содержащиеся в ней 4 Кбайт данных записываются в файл подкачки. Эта операция называется выводом страницы (paging out). Позднее, если какая-то программа пытается обратиться к выведенной логической странице (а в настоящей момент она отсутствует), произойдет еще одна ситуаци отсутствия страницы и она скопируется обратно из файла подкачки - действие, известное как ввод страницы (paging in). Файл подкачки служит большим накопителем для данных, не помещающихся в физическом ОЗУ, а операционная система "жонглирует" 4-Кбайт блоками данных, чтобы создать видимость того, что в действительности для хранения данных имеется в наличии 40-Мбайт ОЗУ.

Диаграмма на рис. 1 иллюстрирует дерево приняти решений, по ступеням которого проходит операционна система при каждом отсутствии страницы. Сначала система ищет в файле подкачки страницу, которую нужно ввести. Если в физическом ОЗУ есть свободная страница, операционная система читает страницу из файла подкачки и отображает логическую страницу на физическую. Если свободных физических страниц нет, операционная система выбирает одну из них и выводит ее содержимое на диск. Для того чтобы решить, какую страницу выбрать, большинство операционных систем, в том числе Windows, используют алгоритм, LRU (наиболее давно использованна страница) - выбор страницы, к которой не обращались дольше всех.

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

Недостаток виртуальной памяти состоит в том, что она работает медленно. Доступ даже к самому быстрому жесткому диску занимает в тысячи раз больше времени, чем обращение к ОЗУ, поэтому, чем чаще подкачиваютс данные, тем медленнее будет работать ваша система. Системный монитор Windows 95 выводит на экран цветные диаграммы, иллюстрирующие происходящие в системе подкачки, а также другие параметры, касающиес деятельности подсистемы управления памятью.

Рис. 1. Подкачка виртуальной памяти
____________ | Отсутствие | | страницы | |____________| | ______\|/______ | Найти | | запрашиваемую | | страницу в | | файле подкачки| |_______________| _______________ | | Найти | ___\|/____ | физическую | / Есть ли \ | страницу, | | свободная | Нет | которую можно | | физическая |------>| освободить | | страница? | |_______________| \__________/ | _______________ | ____\|/______ | Записать | | / Эта страница\ Да | "загрязненную"| | Да | "загрязнена"? |----->| страницу в | | \_____________/ | файл подкачки | _____\|/_______ Нет | |_______________| |Считать | _____\|/___________ | |запрашиваемую |<----| Очистить страницу | | |страницу из | |___________________| | |файла подкачки |<----------------------------------- |_______________| | ____\|/_______ | Отобразить | | логическую | | страницу на | ____________ | физическую |--->| Продолжить | |______________| |____________|

Системный монитор

Системный монитор - один из нескольких компонентов Windows 95, которые устанавливаются факультативно. Если он не был инсталлирован вместе с Windows 95, можно установить его теперь, открыв Control Panel (Панель управления), выбрав пункт Add/Remove Programs (Добавление и удаление программ), щелкнув по закладке Windows Setup (Установка Windows), выбрав System Monitor (Системный монитор) в меню Accessories (Приложения) и повторив эту часть установки. Как только системный монитор установлен, можно запустить его, щелкнув на кнопке Start (Пуск) в Taskbar (линейка задач) и выбрав Programs|Accessories|System Tools|System Monitor (Программы|Приложения|Служебные программы|Системный монитор).

Сначала вы увидите графическую диаграмму степени загруженности процессора (доля времени, когда процессор занят выполнением какой-либо задачи, в противоположность времени простоя), но можно выбрать любой из других многочисленных параметров, раскрыв меню Edit и выбрав пункт Add Item (Добавить показатель). Щелчок мышью в окне Category list (список категорий) диспетчера памяти выводит на экран перечень, начинающийся с пункта Allocated memory (Выделенна память) и заканчивающийся пунктом Swappable memory (Подкачиваемая память). Это и есть те показатели управления памятью, которые можно увидеть с помощью системного монитора.

Значение некоторых показателей очевидно. Например, элементы "размер файла подкачки" (swapfile size) и "занято в файле подкачки" (swapfile in use) описывают текущие размер файла подкачки и число реально используемых байтов в нем. В Windows 95 файл подкачки растет и сжимается динамически, поэтому его размер изменяется во времени. Кэш диска в Windows 95 тоже динамический, поэтому его фактический размер будет колебаться между минимальными и максимальными размерами, описанными системным монитором. Windows 95 добивается максимальной производительности, отвод любую неиспользуемую физическую память под кэширование диска. Вот почему диаграмма Free memory (свободна память) обычно колеблется около отметки 1 Мбайт. Если программе нужна память, в данный момент зарезервированная для кэширования диска, она ей представляется, а емкость кэш-буфера диска соответственно сокращается.

"Выделенная память" в основном - это мера виртуального адресного пространства. Не беспокойтесь, если она не намного больше ОЗУ, установленного в вашем ПК. Среда Windows 95 способна динамически увеличивать адресное пространство, чтобы удовлетворить требования к размеру памяти. Загрузите пакет программ, и вы увидите, соответствующий подъем диаграммы выделенной памяти.

Сумма "подкачиваемой памяти" и "другой памяти" (Other) должна быть почти равна "выделенной памяти". "Подкачиваемая память" - это тот объем памяти, который может быть выведен в файл подкачки. "Другая память" - это та часть памяти, которая никогда не выводится на диск. К ней относятся страницы, предназначенные дл кэширования диска, и страницы, содержащие код 32-разрядных программ Windows (нет необходимости записывать их в файл подкачки, поскольку их всегда можно загрузить из соответствующих EXE-файлов). Бессмысленно записывать в файл подкачки страницы, содержащие кэшированные данные с жесткого диска, но Windows 95 будет подкачивать страницы с кэшированными данными, считанными с CD-ROM. Это увеличивает производительность накопителей CD-ROM и составляет первопричину того, почему Windows 95 обслуживает отдельные кэши для жестких дисков и CD-ROM.

Теперь, возможно, вы имеете неплохое представление о том, что означают диаграммы отсутствие страниц (page faults), ввод страниц (page-ins), вывод страниц (page-outs) и очистка (discards). График отсутствия страниц показывает число ситуаций отсутствия страниц за секунду. Ввод и вывод страниц - показатели, характеризующие число ежесекундно вводимых в память и выводимых в файл подкачки страниц. Очистка указывает число страниц, очищаемых без записи на диск из-за того, что их биты "загрязнения" не установлены. Для улучшени производительности механизма постраничной организации диспетчер виртуальной памяти Windows 95 хранит число "загрязненных" страниц. Когда это число достигает определенного порогового значения и система переходит в холостой режим, диспетчер памяти начинает "предварительное выкачивание" (prepaging) "загрязненных" страниц, записывая их на диск.

Не приходилось ли вам когда-либо, сидя за своим ПК и размышляя над изображением на экране, вдруг обнаружить, что система Windows начинает как сумасшедшая обращатьс к жесткому диску? Это и есть предварительное выкачивание страниц. Теоретическое обоснование этого процесса состоит в том, что запись на диск в периоды простоя, когда это не оказывает заметного влияния на производительность, может обеспечить большие преимущества в дальнейшем. Когда приходит время вывести страницу на диск, прошедшую такую подготовку страницу можно просто переписать, а не записывать на диск, если со времени последней записи в файл подкачки она не изменилась. Операция переписывания намного быстрее вывода на диск, так как не требует времени для доступа к диску.

Заблокированная память - это страницы памяти, которые "зафиксированы" на месте так, что диспетчер памяти не будет перекачивать их на диск. Заблокированная память называется еще и странично-блокированной. Система Windows блокирует часть своего системного кода во избежание перекачки на диск тех фрагментов программ, которые должны находитьс в памяти постоянно (например, процедуры обработки прерываний), и для повышения производительности. Драйверы виртуальных устройств (VxD) других изготовителей тоже снабжены механизмом блокировани страниц памяти для обеспечения гарантии того, чтобы наиболее важный код оставался в памяти. Одна из причин, по которой Windows 95 может работать на ПК с 4-Мбайт ОЗУ, состоит в том, что она работает с менее чем 2 Мбайт странично-заблокированной памяти, использу оставшуюся память для подкачки кода и данных как операционной системы, так и прикладных программ. Конечно, производительность при 4-Мбайт ОЗУ весьма посредственна по причине большого числа операций подкачки.

Термин отсутствие экземпляров (instance faults) был придуман в корпорации Microsoft. В среде Windows 95 некоторые страницы играют роль глобальных (global page), которые используются сообща всеми виртуальными машинами (VM). Другие представляют собой локальные (local) страницы, манипулирующие данными на уровне одной VM. Задача диспетчера виртуальной памяти усложняется тем, что некоторые страницы содержат как глобальные, так и локальные данные. Локальные данные, которые, возможно, занимают всего лишь несколько байтов из 4-Кбайт страницы, называются данными экземпляра (instance data). Отсутствие экземпляра происходит, когда отсутствуюшая страница содержит данные экземпляра, к которым осуществляется обращение. Диспетчер памяти обрабатывает ситуации отсутстви экземпляра путем подкачки страницы в память и копирования на нее данных экземпляра, соответствующих активной VM.

Что это означает

Итак, мы определили термины. Но что можно делать с показателями использования памяти, выводимыми системным монитором?

К сожалению, немногое. Настроечных параметров памяти, которые можно менять для повышени производительности, не так много, потому что система сама выполняет большую часть работ по собственной подстройке. Единственное, что можно сделать дл повышения производительности, - расширить ОЗУ, если системный монитор показывает, что подкачка происходит слишком часто, особенно часты процессы вывода и очистки страниц. Больший объем ОЗУ повышает производительность путем снижения зависимости диспетчера памяти от жесткого диска.

В период расцвета DOS существовало неверное представление, что, чем больше ОЗУ, тем выше быстродействие ПК. (Обычно, это было не так.) Однако в системе Windows существует прямая зависимость между объемом ОЗУ и производительностью системы в целом. Исключая, возможно, установку более быстрой видеоплаты, расширение ОЗУ в ПК - первое, что можно сделать дл ускорения работы Windows.