
- •Введение
- •Связывание адресов
- •Общее описание виртуальной сегментно-страничной памяти ос Windows
- •Инструментальные средства наблюдения за работой менеджера памяти
- •Виртуальное адресное пространство процесса
- •Регионы в виртуальном адресном пространстве
- •Создание (резервирование) региона и передача ему физической памяти
- •Прогон программы выделения памяти при помощи функции Virtual Alloc
- •Прогон программы, демонстрирующей выделение больших массивов памяти
- •Регион куча
- •Прогон программы выделения памяти в стандартной куче
- •Регион стека потока. Сторожевые страницы
- •Прогон программы, моделирующей обращение к сторожевым страницам
- •Регион файла, отображаемого в память
- •Прогон программы, демонстрирующей отображение файла в память
- •Написание, компиляция и прогон программы, демонстрирующей различные аспекты проецирования файла в память
- •Заключение
Инструментальные средства наблюдения за работой менеджера памяти
Из инструментальных средств Windows, описанных в лекции 2, для лучшего практического ознакомления с деятельностью по управлению памятью в работе будут активно использоваться вкладки "Процессы и "Быстродействие" диспетчера задач, а также разнообразные счетчики производительности, за поведением которых можно следить из оснастки "Производительность" ("Системный монитор") административной консоли панели управления.
Наиболее интересную информацию содержат счетчики, относящиеся к конкретному процессу: количество байт виртуальной памяти, файла подкачки, ошибок страницы, рабочего множества и т.д., и общесистемные счетчики: количество байт выделенной виртуальной памяти, элементов таблицы страниц и др.
Полезными оказываются и некоторые общедоступные утилиты, например, утилита наблюдения за ошибками страниц pfmon.
Авторы книги[6] отдельные аспекты функционирования менеджера памяти иллюстрируют с помощью отладчика.
Виртуальное адресное пространство процесса
В 32-битных системах процессор может сгенерировать 32-битный адрес. Это означает, что каждому процессу выделяется диапазон виртуальных адресов от 0x00000000до 0xFFFFFFFF. Эти 4 Гб адресов система делит примерно пополам, и для кода и данных пользовательского режима отводятся 2 Гб в нижней части памяти. Если быть более точным, то речь идет об виртуальных адресах, начиная с 0x00010000и кончая 07FFEFFFF (см. [6]). Таким образом, система управления памятью позволяет пользовательской программе с помощью Win32 API записать нужный байт в любую виртуальную ячейку из этого диапазона адресов. Адреса верхней части виртуальной памяти используется для кода и данных режима ядра и других системных нужд.
По умолчанию адресное пространство каждого процесса изолировано. Данные двух разных процессов, записанные по одному и тому же виртуальному адресу, оказываются в разных страницах физической памяти при помощи корректной работы системы трансляции адреса. В ряде случаев изоляция может быть частично снята (файлы, отображаемые в память; разделяемая память). Разумеется, в подобных случаях нужно отдельно обеспечить контроль доступа к области памяти, для чего создается отдельный объект (объект-секция или объект-раздел, section object), включающий атрибуты защиты. Ниже будет также приведен пример контроля процессом памяти другого процесса - прием, которым активно пользуются отладчики.
Регионы в виртуальном адресном пространстве
Вначале все виртуальное адресное пространство процесса свободно. Оно начинает заполняться по мере выполнения программы. Чтобы воспользоваться какой-либо частью этого пространства, в нем нужно создать регион, зарезервировав определенный диапазон адресов. Такая схема позволяет поддерживать разреженные адресные пространства.
Совокупность регионов описывается структурой VAD, которая организована в виде двоичного дерева и хранится в PCB (структура EPROCESS, см. лекцию 5) процесса. Для вновь создаваемого региона можно запросить любой диапазон адресов с учетом уже существующих регионов. Первые регионы для кода, стека, стандартной кучи процесса и ряд других создает операционная система в момент загрузки процесса. Последующие регионы приложение создает самостоятельно (см. рис. 9.4).
Рис. 9.4. Совокупность регионов в пользовательской части (нижние 2 Гб) виртуального адресного пространства процесса