По сути, гостевая ОС будет пытаться преобразовать виртуальный адрес в физический адрес, но этот, казалось бы, физический адрес на самом деле не является реальным физическим адресом, поскольку он исходит от VMM / гипервизора, и, следовательно, эти адреса не являются непрерывными адресами, как в случае обычная ОС без ВМ.
Поэтому требуется еще один перевод, чтобы сопоставить физический адрес гостя с реальным адресом машины. Для этого VMM / гипервизор хранит таблицы теневых страниц для сопоставления этих гостевых физических адресов с физическими адресами компьютеров.
Кроме того, аппаратное обеспечение обеспечивает механизм, позволяющий избежать обхода таблицы страниц, предоставляя TLB, но, если вы можете себе представить, эти TLB внутри гостевой системы не должны быть реальным аппаратным TLB, и VMM / гипервизор должен каким-то образом имитировать их. В то же время таблицы теневых страниц можно использовать в качестве TLB для гостя.
Итак, это основная идея таблицы теневых страниц, но, вероятно, это наиболее сложный элемент технологии аппаратной виртуализации. Я упустил много деталей и уловов, которые я тоже не совсем понимаю.
Ниже приведена ссылка, которая рассказывает о некоторых из этих проблем с упрощенными таблицами теневых страниц и о том, как kvm пытается их избежать.
http://lwn.net/Articles/216794/
Еще одна вещь состоит в том, что есть также аппаратная поддержка для этого механизма, и они называются EPT и NPT, поддерживаемые как intel, так и amd.
НТН.