Имеют ли разные виртуальные машины, работающие на одном VMM, общее гостевое физическое адресное пространство? - PullRequest
1 голос
/ 07 августа 2020

Я помню, как читал о том, как разные виртуальные машины, работающие на одном и том же VMM (очевидно), имеют собственное независимое (гостевое) виртуальное адресное пространство, но все они «совместно используют» одно (гостевое) физическое адресное пространство. То есть, если процесс в VM1 имеет свой виртуальный адрес 0x000a0000, сопоставленный с физическим адресом 0xfffa0000, то никакие процессы VM2 (или любые другие процессы VM1) не могут иметь сопоставленные виртуальные адреса. на физический адрес 0xfffa0000.

Я не могу найти никаких документов, которые заявляют об этом, но я знаю, что указатель расширенной таблицы страниц (EPTP) является аппаратным регистром, что означает, что есть только одна страница таблица, которая может преобразовывать гостевые физические адреса в физические адреса хоста, поэтому не может быть перекрывающихся гостевых физических адресов между различными виртуальными машинами. Однако я также обнаружил, что значение EPTP сохраняется в структуре управления виртуальной машиной (VMCS), поэтому, возможно, после vmexit или vmenter значение EPTP может быть изменено между разными виртуальными машинами?

Короче говоря, я хотел бы знать, могут ли (или должны) разные виртуальные машины совместно использовать одно гостевое физическое адресное пространство. Заранее спасибо!

1 Ответ

1 голос
/ 07 августа 2020

Весь смысл виртуализации состоит в том, чтобы каждой виртуальной машине казалось, что у нее есть машина. Это было бы невозможно, если бы VMM не мог сопоставить одни и те же GPA на нескольких виртуальных машинах. И, конечно же, нельзя запретить гостевой ОС отображать один и тот же GPA на несколько процессов в гостевой системе. Таким образом, для каждой виртуальной машины должен быть отдельный EPTP, который содержит сопоставления GPA и HPA для этой виртуальной машины.

VMM использует отдельную VMCS для каждого VCPU в каждой виртуальной машине, поэтому он может оставить всю виртуальную машину - и состояние c, указывающее на VCPU, на месте в VMCS, включая EPTP, даже во время выполнения другой виртуальной машины. При переключении с одной виртуальной машины на другую VMM загружает другой указатель VMCS. VMM записывает одно и то же значение EPTP во все VMCS для одной виртуальной машины.

...