Pull to refresh

PCEPTPDPTE

Reading time 3 min
Views 13K
Original author: Michael Steil

От переводчика. Представляю вашему вниманию перевод поста Майкла Штейла (Michael Steil) http://www.pagetable.com/?p=308. В нём затрагиваются вопросы сомнительной практики именования сущностей в спецификациях вычислительных архитектур.
Эта заметка очень хорошо отражает ситуацию с именами, возникающую в процессе длительной эволюции документации, и моё собственное недоумение, когда я впервые встретился с этими понятиями.
Комментарии к тексту размещены во всплывающих подсказках.

И ещё одна запись в таблицу страниц.

Мне нравится Intel. Я уже рассказывал, как Intel запутала номенклатуру регистров x86, расширив регистр A до AX (A extended — A расширенный), а затем расширив последний до EAX (extended A extended — расширенный A расширенный). Затем AMD взяла и расширила регистр ещё раз, дав ему более осмысленное имя: RAX.

Я также рассказал ранее, как Intel запутала именование элементов таблицы страниц x86. В i386 появились таблицы страниц (PT, первый уровень) и директории страниц (PD, второй уровень); в Pentium Pro добавили указатели директорий страниц (PDP, уровень 3). Затем AMD взяла и расширила иерархию ещё раз, дав новому элементу более осмысленное имя: карта страниц четвёртого уровня (PML4).

С пришествием виртуализации, обе компании — Intel и AMD — для устранения медленной программной трансляции теневых таблиц страниц добавили аппаратную поддержку вложенных (nested) таблиц страниц; таким образом, гость имеет 4 уровня, а хозяин — ещё четыре.

AMD назвала эту систему — сюрприз! — вложенные таблицы страниц, NPT. Intel была более креативна. С историей расширений архитектур, они вновь использовали букву E: расширенная таблица страниц, EPT.

Давайте попрактикуемся. PD — это таблица директорий, PDE — запись в таблице директорий (PD entry). Её также можно назвать PDPTE (a page directory pagetable entry) — директория страниц в таблице страниц, или же PTE второго уровня, так как, в конце концов, все эти записи на всех уровнях иерархии являются PTE, ведь они имеют одинаковый формат. PDPPTE — это запись-указатель на директорию в таблице страниц, или запись третьего уровня.

Если мы используем вложенные страницы, ой, простите, — расширенные страницы — на системе от Intel, то придётся добавлять приставку EPT ко всем предыдущим аббревиатурам. Так, EPTPTE — это запись первого уровня, EPTPDPTE — запись второго уровня, которую не стоит путать с EPTPDPPTE, которая находится на третьем уровне; и на четвёртом уровне у нас EPTPML4PTE.

Дальше — лучше. Oracle/Sun/Innotek VirtualBox использует венгерскую нотацию для имён переменных, так что «P» будет добавлено для указателей, и «C» — для констант. Теперь, как бы вы назвали переменную, которая хранит указатель на константу — запись второго уровня EPT?

Конечно же, PCEPTPDPTE:

/** Pointer to a const EPT Page Directory Pointer Entry. */
typedef const EPTPDPTE *PCEPTPDPTE;


Я размышлял обо всём этом некоторое время, и подумывал даже запатентовать свою блестящую идею; однако же вот она, не закрытая патентом и бесплатная для всех: номенклатура Майкла для таблиц страниц Intel/AMD:
Новое имя Описание Старое имя
P4 страница 4 уровня таблицы страниц PML4
P3 страница 3 уровня таблицы страниц PDP
P2 страница 2 уровня таблицы страниц PD
P1 страница 1 уровня таблицы страниц PT
P4E запись 4 уровня таблицы страниц PML4E/PML4PTE
P3E запись 3 уровня таблицы страниц PDPE/PDPPTE
P2E запись 2 уровня таблицы страниц PDE/PDPTE
P1E запись 2 уровня таблицы страниц PTE
NP4 страница 4 уровня вложенной таблицы страниц EPTPML4
NP3 страница 3 уровня вложенной таблицы страниц EPTPDP
NP2 страница 2 уровня вложенной таблицы страниц EPTPD
NP1 страница 1 уровня вложенной таблицы страниц EPTPT
NP4E запись 4 уровня вложенной таблицы страниц EPTPML4E/EPTPML4PTE
NP3E запись 3 уровня вложенной таблицы страниц EPTPDPE/EPTPDPPTE
NP2E запись 2 уровня вложенной таблицы страниц EPTPDE/EPTPDPTE
NP1E запись 1 уровня вложенной таблицы страниц EPTPTE

Используйте на здоровье.

Комментарий к оригинальной статье
Автор: Tom

Клёво, хотя описанное слегка некорректно, и даже комментарий в исходниках VirtualBox неверный! Intel определяет четыре уровня как
PML4, PDPT, PD, PT

, и поэтому записи на этих уровнях именуются соответственно так:
PML4E, PDPTE, PDE, PTE.

Так что EPTPDPTE — это запись третьего уровня во вложенной таблице страниц, т.е. EPT Page Directory Pointer Table Entry. Конечно же, всё это будет ещё более восхитительно, когда в Intel решат, что 48 бит виртуального адреса недостаточно и что необходимо придумать имя для пятого уровня.
Tags:
Hubs:
+27
Comments 3
Comments Comments 3

Articles