Я помню, как читал о том, как разные виртуальные машины, работающие на одном и том же VMM (очевидно), имеют собственное независимое (гостевое) виртуальное адресное пространство, но все они «совместно используют» одно (гостевое) физическое адресное пространство. То есть, если процесс в VM1
имеет свой виртуальный адрес 0x000a0000
, сопоставленный с физическим адресом 0xfffa0000
, то никакие процессы VM2
(или любые другие процессы VM1
) не могут иметь сопоставленные виртуальные адреса. на физический адрес 0xfffa0000
.
Я не могу найти никаких документов, которые заявляют об этом, но я знаю, что указатель расширенной таблицы страниц (EPTP
) является аппаратным регистром, что означает, что есть только одна страница таблица, которая может преобразовывать гостевые физические адреса в физические адреса хоста, поэтому не может быть перекрывающихся гостевых физических адресов между различными виртуальными машинами. Однако я также обнаружил, что значение EPTP
сохраняется в структуре управления виртуальной машиной (VMCS
), поэтому, возможно, после vmexit
или vmenter
значение EPTP
может быть изменено между разными виртуальными машинами?
Короче говоря, я хотел бы знать, могут ли (или должны) разные виртуальные машины совместно использовать одно гостевое физическое адресное пространство. Заранее спасибо!