Вопрос или проблема
Я пытаюсь разобраться в одной вещи. Я понимаю, что, скажем, в 64-битной системе существует 9-битное разделение, которое используется для индексирования таблицы каталогов страниц с 512 записями, как PGD, или PMD и т.д…
То, что я не понимаю, это как каждый указатель в этих таблицах каталогов страниц может указывать на СВОЮ СОБСТВЕННУЮ таблицу каталогов страниц, заполненную 512 записями. Как показано на диаграмме ниже… Также, какого размера указатели (или ptr)?
PMD
--> +-----+ PTE
| ptr |-------> +-----+
| ptr |- | ptr |-------> PAGE
| ptr | \ | ptr |
| ptr | \ ...
| ... | \
| ptr | \ PTE
+-----+ +----> +-----+
| ptr |-------> PAGE
| ptr |
...
```
Я настоятельно рекомендую прочитать том 3А, главу 5 руководства Intel x86, там подробно объясняется механизм страниц.
Таблицы каталогов страниц не содержат указателей, они содержат записи таблицы страниц, которые предоставляют метаданные о таблице страниц или странице кадра, и часть физического адреса. Процесс трансляции, переходя от линейного адреса к физическому адресу, всегда проходит через таблицы каталогов страниц, никогда не ссылаясь на другую запись таблицы страниц на том же уровне, поэтому таблицы каталогов страниц никогда не нуждаются в том, чтобы указывать на самих себя. При трансляции линейного адреса MMU начинает с таблицы каталога страниц, чей физический адрес хранится в регистре CR3. Затем он examines подмножество бит в линейном адресе, декодированное этой таблицей каталога страниц, соответствующее смещению внутри текущей таблицы каталога страниц; это дает запись таблицы страниц (или запись каталога страниц), указывающую, присутствует ли следующий уровень или нет, и если да, где он находится в памяти.
Этот процесс в конечном итоге приводит либо к отсутствующей странице, либо (максимум) к физическому адресу страницы размером 4KiB. Процесс может остановиться заранее, если страница отсутствует или если линейный адрес трансформируется в адрес в странице больше чем 4KiB.
В 32-битном (не PAE) режиме каждая запись в таблице каталога страниц имеет размер 32 бита, поэтому каждая таблица в 4KiB хранит 1024 записи (10 бит адреса). В 64-битном режиме каждая запись имеет размер 64 бита, поэтому каждая таблица в 4KiB хранит 512 записей (9 бит адреса).
Подробнее, при 4-уровневой страничной организации, для линейного адреса, сопоставляющегося с 4KiB страницей:
- регистры CR3, биты 12 и выше, указывают на физический адрес 4KiB-выравненной таблицы PML4
- в таблице PML4 биты 39-47 линейного адреса указывают на запись PML4, указывающую на таблицу указателей каталога страниц
- в таблице PDP биты 30-38 линейного адреса указывают на запись PDPT, указывающую на каталог страниц
- в каталоге страниц биты 21-29 линейного адреса указывают на запись PD, указывающую на таблицу страниц
- в таблице страниц биты 12-20 линейного адреса указывают на запись PT, указывающую на кадр 4KiB
- биты 0-11 линейного адреса определяют физический адрес внутри страницы 4KiB
Так как все таблицы выровнены по 4KiB, и физическое адресное пространство с 4-уровневой страничной организацией ограничено 48 битами, всего 36 бит необходимы для представления физического адреса каждой таблицы. Остальные различные записи таблицы страниц хранят метаданные о следующем уровне: присутствует ли он или нет, доступен ли он только для чтения или для записи и чтения и т.д.
Ответ или решение
Вопрос, который вы подняли, касается организации структуры страниц в 64-битной системе и особенностей работы с таблицами страниц (page tables) и их соответствующими записями (page table entries, PTE). Давайте его подробно рассмотрим, отметив ключевые аспекты, чтобы дать четкое понимание.
Структура Таблиц Страниц
В 64-битных архитектурах, таких как x86-64, используется четырехуровневая структура для управления виртуальной памятью. Эта структура включает в себя:
- PML4 (Page Map Level 4)
- PDP (Page Directory Pointer)
- PD (Page Directory)
- PT (Page Table)
Каждый уровень таблицы на самом деле хранит записи, которые содержат адреса следующего уровня таблицы или физического адреса страницы. Эти записи, в свою очередь, имеют свои собственные метаданные.
Как Работают Указатели в Таблицах Страниц
Каждая запись в таблице страниц не является указателем в традиционном смысле. Вместо этого они содержат Fизические адреса следующего уровня или самого блока памяти. Рассмотрим процесс преобразования адресов в более детальном порядке:
-
CR3 Регистратор: Всякий раз, когда процесс начинается, регистратор CR3 указывает на физический адрес базы PML4.
-
Индексация по Разным Уровням: Для преобразования линейного адреса:
- Биты 39-47 используются для доступа к записи PML4, которая ссылается на PDP.
- Биты 30-38 обращаются к PDP, где находится запись, указывающая на PD.
- Биты 21-29 приводят к PD, который указывает на PT.
- Биты 12-20 указывают на PT, которая, в свою очередь, ссылается на физическую страницу.
В этой логике указатели не «указывают» на сами себя. Записи в таблицах содержат ссылки на следующие уровни. Каждый уровень имеет свою независимую таблицу, которая не зависит от других уровней.
Размер Строк Записей
Размер записей варьируется в зависимости от режима работы системы:
- В 32-битных системах (без PAE) каждая запись составляет 32 бита, что позволяет хранить 1024 записи в таблице (4096 байт).
- В 64-битных системах каждая запись составляет 64 бита, позволяя хранить 512 записей в таблице на том же объеме памяти.
Преимущества Структуры
Эта многоуровневая структура позволяет:
- Эффективно использовать память, выделяя физические страницы только при необходимости.
- Применять такие функции, как виртуализация и асинхронный доступ к памяти, что улучшает производительность и безопасность системы.
Заключение
Система организации таблиц страниц в 64-битных архитектурах обеспечивает гибкость и управление памятью, где каждая запись указывает на физическую память или следующую таблицу страниц, но сама таблица страниц не может «указывать» на себя. Системы с несколькими уровнями страниц оптимизируют использование памяти и обеспечивают управление доступом на уровне, необходимом для эффективной работы современных операционных систем.
Эти принципы лежат в основе архитектуры, представленной в документе Intel, и предоставляют критическую основу для глубинного понимания систем управления памятью.