在一个VMM上运行的不同虚拟机是否共享来宾物理地址空间



我记得读过关于在同一VMM上运行的不同VM(显然(如何拥有自己独立的(来宾(虚拟地址空间,但它们都"共享"一个(来宾(物理地址空间的文章。也就是说,如果VM1中的进程使其虚拟地址0x000a0000映射到物理地址0xfffa0000,则VM2的任何进程(或者VM1的任何其他进程(都不能使其任何虚拟地址映射到物理位置0xfffa0000

我找不到任何说明这一点的文档,但我知道扩展页表指针(EPTP(是一个硬件寄存器,这意味着只有一个页表可以将客户物理地址转换为主机物理地址,因此不同的虚拟机之间不可能有任何重叠的客户物理地址
然而,我还发现EPTP的值保存在虚拟机控制结构(VMCS(中,因此可能在vmexitvmenter时,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中。

相关内容

最新更新