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

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


Written by Grigory Rechistov in Uncategorized on 27.10.2015. Tags: ept, nested paging, translation, virtualization, vt-x,


Copyright © 2018 Grigory Rechistov