Таблица
13-2. Образец карты адресного пространства процесса в Windows 2000 на
32-разрядном процессоре типа x86
Во
втором поле показывается тип региона Free (свободный), Private (закрытый), Image (образ) или Mapped (проецируемый). Эти типы описаны в следующей таблице,
Тип
|
Описание
|
Free
|
Этот диапазон виртуальных адресов не сопоставлен ни с
каким типом физической памяти. Его адресное пространство не зарезервировано, приложение может зарезервировать регион по указанному базовому адресу или в
любом месте в границах свободного региона
|
Private
|
Этот диапазон виртуальных адресов сопоставлен со
страничным файлом.
|
Image
|
Этот диапазон виртуальных адресов изначально был
сопоставлен с образом ЕХЕ- или DLL-файла, проецируемого в память, но теперь, возможно, уже нет. Например, при записи в глобальную переменную из образа
модуля механизм поддержки "копирования при записи" выделяет
соответствующую страницу памяти из страничного файла, а не исходною образа
файла.
|
Mapped
|
Этот диапазон виртуальных адресов изначально был
сопоставлен с файлом данных, проецируемым в память, но теперь, возможно, уже
нет. Например, файл данных мог быть спроецирован с использованием механизма
поддержки "копирования при записи". Любые операции записи в этот
файл приведут к тому, что соответствующие страницы памяти будут выделены из
страничного файла, а не из исходного файла данных.
|
В
третьем поле сообщается размер региона в байтах. Например, система
спроецировала образ User32.dll по адресу 0x77E20000. Когда она резервировала
адресное пространство для этого образа, ей понадобилось 401 408 байтов. Не
забудьте, что в третьем поле всегда содержатся значения, кратные размеру
страницы, характерному для данного процессора (4096 байтов для x86).В четвертом
поле показано количество блоков в зарезервированном регионе. Блок — это
неразрывная группа страниц с одинаковыми атрибутами защиты, связанная с одним и
тем же типом физической памяти .Для свободных регионов это значение всегда
равно 0, так как им не передается физическая память. (Поэтому в четвертой графе
никаких данных для свободных регионов не приводится.) Но для занятых регионов
это значение может колебаться в пределах от 1 до максимума (его вычисляют
делением размера региона на размер страницы). Скажем, у региона, начинающегося
с адреса Ox77E20000, размер — 401 408 байтов. Поскольку процесс выполняется на
процессоре x86 (страницы памяти по 4096 байтов), максимальное количество блоков
в этом регионе равно 98 (401 408/4096); ну а, судя по карте, в нем содержится 4
блока.
В
пятом поле — атрибуты защиты региона. Здесь используются следующие сокращения:
E - execute (исполнение), R - read (чтение), W - write (запись), С -
copy-onwrite (копирование при записи). Если ни один из атрибутов в этой графе
не указан, регион доступен без ограничений. Атрибуты защиты не присваиваются и
свободным регионам. Кроме того, здесь Вы никогда не увидите флагов атрибутов
защиты PAGE_ GUARD или PAGE_NOCACHE — они имеют смысл только для физической
памяти, а не для зарезервированного адресного пространства. Атрибуты защиты
присваиваются регионам только эффективности ради и всегда замещаются атрибутами
защиты, присвоенными физической памяти.
В
шестом (и последнем) поле кратко описывается содержимое текущего региона. Для
свободных регионов оно всегда пустое, а для закрытых — обычно пустое
Блоки внутри регионов
Попробуем
увеличить детализацию адресного пространства (по сравнению с тем, что показано
в таблице 13-2). Например, таблица 13-3 показывает ту же карту адресного пространства, но в другом "масштабе": по ней можно узнать, из каких блоков состоит
каждый регион.