我记得读过关于在同一VMM上运行的不同VM(显然(如何拥有自己独立的(来宾(虚拟地址空间,但它们都"共享"一个(来宾(物理地址空间的文章。也就是说,如果VM1
中的进程使其虚拟地址0x000a0000
映射到物理地址0xfffa0000
,则VM2
的任何进程(或者VM1
的任何其他进程(都不能使其任何虚拟地址映射到物理位置0xfffa0000
。
我找不到任何说明这一点的文档,但我知道扩展页表指针(EPTP
(是一个硬件寄存器,这意味着只有一个页表可以将客户物理地址转换为主机物理地址,因此不同的虚拟机之间不可能有任何重叠的客户物理地址
然而,我还发现EPTP
的值保存在虚拟机控制结构(VMCS
(中,因此可能在vmexit
或vmenter
时,EPTP
的值可以在不同的VM之间更改?
简而言之,我想知道不同的虚拟机是否可以(或必须(共享一个来宾物理地址空间
提前感谢!
虚拟化的全部目的是让每个虚拟机都觉得自己有一台机器。如果VMM不能在多个VM中映射相同的GPA,那么这是不可能的。当然,您不能阻止来宾操作系统将同一个GPA映射到来宾中的多个进程中。因此,每个虚拟机都必须有一个单独的EPTP,其中包含该虚拟机的GPA到HPA映射。
VMM为每个VM中的每个VCPU使用单独的VMCS,因此即使在另一个VM正在执行时,它也可以在VMCS中保留所有VM和VCPU特定的状态,包括EPTP。当从一个VM切换到另一个VM时,VMM加载不同的VMCS指针。VMM将相同的EPTP值写入单个VM的所有VMS中。