[Перевод] PCEPTPDPTE
От переводчика. Представляю вашему вниманию перевод поста Майкла Штейла (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 |
Используйте на здоровье.
Клёво, хотя описанное слегка некорректно, и даже комментарий в исходниках VirtualBox неверный! Intel определяет четыре уровня как
PML4, PDPT, PD, PT
, и поэтому записи на этих уровнях именуются соответствено так:
PML4E, PDPTE, PDE, PTE.
Так что EPTPDPTE — это запись третьего уровня во вложенной таблице страниц, т.е. EPT Page Directory Pointer Table Entry. Конечно же, всё это будет ещё более восхитительно, когда в Intel решат, что 48 бит виртуального адреса недостаточно и что необходимо придумать имя для пятого уровня.