Книга: 2.Внутреннее устройство Windows (гл. 5-7)
Трансляция виртуальных адресов на платформе x86
Трансляция виртуальных адресов на платформе x86
C помощью структур данных (таблиц страниц), создаваемых и поддерживаемых диспетчером памяти, процессор транслирует виртуальные адреса в физические. Каждый виртуальный адрес сопоставлен со структурой системного пространства, которая называется элементом таблицы страниц (page table entry, PTE) и содержит физический адрес, соответствующий виртуальному. Например, на рис. 7-15 показаны три последовательно расположенные виртуальные страницы, проецируемые на три разрозненные физические страницы (платформа x86).
Пунктирные линии на рис. 7-15 соединяют виртуальные страницы с РТЕ, представляя косвенные связи между виртуальными и физическими страницами.
ПРИМЕЧАНИЕ Код режима ядра (например, драйверов устройств) может ссылаться на физические адреса, транслируя их в виртуальные. Подробнее об этом см. описание функций поддержки списка дескрипторов памяти (memory descriptor list, MDL) в DDK.
По умолчанию в х86-системе Windows для трансляции виртуальных адресов в физические использует двухуровневую таблицу страниц (х86-систе-мы, работающие с РАЕ-версией ядра, используют трехуровневую таблицу страниц, но они в этом разделе не рассматриваются). 32-разрядный виртуальный адрес интерпретируется как совокупность трех элементов: индекса каталога страниц, индекса таблицы страниц и индекса байта. Они применяются в качестве указателей в структурах, описывающих проекции страниц (рис. 7-l6). Размеры страницы и PTE определяет размеры каталога страниц и полей индекса таблицы страниц. Так, в х86-системах длина индекса байта составляет 12 битов, поскольку размер страницы равен 4096 байтов (т. е. 212).
Индекс каталога страниц (page directory index) применяется для поиска таблицы страниц, содержащей PTE для данного виртуального адреса. C помощью индекса таблицы страниц (page table index) осуществляется поиск РТЕ, который, как уже говорилось, содержит физический адрес, по которому проецируется виртуальная страница. Индекс байта (byte index) позволяет найти конкретный адрес на физической странице. Взаимосвязи этих трех величин и их использование для трансляции виртуальных адресов в физические показаны на рис. 7-17.
При трансляции виртуального адреса выполняются следующие операции.
1. Аппаратные средства управления памятью находят каталог страниц текущего процесса. При каждом переключении контекста процесса эти средства получают адрес каталога страниц нового процесса. Обычно операционная система записывает этот адрес в специальный регистр процессора.
2. Индекс каталога страниц используется как указатель для поиска элемента каталога страниц (page directory entry, PDE), который определяет местонахождение таблицы страниц, нужной для трансляции виртуального адреса. PDE содержит номер фрейма страницы (page frame number, PFN) таблицы страниц (если она находится в памяти; однако такие таблицы могут выгружаться в страничный файл).
3. Индекс таблицы страниц используется как указатель для поиска PTE5 который определяет местонахождение требуемой виртуальной страницы.
4. Ha основе PTE отыскивается страница. Если она действительна, то содержит PFN соответствующей страницы физической памяти. Если PTE сообщает, что страница недействительна, обработчик ошибок подсистемы управления памятью пытается найти страницу и сделать ее действительной (см. раздел по обработке ошибок страниц далее в этой главе). Если сделать страницу действительной не удалось (например, из-за ошибки защиты), обработчик ошибок генерирует нарушение доступа или вызывает переход в состояние отладки.
5. Если PTE указывает на действительную страницу, для поиска адреса нужных данных на физической странице используется индекс байта. Ознакомившись с общей картиной, перейдем к детальному рассмотрению структуры каталогов страниц, таблиц страниц и РТЕ.
- Введение в диспетчер памяти
- Компоненты диспетчера памяти
- Внутренняя синхронизация
- Конфигурирование диспетчера памяти
- Исследование используемой памяти
- Сервисы диспетчера памяти
- Большие и малые страницы
- Резервирование и передача страниц
- Блокировка памяти
- Гранулярность выделения памяти
- Разделяемая память и проецируемые файлы
- Защита памяти
- Запрет на выполнение
- Программный вариант 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
- Уведомление о малом или большом объеме памяти
- Оптимизаторы памяти — миф или реальность?
- Резюме
- Трансляция адресов
- Physical Address Extension (PAE)
- Структура системного адресного пространства на платформе x86
- Трансляция виртуальных адресов на платформе IA64
- Трансляция виртуальных адресов на платформе x64
- 9.2 Реализация массива ftAID на платформе Windows NT
- Глава 1 Знакомство с технологией виртуальных машин
- Фильтрация адресов
- Фильтрация нежелательных адресов
- Фильтрация неверных адресов
- 7.4. Создание виртуальных Web-серверов
- 10.4. Создание виртуальных серверов