Книга: 2.Внутреннее устройство Windows (гл. 5-7)
Каталоги страниц
Каталоги страниц
У каждого процесса есть один каталог страниц (page directory), который представляет собой страницу с адресами всех таблиц страниц для данного процесса. Физический адрес каталога страниц процесса хранится в блоке KPROCESS и проецируется по адресу 0xC0300000 в х86-системах или 0xC0600000 в системах с РАЕ-ядром. Весь код, выполняемый в режиме ядра, использует не физические, а виртуальные адреса (о KPROCESS см. главу 6).
Процессору известно местонахождение страницы каталога страниц, поскольку в специальный регистр процессора (CR3 в х86-системах) загружен ее физический адрес. При каждом переключении контекста на поток другого процесса процедура ядра, отвечающая за переключение контекста, загружает в этот регистр значение из блока KPROCESS нового процесса. Переключение контекста между потоками одного процесса не влечет перезагрузку физического адреса каталога страниц, поскольку все потоки одного процесса используют одно и то же адресное пространство.
Каталог страниц состоит из элементов (PDE), каждый из которых имеет длину 4 байта (в системах с РАЕ-ядром — 8 байтов) и описывает состояние и адреса всех возможных таблиц страниц для данного процесса. (Как будет сказано далее, таблицы страниц создаются по мере необходимости, так что каталоги страниц большинства процессов ссылаются лишь на небольшой набор таких таблиц.) Мы не будем отдельно рассматривать формат PDE, поскольку он в основном совпадает с форматом аппаратного РТЕ.
B х86-системах без PAE для полного описания 4-гигабайтного виртуального адресного пространства требуется 1024 таблицы страниц. Каталог страниц процесса, связывающий эти таблицы, содержит 1024 PDE. Соответственно размер индекса каталога равен 10 битам (210 = 1024). B х86-систе-мах, работающих в режиме РАЕ, в таблице страниц 512 элементов (размер индекса каталога страниц равен 9 битам). Из-за наличия 4 каталогов страниц максимальное число таблиц страниц составляет 2048.
ЭКСПЕРИМЕНТ: исследуем каталог страниц и PDE
Физический адрес каталога страниц текущего процесса можно увидеть, изучив поле DirBase в выходной информации команды !process отладчика ядра.
Виртуальный адрес каталога страниц можно выяснить из информации, выводимой отладчиком ядра для PTE конкретного виртуального адреса, как показано ниже.
Часть выходной информации отладчика ядра, касающаяся РТЕ, рассматривается в разделе «Страницы таблиц и РТЕ» далее в этой главе.
Поскольку Windows предоставляет каждому процессу закрытое адресное пространство, у каждого процесса свой набор таблиц страниц для проецирования этого пространства. B то же время таблицы страниц, описывающие системное пространство, разделяются всеми процессами (а пространство сеанса разделяется процессами в сеансе). Чтобы не допустить появления нескольких таблиц страниц, описывающих одну и ту же виртуальную память, при создании процесса PDE, описывающие системное пространство, инициализируются так, чтобы они указывали на существующие системные таблицы страниц. Если процесс является частью сеанса, таблицы страниц, описывающие пространство сеанса, тоже используются совместно. Для этого PDE пространства сеанса инициализируются так, чтобы они указывали на существующие сеансовые таблицы страниц.
Однако, как показано на рис. 7-18, не все процессы имеют одинаковое представление системного пространства. Так, если при расширении пула подкачиваемой памяти требуется создать новую системную таблицу страниц, диспетчер памяти — вместо того чтобы сразу записывать указатели на новую системную таблицу во все каталоги страниц процессов — обновляет эти каталоги только по мере обращения процессов по новому виртуальному адресу.
Таким образом, при обращении к пулу подкачиваемой памяти может возникнуть ошибка страницы из-за того, что каталог страниц процесса еще не содержит указатель на новую системную таблицу страниц, описывающую новую область пула. Ho при доступе к пулу неподкачиваемой памяти таких ошибок не возникает, хотя он тоже может расширяться. Дело в том, что при инициализации системы Windows создает все системные таблицы страниц, которые описывают максимально возможный объем пула неподкачиваемой памяти.
- Введение в диспетчер памяти
- Компоненты диспетчера памяти
- Внутренняя синхронизация
- Конфигурирование диспетчера памяти
- Исследование используемой памяти
- Сервисы диспетчера памяти
- Большие и малые страницы
- Резервирование и передача страниц
- Блокировка памяти
- Гранулярность выделения памяти
- Разделяемая память и проецируемые файлы
- Защита памяти
- Запрет на выполнение
- Программный вариант DEP
- Копирование при записи
- Диспетчер куч
- Типы куч
- Структура диспетчера кучи
- Синхронизация доступа к куче
- Ассоциативные списки
- Куча с малой фрагментацией
- Средства отладки
- Pageheap
- Address Windowing Extensions
- Системные пулы памяти
- Настройка размеров пулов
- Мониторинг использования пулов
- Ассоциативные списки
- Утилита Driver Verifier
- Настройка и инициализация Driver Verifier
- Special Pool (Особый пул)
- Pool Tracking (Слежение за пулом)
- Force IRQL Checking (Обяз. проверка IRQL)
- Low Resources Simulation (Нехватка ресурсов)
- Структуры виртуального адресного пространства
- Структуры пользовательского адресного пространства на платформе x86
- Структура системного адресного пространства на платформе x86
- Пространство сеанса на платформе x86
- Системные PTE
- Структуры 64-разрядных адресных пространств
- Трансляция адресов
- Трансляция виртуальных адресов на платформе x86
- Каталоги страниц
- Страницы таблиц и PTE
- Адрес байта в пределах страницы
- Ассоциативный буфер трансляции
- Physical Address Extension (PAE)
- Трансляция виртуальных адресов на платформе IA64
- Трансляция виртуальных адресов на платформе x64
- Обработка ошибок страниц
- Недействительные PTE
- Прототипные PTE
- Операции ввода-вывода, связанные с подкачкой страниц
- Конфликты ошибок страницы
- Страничные файлы
- Дескрипторы виртуальных адресов
- Объекты-разделы
- Рабочие наборы
- Подкачка по требованию
- Средство логической предвыборки
- Правила размещения
- Управление рабочими наборами
- Диспетчер настройки баланса и подсистема загрузки-выгрузки
- Системный рабочий набор
- База данных PFN
- Динамика списков страниц
- Подсистема записи модифицированных страниц
- Структуры данных PFN
- Уведомление о малом или большом объеме памяти
- Оптимизаторы памяти — миф или реальность?
- Резюме
- 6.2.2. Каталоги и страницы
- Информация заголовочной страницы (Database header)
- Информация страниц данных
- Статистика страниц индексов
- Размер страницы базы данных
- Типы страниц и их использование
- Дополнительные национальные кодовые страницы и порядки сортировки
- Помогает или мешает продажам ваша домашняя страница?
- Переход по узлу SharePoint и домашней странице
- Страницы веб-частей
- Использование домашней страницы рабочей области для собраний
- Добавление веб-части на страницу