Реферат Курсовая Конспект
Подводя итоги - раздел Компьютеры, Архитектура памяти в Windows А Теперь Попробуем Осмыслить Понятия Адресных Пространств, Разделов, Регионов...
|
А теперь попробуем осмыслить понятия адресных пространств, разделов, регионов, блоков и страниц как единое целое. Лучше всего начать с изучения карты виртуальной памяти, на которой изображены все регионы адресного пространства В пределах одного процесса. В качестве примера мы воспользуемся программой VMMap из главы 14. Чтобы в полной мере разобраться в адресном пространстве процесса, рассмотрим его в том виде, в каком оно формируется при запуске VMMap под управлением Windows 2000 на 32-разрядной процессорной платформе x86 Образец карты адресного пространства VMMap показан в таблице 13-2. На отличиях адресных пространств в Windows 2000 и Windows 98 я остановлюсь чуть позже.
Карта в таблице 13-2 показывает регионы, расположенные в адресном пространстве процесса. Каждому региону соответствует своя строка в таблице, а каждая строка состоит из шести полей.
В первом (крайнем слева) поле проставляется базовый адрес региона. Наверное, Вы заметили, что просмотр адресного пространства мы начали с региона по адресу 0x00000000 и закончили последним регионом используемого адресного простран-
ства, который начинается по адресу 0x7FFE0000. Все регионы непрерывны. Почти все базовые адреса занятых регионов начинаются со значений, кратных 64 Кб. Это связано с гранулярностью выделения памяти в адресном пространстве. А если Вы увидите какой-нибудь регион, начало которого не выровнено по значению, кратному 64 Кб, значит, он выделен кодом операционной системы для управления Вашим процессом.
Базовый адрес | Тип | Размер | Блоки | Атрибут( ы) защиты | Описание |
Free | |||||
Private | -RW- | ||||
Free | G1440 | ||||
Private | -RW- | ||||
000? 1000 | Free | ||||
Private | -HW- | Стек потока | |||
Private | -RW- | ||||
Mapped | -RW- | ||||
Mapped | -R- | DeviceHarddiskVolume1WINN7system32unicode.nls | |||
Free | |||||
Mapped | -R- | DeviceHarddiskVolume1WINNTsystem32locale.nIs | |||
Free | |||||
002A0000 | Happed | -R- | PeviccHarddiskVolume1WINNTsystem32sortkey.nls | ||
002E1000 | Free | ||||
002F0000 | Mapped | -R- | DeviceHarddiskVolume1WINNTsystem32sorttbls.nls | ||
002F4000 | Free | ||||
Mapped | ER- | ||||
0003С8000 | Free | ||||
Image | ERWC | С CDx86Debug14_VMMap.ехе | |||
0041A000 | Free | ||||
Mapped | -R- | ||||
Free | |||||
Mapped | ER | ||||
Private | -RW- | ||||
Free | |||||
Private | -RW- | ||||
Free | |||||
Private | -RW- | ||||
007A0000 | Mapped | -R- | DeviceHarddiskVolume1WINNTsystem32ctype.nls | ||
007А2000 | Free | ||||
699D0000 | Image | ERWC | C:WINNTSystpm32PSAPI dll | ||
6990В000 | Free | ||||
77D50000 | Image | ERWC | С:WINNTsystem32RPCRT4 DLL | ||
770ВЕ000 | Free | ||||
770С0000 | Image | ERWC | С:WINNTsystem32ADVAPI32 dll | ||
77Е14000 | Free | ||||
77E20000 | Image | ERWC | C:WINNTsystem32USER32 dll | ||
77Е82000 | Free | ||||
77Е90000 | Image | ERWC | С WINNTsystem32KERNEL32.dll | ||
77F40000 | Image | ERWC | С WINKTsystem32GUI32 DLL | ||
77F7В000 | Free | ||||
77FB0000 | image | ERWC | С WINNTSystem32ntdll.dll | ||
77FF000 | Free | ||||
Image | bMWC | С WINNTsystem32MSVCRI.dll | |||
Free | |||||
7F6F0000 | Mapped | ER-- | |||
7F7F0000 | Free | ||||
7FFB0000 | Mapped | -R-- | |||
7FFD4000 | Free | ||||
7FFDE000 | Private | ERW- | |||
7FFDF000 | Private | ERW- | |||
7FFE0000 | Private | -R-- |
Таблица 13-2. Образец карты адресного пространства процесса в Windows 2000 на 32-разрядном процессоре типа x86
Во втором поле показывается тип региона Free (свободный), Private (закрытый), Image (образ) или Mapped (проецируемый) Эти типы описаны в следующей таблице,
Тип | Описание |
Free | Этот диапазон виртуальных адресов не сопоставлен ни с каким типом физической памяти. Его адресное пространство не зарезервировано, приложение может зарезервировать регион по указанному базовому адресу или в любом месте в границах свободного региона |
Private | Этот диапазон виртуальных адресов сопоставлен со страничным файлом. |
Image | Этот диапазон виртуальных адресов изначально был сопоставлен с образом ЕХЕ- или DLL-файла, проецируемого в память, но теперь, возможно, уже нет Например, при записи в глобальную переменную из образа модуля механизм поддержки «копирования при записи» выделяет соответствующую страницу памяти из страничного файла, а не исходною образа файла |
Mapped | Этот диапазон виртуальных адресов изначально был сопоставлен с файлом данных, проецируемым в память, но теперь, возможно, уже нет. Например, файл данных мог быть спроецирован с использованием механизма поддержки «копирования при записи" Любые операции записи в этот файл приведут к тому, что соответствующие страницы памяти будут выделены из страничного файла, а не из исходного файла данных. |
Способ вычисления этого поля моей программой VMMap может давать неправильные результаты. Поясню почему Когда регион занят, VMMap пытается «прикинуть", к какому из трех оставшихся типов он может относиться, — в Windows нет функций, способных подсказать точное предназначение региона. Я определяю это сканированием всех блоков в границах исследуемого региона, по результатам которого программа делает обоснованное предположение Но предположение есть предположение Если Вы хотите получше разобраться в том, как это делается, просмотрите исходный код VMMap, приведенный в главе 14.
В третьем поле сообщается размер региона в байтах. Например, система спроецировала образ 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 — они имеют смысл только для физической памяти, а не для зарезервированного адресного пространства. Атрибуты защиты присваиваются регионам только эффективности ради и всегда замещаются атрибутами защиты, присвоенными физической памяти.
В шестом (и последнем) поле кратко описывается содержимое текущего региона. Для свободных регионов оно всегда пустое, а для закрытых — обычно пустое, так как у VMMap нет возможности выяснить, зачем приложение зарезервировало данный закрытый регион. Однако VMMap все жe распознает назначение тех закрытых регионов, в которых содержатся стеки потоков. Стеки потоков выдают себя тем, что содержат блок физической памяти с флагом атрибутов защиты PAGE_GUARD. Если же стек полностью заполнен, такого блока у него нет, и тогда VMMap не в состоянии распознать стск потока.
Для регионов типа Image программе VMMap удается определить полное имя файла, проецируемого на этот регион. Она получает эту информацию с помощью ToolHelp-функций, о которых я упоминал в конце главы 4. В Windows 2000 программа VMMap может идентифицировать регионы, сопоставленные с файлами данных; для этого она вызывает функцию GetMappedFileName (ее нет в Windows 98).
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: "Архитектура памяти в Windows"
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Подводя итоги
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов