PCEPTPDPTE
Запостил эту статью на Хабре http://habrahabr.ru/post/269295/, но пусть и тут полежит.
Перевод поста Майкла Штейла (Michael Steil) http://www.pagetable.com/?p=308. Очень жизненно.
И ещё одна запись в таблицу страниц (блог называется page table).
Мне нравится Intel. Я уже рассказывал, как Intel запутала номенклатуру регистров x86, расширив регистр A до AX (A extended - A расширенный), а затем расширив последний до EAX (extended A extended - расширенный A расширенный). Затем AMD взяла и расширила регистр ещё раз, дав ему более осмысленное имя: RAX.
Я также рассказал ранее, как Intel запутала именование элементов таблицы страниц x86. В i386 появились таблицы страниц (PT, уровень 1) и директории страниц (PD, уровень 2); в 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 |
Используйте на здоровье.