Как каждый указатель в таблице директорий страниц может указывать на СВОЮ СОБСТВЕННУЮ таблицу директорий страниц?

Вопрос или проблема

Я пытаюсь разобраться в одной вещи. Я понимаю, что, скажем, в 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, используется четырехуровневая структура для управления виртуальной памятью. Эта структура включает в себя:

  1. PML4 (Page Map Level 4)
  2. PDP (Page Directory Pointer)
  3. PD (Page Directory)
  4. PT (Page Table)

Каждый уровень таблицы на самом деле хранит записи, которые содержат адреса следующего уровня таблицы или физического адреса страницы. Эти записи, в свою очередь, имеют свои собственные метаданные.

Как Работают Указатели в Таблицах Страниц

Каждая запись в таблице страниц не является указателем в традиционном смысле. Вместо этого они содержат Fизические адреса следующего уровня или самого блока памяти. Рассмотрим процесс преобразования адресов в более детальном порядке:

  1. CR3 Регистратор: Всякий раз, когда процесс начинается, регистратор CR3 указывает на физический адрес базы PML4.

  2. Индексация по Разным Уровням: Для преобразования линейного адреса:

    • Биты 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, и предоставляют критическую основу для глубинного понимания систем управления памятью.

Оцените материал
Добавить комментарий

Капча загружается...