Память ошибок страниц windows 7. О чем говорят ошибки отсутствия страницы в памяти

Многие вычислительные системы имеют в своем составе тот или иной вариант диспетчера памяти (другое название - устройство управления памятью - УУП), с помощью которого многозадачная операционная система выделяет память каждой задаче и обеспечивает защиту от программ пользователей. Например, типичная проблема возникает в том случае, когда прикладная программа делает ошибку при вычислении адреса, возможно используя слишком большое или слишком маленькое значение индекса. Если в системе нет защиты, такого рода ошибка может привести к изменению кодов, входящих в программы операционной системы, или к модификации таблиц устройств и даже вызвать незапланированный запуск устройства с фатальными последствиями, такими как несанкционированная запись в фалл с данными.

Помимо защиты операционной системы от неумышленного разрушения диспетчер памяти обеспечивает автоматическое перемещение программы. С помощью диспетчера памяти логические или программные адреса программ пользователей преобразуются в физические, или аппаратные адреса. Эти адреса могут располагаться в памяти совершенно не там, куда указывают логические адреса. Преобразование адресов приводит к полному выводу операционной системы и защищенных устройств ввода-вывода из адресного пространства пользователя. Любая попытка чтения или записи в память вне пространства адресов, отведенных пользователю, заставляет процессор аварийно завершить программу пользователя.

Информация обычно передается порциями, состоящими из фиксированного числа битов; МП 80386 использует порции размером 32 бит, если только он не получил указаний об уменьшении размеров порции до 16 бит. Эти порции носят названия слов. Процесс записи слова в запоминающую систему называется записью в память, процесс получения слова из памяти -чтением из памяти.

Существуют два метода доступа к памяти: произвольный и последовательный. Последовательный доступ используется в тех запоминающих системах, где обращение к словам осуществляется в некотором определенном заранее порядке. Произвольный доступ, с другой стороны, предполагает возможность обращения к словам запоминающей системы в любом порядке и приблизительно за то же время.

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

Прямой доступ к памяти (ПДП)

Прямой доступ к памяти предоставляет возможность внешним устройствам и памяти непосредственно обмениваться данными без вмешательства программы. ПДП обеспечивает максимальную скорость ввода-вывода и максимальный параллелизм процессов. В то время как ввод-вывод по прерываниям и программно-управляемый ввод-вывод пересылают данные через процессор, в случае ПДП данные передаются непосредственно между устройством ввода-вывода и памятью.

Чтобы свести к минимуму число шин данных, принимаются специальные меры, позволяющие использовать обычную магистраль для ПДП. Меры эти заключаются в том, что процессор освобождает магистраль, а внешнее устройство захватывает ее и использует для передачи данных.

На время ПДП выполнение программы обычно приостанавливается. Магистраль освобождается, как только возбуждается управляющая линия запроса ПДП. Процессор завершает текущую операцию, освобождает линии адреса и данных и устанавливает сигнал на одной из линий управления, чтобы предотвратить непреднамеренную расшифровку неопределенных сигналов управления.

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

Канал содержит регистр для хранения адреса ячейки памяти, в которую или из которой осуществляется пересылка данных, В большинстве случаев в канал входит также счетчик слов для отсчета числа выполненных прямых пересылок. Кроме того, канал должен содержать схему, обеспечивающую обмен управляющими сигналами, синхронизацию и другие вспомогательные операции. На рис. 13.4 показаны логические связи между ЦП и контроллером ПДП.

Компоненты ПДП . Основными компонентами ПДП являются триггер запроса, регистр адреса, счетчик и регистр данных, который используется периферийным устройством. Пересылка данных по каналу ПДП включает несколько этапов: 1) инициализация логики ПДП для выполнения ПДП в течение повторяющихся циклов занятия магистрали; 2) асинхронная по отношению к операциям программы активизация ПДП; 3) оповещение об окончании пересылок (по сигналу от счетчика или в результате изменении состояния устройства); 4) вызов программы «очистки» при окончании пересылок; 5) завершение ПДП с помощью программы обработки прерываний, которая возвращает управление в основную программу.

Блочная пересылка данных . Процедура ПДП для высокоскоростных устройств использует пересылку данных блоками. Выполняя текущую программу, процессор инициирует пересылку блока данных и определяет число слов, составляющих блок. Однако фактическая передача слов выполняется под управлением отдельного устройства - контроллера ПДП. Максимальная скорость блочной передачи по каналу ПДП ограничивается только длительностью цикла памяти (чтения или записи) и скоростью работы контроллера ПДП.

ПДП с занятием цикла памяти. Программа инициирует пересылку блока, помещая стартовый адрес в адресный счетчик, а число слов - в счетчик слов. и выдавая команду запуска. Этот тип ПДП часто называют ПДП с занятием цикла памяти, поскольку он приостанавливает выполнение программы каждый раз приблизительно на один машинный цикл.

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

В своей прошлой статье « » я рассказал о возможностях Монитора ресурсов Windows 7 (Resource Monitor), объяснил, как с его помощью наблюдать за распределением системных ресурсов между процессами и службами, а также упомянул, что его можно использовать для решения конкретных задач - например, для анализа расходования памяти. Именно об этом и пойдет речь в данной статье.

Немного о памяти

Прежде чем приступать к анализу, коротко расскажу о том, управляет памятью. После этого вам будет проще понять, какая информация представлена в Мониторе ресурсов Windows 7.

Диспетчер памяти Windows 7 создает виртуальную систему памяти, которая состоит из доступной физической RAM и файла подкачки на жестком диске. Это позволяет операционной системе выделять блоки памяти фиксированной длины (страницы) с последовательными адресами в физической и виртуальной памяти.

Запуск Монитора ресурсов Windows 7

Чтобы запустить Монитор ресурсов Windows 7, откройте меню «Пуск» (Start), введите в строке поиска «Resmon.exe» и нажмите . В открывшемся окне выберите вкладку «Память» (Memory, рис. A).

Рисунок A. На вкладке «Память» в Мониторе ресурсов Windows 7 приводятся подробные сведения о распределении памяти.

Таблица «Процессы»

На вкладке «Память» есть таблица «Процессы» (Processes, рис. B), в которой перечислены все запущенные процессы, а сведения об используемой памяти разбиты на несколько категорий.


Рисунок B. Сведения об используемой памяти для каждого процесса разбиты на несколько категорий.

Графа «Образ»

В колонке «Образ» (Image) указывается имя исполняемого файла процесса. Процессы, запущенные приложениями, узнать очень легко - например, процесс «notepad.exe» со всей очевидностью принадлежит Блокноту (Notepad). Процессы с именем «svchost.exe» представляют различные службы операционной системы. Название службы указывается в скобках рядом с именем процесса.

Графа «ИД процесса»

В колонке «ИД процесса» (PID) указывается номер процесса - уникальное сочетание цифр, позволяющее идентифицировать запущенный процесс.

Графа «Завершено»

В столбце «Завершено» (Commit) указывается объем виртуальной памяти в килобайтах, зарезервированный системой для данного процесса. Сюда входит и используемая физическая память, и сохраненные в файле подкачки страницы.

Графа «Рабочий набор»

В графе «Рабочий набор» (Working Set) указывается объем физической памяти в килобайтах, используемой процессом в данный момент времени. Рабочий набор складывается из общей и частной памяти.

Графа «Общий»

В колонке «Общий» (Shareable) указан объем физической памяти в килобайтах, которую данный процесс использует совместно с другими. Использование одного сегмента памяти или страницы подкачки для родственных процессов позволяет сэкономить место в памяти. При этом физически сохраняется только одна копия страницы, которая затем сопоставляется с виртуальным адресным пространством других процессов, которые к ней обращаются. Например, все процессы, инициированные системными библиотеками DLL - Ntdll, Kernel32, Gdi32 и User32 - используют общую память.

Графа «Частный»

В столбце «Частный» (Private) указывается объем физической памяти в килобайтах, используемой исключительно данным процессом. Именно это значение позволяет определить, сколько памяти нужно тому или иному приложению для работы.

Графа «Ошибок отсутствия страницы в памяти/сек.»

В графе «Ошибок отсутствия страницы в памяти/сек.» (Hard Faults/sec) указано среднее за последнюю минуту количество ошибок отсутствия страницы в памяти в секунду. Если процесс пытается использовать больше физической памяти, чем доступно в данный момент времени, система записывает часть данных из памяти на диск - в файл подкачки. Последующее обращение к данным, сохраненным на диск, и называется ошибкой отсутствия страницы в памяти.

О чем говорят ошибки отсутствия страницы в памяти

Теперь, когда вы представляете, какие сведения собраны в таблице «Процессы», давайте посмотрим, как с их помощью следить за распределением памяти. При запуске приложений и работе с файлами диспетчер памяти отслеживает объем рабочего набора для каждого процесса и фиксирует запросы на дополнительные ресурсы памяти. По мере увеличения рабочего набора процесса, диспетчер соотносит эти запросы с потребностями ядра и других процессов. Если доступного адресного пространства недостаточно, диспетчер уменьшает объем рабочего набора, сохраняя данные из памяти на диск.

В дальнейшем при чтении этих данных с диска возникает ошибка отсутствия страницы в памяти. Это вполне нормально, но если ошибки происходят одновременно для разных процессов, системе требуется дополнительное время для чтения данных с диска. Слишком частые ошибки отсутствия страницы в памяти, соответственно, снижают быстродействие системы. Вам наверняка доводилось наблюдать неожиданное замедление работы всех приложений, которое затем также неожиданно прекращалось. Почти наверняка это замедление было связано с активным перераспределением данных между физической памятью и подкачкой.

Отсюда следует вывод: если ошибки отсутствия страницы в памяти для того или иного процесса происходят слишком часто и притом регулярно, компьютеру не хватает физической памяти.

Чтобы было удобнее наблюдать за процессами, вызывающими частые ошибки отсутствия страницы в памяти, можно отметить их флажками. При этом выбранные процессы переместятся наверх списка, а в графике ошибок отсутствия страницы в памяти будут представлены оранжевой кривой.

Стоит учитывать, что распределение памяти зависит от целого ряда других факторов, и мониторинг ошибок отсутствия страницы в памяти - не лучший и не единственный способ выявления проблем. Тем не менее, он может послужить неплохой отправной точкой для наблюдения.

Таблица «Физическая память»

В таблице «Процессы» приводятся детальные сведения о распределении памяти между отдельными процессами, а таблица «Физическая память» (Physical Memory) дает общую картину использования RAM. Ее ключевой компонент - уникальная гистограмма, показанная на рис. C.


Рисунок C. Гистограмма в таблице «Физическая память» позволяет составить общее представление о распределении памяти в Windows 7.

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

Секция «Зарезервированное оборудование»

Слева расположена секция «Зарезервированное оборудование» (Hardware Reserved), обозначенная серым цветом: это память, выделенная на нужды подключенного оборудования, которую оно использует для взаимодействия с операционной системой. Зарезервированная для оборудования память заблокирована и недоступна диспетчеру памяти.

Обычно объем памяти, выделенной оборудованию, составляет от 10 до 70 Мбайт, однако этот показатель зависит от конкретной конфигурации системы и в некоторых случаях может достигать нескольких сотен мегабайт. К компонентам, влияющим на объем зарезервированной памяти, относятся:

;
компоненты материнской платы - например, усовершенствованный программируемый контроллер прерываний ввода/вывода (APIC);
звуковые карты и другие устройства, осуществляющие ввод/вывод с отображением на память;
шина PCI Express (PCIe);
видеокарты;
различные наборы микросхем;
флеш-накопители.

Некоторые пользователи жалуются, что в их системах для оборудования зарезервировано ненормально много памяти. Мне с такой ситуацией сталкиваться не приходилось и потому я не могу ручаться за действенность предложенного решения, но многие отмечают, что обновление версии BIOS позволяет решить проблему.

Секция «Используется»

Секция «Используется» (In Use, рис C), обозначенная зеленым цветом, представляет количество памяти, используемой системой, драйверами и запущенными процессами. Количество используемой памяти рассчитывается, как значение «Всего» (Total) за вычетом суммы показателей «Изменено» (Modified), «Ожидание» (Standby) и «Свободно» (Free). В свою очередь, значение «Всего» - это показатель «Установлено» (Installed RAM) за вычетом показателя «Зарезервированное оборудование».

Секция «Изменено»

Оранжевым цветом выделена секция «Изменено» (Modified), в которой представлена измененная, но не задействованная память. Фактически она не используется, но может быть в любой момент задействована, если снова понадобится. Если память не используется достаточно давно, данные переносятся в файл подкачки, а память переходит в категорию «Ожидание».

Секция «Ожидание»

Секция «Ожидание», обозначенная синим цветом, представляет страницы памяти, удаленные из рабочих наборов, но по-прежнему с ними связанные. Другими словами, категория «Ожидание» - это фактически кэш. Страницам памяти в этой категории присваивается приоритет от 0 до 7 (максимум). Страницы, связанные с высокоприоритетными процессами, получают максимальный приоритет. Например, совместно используемые процессы обладают высоким приоритетом, поэтому связанным с ними страницам присваивается наивысший приоритет в категории «Ожидание».

Если процессу требуются данные с ожидающей страницы, диспетчер памяти сразу же возвращает эту страницу в рабочий набор. Тем не менее, все страницы в категории «Ожидание» доступны для записи данных от других процессов. Когда процессу требуется дополнительная память, а свободной памяти недостаточно, диспетчер памяти выбирает ожидающую страницу с наименьшим приоритетом, инициализирует ее и выделяет запросившему процессу.

Секция «Свободно»

В категории «Свободно», обозначенной голубым цветом, представлены страницы памяти, еще не выделенные ни одному процессу или освободившиеся после завершения процесса. В этой секции отображается как еще не задействованная, так и уже освобожденная память, но на самом деле, еще не задействованная память относится к другой категории - «Нулевые страницы» (Zero Page), которая так называется, потому что эти страницы инициализированы нулевым значением и готовы для использования.

О проблеме свободной памяти

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

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

Мониторинг памяти

Хотите понаблюдать систему управления памятью Windows 7 в действии? Перезагрузите компьютер и сразу же после запуска откройте Монитор ресурсов Windows 7. Перейдите на вкладку «Память» и обратите внимание на соотношение секций в гистограмме физической памяти.

Затем начните запускать приложения. По мере запуска следите за изменением гистограммы. Запустив как можно больше приложений, начните закрывать их по одному и наблюдайте, как изменяется соотношение секций в гистограмме физической памяти.

Проделав этот экстремальный эксперимент, вы поймете, как Windows 7 управляет памятью на вашем конкретном компьютере, и сможете использовать Монитор ресурсов Windows 7 для наблюдения за распределением памяти в нормальных условиях повседневной работы.

А что думаете вы?

Нравится ли вам идея использовать Монитор ресурсов Windows 7 для наблюдения за распределением памяти? Поделитесь своим мнением в комментариях!

Распределение памяти в Windows9xи вWindowsNT. Монитор ресурсов Windows 7. Изучение пунктов и вкладок, связанных с памятью. Использование монитора ресурсов Windows 7 для наблюдения за распределением памяти. Увеличение объема файла подкачки (виртуальной памяти). Проверка памяти средствами Windows.

3.1. Распределение памяти в Windows 9x

ОС Windows 9x - это 32-разрядные многопотоковые ОС с вытесняющей многозадачностью и графическим пользовательским интерфейсом. Для своей загрузки они используют MS-DOS 7.0, которая обеспечивает два режима работы процессора – реальный (в файле MSDOS.SYS в секции прописано BootGUI=0) и защищённый (BootGUI=1). Защищённый режим устанавливается непосредственно перед загрузкой Windows 9x, в результате чего процессор начинает управлять памятью с использованием страничного механизма преобразования виртуальных адресов в физические. Область виртуального адресного пространства состоит из 4-х килобайтных страниц, которые размещаются в оперативной памяти или на диске.

Младшие адреса виртуального адресного пространства используются совместно всеми процессами для обеспечения совместимости с драйверами устройств реального времени, резидентными программами Windows и др. Это с одной стороны удобно, но, с другой, снижает надёжность (одно из основных качеств ОС), т.к. любой процесс может запортить компоненты, расположенные по этим адресам.

Каждая прикладная 32-разрядная Windows-программа выполняется в своём адресном пространстве, однако доступ к нужным адресам возможен, т.е. организация виртуальных адресов не использует всех аппаратных средств защиты, заложенных в микропроцессор. 16-разрядные программы разделяют общее адресное пространство и также уязвимы друг перед другом. Модель памяти Windows 9x представлена на рис.3.1.

Рис. 3.1. Распределения ОП в Windows 9x

Нижние 64 Кб ОП недоступны 32-разрядным программам, но 16-разрядные программы могут записывать сюда свои данные. Адреса ниже 4 Мб отображаются в адресное пространство каждой прикладной программы и совместно используются всеми процессами. Это делает эту область незащищенной от случайной записи.

Минимально необходимый объем памяти для функционирования Windows 9х составляет 4 Мб, однако практически при таком объеме памяти работать невозможно. Страничный файл , с помощью которого реализуется механизм виртуальной памяти, расположен в каталоге Windows и имеет переменный размер, изменяемый при необходимости самой системой. Его размеры могут быть заданы с помощью системных средств (Панель управления → Система → Быстродействие → Файловая система), либо заданы в секции файла SYSTEM.INI – строки с указанием диска и имени файла:

Pagingfive=c:\PageFile.sys

MinPagingFileSize=65536 (64 Мб)

MaxPagingFileSize=262144 (256 Мб)

Первая и вторая строки определяют имя файла и его размещение, а две последние – начальный и предельный размер страничного файла в Кб.

Минимальный размер файла подкачки можно получить, запустив программу SysMon (системный монитор) и, выбрав в качестве необходимых параметров размер файла подкачки и объем свободной памяти, оценить потребности в памяти наиболее часто используемых приложений.

3.2. Распределение памяти в Windows NT

Отличия схемы распределения от Windows 9х сводятся к следующему:

1) более серьезное использование аппаратных средств защиты памяти, предусмотренных в микропроцессоре;

2) все системные программные модули расположены в собственных виртуальных адресных пространствах и доступ прикладных программ к ним невозможен.

Распределение адресного пространства в Windows NT представлено на рис. 3.2.

Рис. 3.2. Распределения ОП в Windows NT

Прикладным программам выделяется 2 Гб локального (собственного) линейного (неструктурированного) адресного пространства (первые 64 Кб недоступны). Они изолированы друг от друга и могут общаться друг с другом только через буфер обмена (clipboard), либо через механизмы DDE (Dynamic Data Exchange – динамический обмен данными) и OLE (Object Linking and Embedding – связь и внедрение объектов).

В верхней части 2 Гб-й области размещается код системных DLL (динамически связанные библиотеки), выполняющих роль сервер-процессов. Они проверяют значения параметров запросов, исполняют запрошенную функцию и пересылают результаты назад в адресное пространство вызывающей программы.

В интервале адресов 2-4 Гб располагаются системные (низкоуровневые) компоненты Windows (т.е. самого высокого уровня защиты от несанкционированного доступа: ядро, планировщик потоков, диспетчер памяти).

Для 16-разрядных прикладных Windows-программ реализуются сеансы WOW (Windows On Windows) в режиме вытесняющей многозадачности индивидуально в собственных адресных пространствах или совместно в разделяемом адресном пространстве.

При запуске приложения создаётся процесс со своей информационной структурой, в рамках которого запускается задача. Она может запускать другие задачи. В результате чего организуется мультизадачный режим работы.

Управление памятью (выделение, резервирование, освобождение, подкачка) производится диспетчером виртуальной памяти VMM (Virtual Memory Manager). Каждая виртуальная страница переносится на физическую страницу − страничный фрейм (page frame), заполненный в исходном состоянии нулями (это основное требование стандарта на системы безопасности уровня С2, определяющее невозможность использования их предыдущего содержимого другими процессами). Место для выгрузки страницы резервируется в файле подкачки Pagefile.sys, представляющим собой зарезервированный блок дискового пространства.

Вся память Windows NT подразделяется на зарезервированную (для динамического использования процессами при выполнении задач),выделенную (для выгрузки которой резервируется в Pagefile.sys) идоступную (остальная часть свободной памяти).

      Виртуальная память в Windows

Самая частая причина замедления работы системы под управлением Windows - заполнение физической памяти. При этом Windows начинает так называемую "подкачку" (paging) - перемещение блоков кода и данных программ (каждый такой блок называется страницей - page) из физической памяти на жесткий диск. Обращение к файлу подкачки время от времени - нормальное явление, не ухудшающее производительность системы, но частые запросы данных из файла на диске могут заметно снизить общую скорость работы системы. Эта проблема становится особенно заметной при переключении между несколькими программами, активно использующими память, на компьютере, который не содержит достаточного количества физической памяти. В результате диск почти постоянно находится в работе, потому что система пытается "перекачать" данные с него в память и обратно.

Если общий размер выделенной памяти превышает общий объем физической памяти, Windows приходится "перекачивать" страницы между быстрой оперативной памятью и гораздо более медленной виртуальной памятью в файле подкачки, что приводит к замедлению скорости системы.

В процессе установки Windows XP файл подкачки автоматически создается в корневой папке на том же диске, где расположены системные файлы Windows. Размер файла подкачки определяется, исходя из объема физической памяти в системе. По умолчанию минимальный размер файла подкачки в 1,5 раза больше, чем объем физической памяти, а максимальный размер - в 3 раза больше. Файл подкачки можно увидеть в окне Проводника, если включить режим отображения скрытых и системных файлов (рис. 3.3).

Рис. 3.3. Включение режима отображения скрытых и системных файлов

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

Для этого нужно выполнить следующую последовательность действий:

1. Войдите в систему под учетной записью из группы Администраторы и откройте окно «Панель управления – Система».

2. На вкладке «Дополнительно» нажмите кнопку «Параметры» в разделе «Быстродействие» (рис. 3.4).

3. В диалоговом окне «Параметры быстродействия» выберите вкладку «Дополнительно» и нажмите кнопку «Изменить» (рис. 3.5) для отображения диалогового окна «Виртуальная память», которое показано на рис. 3.6 для WindowsXPи на рис. 3.7 дляWindows7.

Текущие параметры файла подкачки отражены в поле «Общий размер файла подкачки на всех дисках».

4. Выберите любой диск из списка в верхней части диалогового окна, чтобы настроить параметры этого диска.

Можно изменить перечисленные ниже параметры:

- Особый размер . Укажите значение в полеИсходный размер для задания начального размера файла pagefile.sys на указанном диске (в мегабайтах). В полеМаксимальный размер введите число не меньшее значения в полеИсходный размер , но не превышающее 4096 Мбайт (4 Гбайт).

- Размер по выбору системы. Выберите этот пункт для включения динамического управления размером файла подкачки для данного диска. Этот вариант следует выбирать, если вы не хотите изменять предлагаемые Windows по умолчанию параметры.

- Без файла подкачки . Используйте для всех дисков, на которых вам не нужен файл подкачки. Удостоверьтесь, что файл подкачки есть хотя бы на одном диске.

5. После внесения каких-либо изменений нажмите Задать для записи изменений.

6. Повторите этапы 4 и 5 для прочих дисков (при необходимости). Нажмите ОК для закрытия диалогового окна после завершения работы с ним.

Рис. 3.4. Кнопка «Параметры» для перехода к просмотру и/или

изменению параметров виртуальной памяти

Рис. 3.5. Кнопка «Изменить» для перехода к изменению параметров виртуальной памяти в WindowsXP(слева) и вWindows7

Рис. 3.6. Окно просмотра и настройки размера виртуальной памяти

Рис. 3.7. Окно просмотра и настройки размера виртуальной памяти в Windows7

Если на компьютере установлено несколько физических дисков, лучше всего разместить файл подкачки на самом быстром , причем предпочтительно, если системные файлы Windows будут находиться на другом диске. Еще лучше разделить файл подкачки на несколькофизических дисков, поскольку контроллер дисков может параллельно обрабатывать несколько запросов на запись и чтение данных.

Не пытайтесь разместить файл подкачки на несколько логических дисках одного физического диска!!!

Если в системе есть один жесткий диск, разбитый на разделы C, D и E, а файл подкачки распределен на несколько разделов, то система может даже замедлиться, поскольку в такой конфигурации магнитным головкам жесткого диска приходится считывать данные из нескольких областей, а не подряд из одной области диска.

При уменьшении минимального или максимального размера файла подкачки и при создании нового файла подкачки на диске систему необходимо перезагрузить для того, чтобы изменения вступили в силу. Увеличение размера файла подкачки обычно не требует перезагрузки компьютера.

Если у вас очень много физической памяти, может возникнуть соблазн вовсе отключить файл подкачки. Не делайте этого! !!

Windows XP была разработана так, что файл подкачки используется для выполнения некоторых задач ядра, поэтому некоторые программы третьих фирм могут выдавать сообщение о нехватке памяти при попытке полностью отключить виртуальную память.

Windows не использует файл подкачки, пока он не понадобится, поэтому отключение виртуальной памяти не приведет к повышению производительности!!!

Windows может динамически увеличивать размер файла подкачки при необходимости. Эта функция работает только при выборе пункта «Размер по выбору системы », а также при задании максимального размера, превышающего текущий размер файла подкачки.

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

      Контроль использования памяти в Windows

Самый простой способ узнать, сколько оперативной памяти используется в данный момент времени - открыть Диспетчер задач (Task Manager), нажав ++, и перейти на вкладку «Быстродействие» (Performance) (рис.3.8). Подробное описание информации вкладки «Быстродействие» для WindowsXPпредставлено в табл. 3.1.

Таблица 3.1. Расшифровка данных Диспетчера задач

Вкладка «Быстродействие» для Windows7 имеет значимые нововведения по сравнению с соответствующей вкладкой Диспетчером задач Windows XP.

Число в графе «Всего» (Total) раздела «Физическая память» (Physical Memory) указывает на общий объем оперативной памяти для данной системы. В графе «Кэшировано» (Cached) указано количество физической памяти, которая недавно использовалась системными ресурсами. Она остается в кэше на случай, если снова понадобится системе, но доступна для других процессов. В новой графе «Доступно» (Available) указывается количество неиспользуемой в данный момент физической памяти, а в графе «Свободно» (Free) - количество памяти, которая используется кэшем, но не содержит полезной информации.

В разделе «Память ядра» (Kernel Memory) содержатся две графы - «Выгружаемая» (Paged) и «Невыгружаемая» (Nonpaged). В сумме они указывают, сколько памяти использует ядро. Выгружаемая - это виртуальная память, а невыгружаемая - физическая.

В разделе «Система» (System) появились графы «Дескрипторов» (Handles) и «Потоков» (Threads), связанные с составными компонентами процессов. В графе «Дескрипторов» указывается количество идентификаторов объектов (дескрипторов), которые используются запущенными в данный момент процессами. В графе «Потоков» указано число подпроцессов, запущенных в рамках более крупных процессов. Цифра в графе «Процессов» (Processes), естественно, указывает на общее количество запущенных процессов, которые можно увидеть на вкладке «Процессы».

В графе «Время работы» (Up Time) указано, сколько времени прошло с последнего запуска компьютера. В графе «Выделено» (Commit) содержится информация о файле подкачки. Первая цифра указывает на общий объем используемой в данный момент физической и виртуальной памяти, а вторая - на общий объем памяти для данного компьютера в принципе.

Еще более подробную информацию можно получить, нажав кнопку «Монитор ресурсов» и выбрав вкладку «Память» (рис. 3.9).

Рис. 3.9. Вкладка «Память» окна монитора ресурсов Windows7

На вкладке «Память» есть таблица «Процессы», в которой перечислены все запущенные процессы, а сведения об используемой памяти для каждого процесса разбиты на несколько категорий (рис.3.10).

Рис. 3.10. Таблица «Процессы»

В колонке «Образ » указывается имя исполняемого файла процесса. Процессы, запущенные приложениями, узнать очень легко - например, процесс «Winword.exe» со всей очевидностью принадлежит текстовому редакторуWord. Процессы с именем «svchost.exe» представляют различные службы операционной системы. Название службы указывается в скобках рядом с именем процесса.

В колонке «ИД процесса » указывается номер процесса - уникальное сочетание цифр, позволяющее идентифицировать запущенный процесс.

В столбце «Завершено » указывается объем виртуальной памяти в килобайтах, зарезервированный системой для данного процесса. Сюда входит и используемая физическая память, и сохраненные в файле подкачки страницы.

В графе «Рабочий набор » указывается объем физической памяти в килобайтах, используемой процессом в данный момент времени. Рабочий набор складывается из общей и частной памяти.

В колонке «Общий » указан объем физической памяти в килобайтах, которую данный процесс использует совместно с другими. Использование одного сегмента памяти или страницы подкачки для родственных процессов позволяет сэкономить место в памяти. При этом физически сохраняется только одна копия страницы, которая затем сопоставляется с виртуальным адресным пространством других процессов, которые к ней обращаются. Например, все процессы, инициированные системными библиотеками DLL - Ntdll, Kernel32, Gdi32 и User32 - используют общую память.

В столбце «Частный » указывается объем физической памяти в килобайтах, используемой исключительно данным процессом. Именно это значение позволяет определить, сколько памяти нужно тому или иному приложению для работы.

В графе «Ошибок отсутствия страницы в памяти/сек. » указано среднее за последнюю минуту количество ошибок отсутствия страницы в памяти в секунду. Если процесс пытается использовать больше физической памяти, чем доступно в данный момент времени, система записывает часть данных из памяти на диск - в файл подкачки. Последующее обращение к данным, сохраненным на диск, и называется ошибкой отсутствия страницы в памяти.

При запуске приложений и работе с файлами диспетчер памяти отслеживает объем рабочего набора для каждого процесса и фиксирует запросы на дополнительные ресурсы памяти. По мере увеличения рабочего набора процесса, диспетчер соотносит эти запросы с потребностями ядра и других процессов. Если доступного адресного пространства недостаточно, диспетчер уменьшает объем рабочего набора, сохраняя данные из памяти на диск.

В дальнейшем при чтении этих данных с диска возникает ошибка отсутствия страницы в памяти. Это вполне нормально, но если ошибки происходят одновременно для разных процессов, системе требуется дополнительное время для чтения данных с диска. Слишком частые ошибки отсутствия страницы в памяти, соответственно, снижают быстродействие системы. Это проявляется в неожиданном замедлении работы всех приложений, которое затем также неожиданно прекращается. Замедление связано с активным перераспределением данных между физической памятью и подкачкой.

Отсюда следует вывод: если ошибки отсутствия страницы в памяти для того или иного процесса происходят слишком часто и притом регулярно, компьютеру не хватает физической памяти.

Чтобы было удобнее наблюдать за процессами, вызывающими частые ошибки отсутствия страницы в памяти, можно отметить их флажками. При этом выбранные процессы переместятся наверх списка, а в графике ошибок отсутствия страницы в памяти будут представлены оранжевой кривой.

Стоит учитывать, что распределение памяти зависит от целого ряда других факторов, и мониторинг ошибок отсутствия страницы в памяти - не лучший и не единственный способ выявления проблем. Тем не менее, он может послужить неплохой отправной точкой для наблюдения.

В таблице «Процессы» приводятся детальные сведения о распределении памяти между отдельными процессами, а таблица «Физическая память» дает общую картину использования RAM. Ее ключевой компонент - уникальная гистограмма, показанная на рис. 3.11.


Рисунок 3.11. Гистограмма в таблице «Физическая память» позволяет составить общее представление о распределении памяти в Windows 7

Каждая секция гистограммы обозначена собственным цветом и представляет определенную группу страниц памяти. По мере использования системы, диспетчер памяти в фоновом режиме перемещает данные между этими группами, поддерживая тонкий баланс между физической и виртуальной памятью для обеспечения эффективной работы всех приложений. Рассмотрим гистограмму поподробнее.

Слева расположена секция «Зарезервированное оборудование », обозначенная серым цветом: это память, выделенная на нужды подключенного оборудования, которую оно использует для взаимодействия с операционной системой. Зарезервированная для оборудования память заблокирована и недоступна диспетчеру памяти. Обычно объем памяти, выделенной оборудованию, составляет от 10 до 70 Мбайт, однако этот показатель зависит от конкретной конфигурации системы и в некоторых случаях может достигать нескольких сотен мегабайт.

К компонентам, влияющим на объем зарезервированной памяти, относятся:

Компоненты материнской платы - например, усовершенствованный программируемый контроллер прерываний ввода/вывода (APIC);

Звуковые карты и другие устройства, осуществляющие ввод/вывод с отображением на память;

Шина PCI Express (PCIe);

Видеокарты;

Различные наборы микросхем;

Флеш-накопители.

Секция «Используется », обозначенная зеленым цветом, представляет количество памяти, используемой системой, драйверами и запущенными процессами. Количество используемой памяти рассчитывается, как значение «Всего » за вычетом суммы показателей «Изменено », «Ожидание » и «Свободно ». В свою очередь, значение «Всего » - это показатель «Установлено » за вычетом показателя «Зарезервированное оборудование ».

Когда в Windows запускается процесс, многие из отображающих образы файлов EXE и DLL страниц могут уже находиться в памяти, поскольку они используются другими процессами. Пригодные для записи страницы образов помечены как «копирование при записи», чтобы их можно было совместно использовать до того момента, когда их понадобится модифицировать. Если операционная система узнает уже выполнявшийся ЕХЕ, то она может записать шаблон страничных ссылок (при помощи технологии, которую компания Microsoft называет Super-Fetch). Эта технология старается заблаговременно подкачать много нужных страниц (хотя процесс еще не получил по ним страничные ошибки). Это снижает латентность запуска приложений (чтение страниц с диска накладывается на выполнение инициализационного кода образов). Эта технология повышает производительность вывода на диск, поскольку дисковым драйверам легче организовать операции чтения (чтобы уменьшить необходимое время поиска). Этот процесс упреждающей подкачки страниц используется и во время загрузки системы, а также когда фоновое приложение выходит на передний план и при выходе системы из гибернации.

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

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

Подкачка по требованию в диспетчере памяти управляется страничными ошибками. При каждой ошибке происходит прерывание в ядро. Затем ядро строит машинно независимый дескриптор (который сообщает о происшедшем) и передает его в диспетчер памяти исполнительного уровня. Диспетчер памяти затем проверяет обращение на действительность. Если давшая сбой страница попадает в зафиксированную область, то он ищет адрес в списке VAD и находит (или создает) элемент таблицы страниц процесса. В случае совместно используемой страницы диспетчер памяти использует элемент таблицы страниц прототипов (связанный с объектом сегмента) для заполнения нового элемента таблицы страниц процесса.

Формат элемента таблицы страниц различается в зависимости от архитектуры процессора. Для процессоров х86 и х64 элементы отображаемой страницы показаны на рис. 11.17. Если элемент помечен как действительный, то его содержимое интерпретируется аппаратным обеспечением (чтобы виртуальный адрес можно было преобразовать в правильную физическую страницу). Неотображенные страницы также имеют свои элементы, но они помечены как недействительные (invalid), и аппаратное обеспечение игнорирует остальную часть элемента. Программный формат несколько отличается от аппаратного и определяется диспетчером памяти. Например, для неотображенной страницы (которая должна быть размещена и обнулена до использования) этот факт отмечен в элементе таблицы страниц.


Два важных бита элемента таблицы страниц обновляются непосредственно аппаратным обеспечением. Это бит доступа (А) и бит «измененная» (D). Эти биты отслеживают использование данного отображения страницы для доступа к странице и возможность модифицирования страницы при этом доступе. Это реально повышает производительность системы, поскольку диспетчер памяти может использовать бит доступа для реализации подкачки по схеме наиболее давнего использования (Least- Recently Used (LRU)). Принцип LRU состоит в том, что те страницы, которые дольше всех не используются, имеют самую низкую вероятность повторного использования в ближайшее время. Бит доступа позволяет диспетчеру памяти определить, что к странице был произведен доступ. Бит «измененная» говорит диспетчеру памяти о том, что страница, возможно, была модифицирована (или, что более важно, она не была модифицирована). Если страница не была модифицирована с момента считывания с диска, то диспетчеру памяти не нужно записывать ее содержимое на диск (перед тем, как использовать ее для чего-то другого).

В обеих архитектурах, х86 и x64, используется элемент таблицы страниц размером 64 бита (см. рис. 11.17).

Каждая страничная ошибка может быть отнесена к одной из пяти категорий:

1. Страница не зафиксирована.

2. Попытка обращения к странице с нарушением разрешений.

3. Попытка модификации страницы типа «копирование при записи».

1. Необходимо увеличение стека.

2. Страница зафиксирована, но в данное время не отображена.

Первый и второй случаи - это ошибки программирования. Если программа пытается использовать адрес, который не имеет действительного отображения, или пытается выполнить недопустимую операцию (наподобие попытки записи в страницу «только для чтения»), это называется нарушением доступа (access violation) и обычно приводит к завершению процесса. Нарушение доступа часто является результатом недопустимых значений указателей, в том числе результатом обращения к памяти, которая была освобождена и откреплена от процесса.

Третий случай имеет такие же симптомы, что и второй (попытка записи в страницу «только для чтения»), но его обработка иная. Поскольку страница была помечена как «копирование при записи», то диспетчер памяти не выдает нарушение доступа. Вместо этого он создает закрытую копию страницы для текущего процесса, а затем возвращает управление тому потоку, который пытался выполнить запись в страницу. Поток повторяет операцию записи, которая теперь завершится без страничной ошибки.

Четвертый случай происходит тогда, когда поток помещает значение в свой стек и попадает на страницу, которая еще не была выделена. Диспетчер памяти распознает это как особый случай. Пока есть место в зарезервированных под стек виртуальных страницах, диспетчер памяти будет поставлять новые страницы, обнулять их и отображать в процесс. Когда поток возобновит выполнение, он повторит попытку доступа, и на этот раз она будет успешной.

И наконец, пятый случай - это нормальная страничная ошибка. Однако она имеет несколько подвариантов. Если страница отображена на файл, то диспетчер памяти должен просмотреть ее структуры данных (такие, как таблица страниц прототипов, связанная с объектом сегмента), чтобы быть уверенным в том, что в памяти нет ее копии. Если копия есть (например, в другом процессе, в резервном списке либо в списке модифицированных страниц), то он просто сделает ее совместно используемой (возможно, что для этого ему придется пометить ее как страницу «копирование при записи», если изменения совместно использовать не предполагается). Если копии еще нет, то диспетчер памяти выделит свободную физическую страницу и подготовит ее для копирования в нее страницы файла с диска, если только в этот момент не осуществляется перенос с диска другой страницы (тогда нужно лишь подождать, пока этот перенос не завершится).

Если диспетчер памяти может обработать страничную ошибку, находя нужную страницу в памяти (а не считывая ее с диска), то такая ошибка называется мягкой ошибкой (soft fault). Если нужна копия с диска, то это жесткая ошибка (hard fault). Мягкие ошибки гораздо дешевле, они мало влияют на производительность приложения (по сравнению с жесткими ошибками). Мягкие ошибки могут происходить потому, что совместно используемая страница уже была отображена на другой процесс, либо нужна просто новая обнуленная страница, либо нужная страница была удалена из рабочего набора процесса, но запрашивается повторно до того, как ее повторно использовали. Мягкие ошибки могут возникать также из-за того, что страницы были сжаты для эффективного увеличения размера физической памяти. Для большинства конфигураций центрального процессора память и ввод-вывод в текущих системах эффективнее сжимать, вместо того чтобы тратиться на дорогостоящий ввод-вывод (с точки зрения производительности и энергозатрат), требующий чтения страницы с диска.

Когда физическая страница больше не отображается таблицей страниц ни одного из процессов, она попадает в один из трех списков: свободных, модифицированных или резервных. Те страницы, которые никогда больше не понадобятся (такие, как страницы стека завершающегося процесса), освобождаются немедленно. Те страницы, которые могут снова дать страничную ошибку, попадают либо в список модифицированных, либо в список резервных (в зависимости от того, был ли бит «измененная» установлен для какого-либо элемента таблицы страниц, который отображал эту страницу с момента ее последнего считывания с диска). Страницы из модифицированного списка будут в конечном итоге записаны на диск, а затем перемещены в список резервных.

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

Элементы таблицы страниц на рис. 11.17 относятся к номерам физических (а не виртуальных) страниц. Для обновления элемента таблицы страниц (и каталога страниц) ядру нужно использовать виртуальные адреса. Windows отображает таблицы страниц и каталоги страниц для текущего процесса на виртуальное адресное пространство ядра при помощи элемента self-map в каталоге страниц (рис. 11.18). Отображая элемент каталога страниц на каталог страниц (карта self-map), мы получаем виртуальные адреса, которые можно использовать для ссылки на элементы каталога страниц (рис. 11.18, а) и на элементы таблицы страниц (рис. 11.18, б). Карта self-map занимает 8 Мбайт виртуальных адресов ядра для каждого процесса (на процессорах х86). Для простоты на рисунке показан элемент x86 self-map для 32-разрядных PTE-записей (Page-Table Entries). На самом деле Windows использует 64-разрядные PTE-записи, поэтому система может воспользоваться более чем 4 Гбайт физической памяти. С 32-разрядными PTE-записями элемент self-map использует в каталоге страниц только одну PDE- запись (Page-Directory Entry) и поэтому занимает только 4 Мбайт адресов, а не 8 Мбайт.