图取自这里。
Q1。似乎EPT表保留了guest页表的完整副本,使其成为4级页表。那是对的吗?
Q2。是不是有点浪费空间?
Q3。究竟什么是 EPT 违规?这是否意味着:guest 正在尝试访问一个新的 guest 虚拟地址 (gVA),EPT 表还没有记录,所以它陷入 VMM,并将两个 gVA 和 gPA 条目添加到 EPT 表中。那是对的吗?
图取自这里。
Q1。似乎EPT表保留了guest页表的完整副本,使其成为4级页表。那是对的吗?
Q2。是不是有点浪费空间?
Q3。究竟什么是 EPT 违规?这是否意味着:guest 正在尝试访问一个新的 guest 虚拟地址 (gVA),EPT 表还没有记录,所以它陷入 VMM,并将两个 gVA 和 gPA 条目添加到 EPT 表中。那是对的吗?
EPT 将客户物理地址映射到主机物理地址。
在引入 EPT(对 GPA<-->HPA 的硬件支持)支持之前,Hypervisor 必须手动维护访客页面表映射条目的卷影副本。实际访客页面表中的PTE
条目会降低access permissions
,即如果它的实际权限是写,它会降低到读。这将导致page fault
Hypervisor 拦截。
Hypervisor 将依次更新相应的影子页表条目。这整个过程是狗屎慢。这就是引入 EPT 的原因,以便 GPA 到 HPA 的转换由硬件本身完成,速度更快。
所以现在回答你的第一个问题——它没有。如果你想在没有 EPT 支持的情况下虚拟化一个操作系统,除了来宾操作系统的页表之外,你仍然需要维护一个额外的影子页表结构。
Q3 -Guest Virtual Address(GVA)
硬件通常通过遍历客户操作系统中的页表来转换,就像在本机硬件上运行的操作系统中所做的那样。一旦我们得到Guest Physical Address(GPA)
这个翻译之后,EPT 就会出现。现在硬件转换GPA
为真正知道HPA
的地址。HPA
CPU
当 EPT 没有 aguest physical address(GPA)
到的现有映射时,会发生 Ept 违规 VMExit host physical address(HPA)
。这会导致 vmExit 到 VMM,然后将创建一个新映射。(Ept 违规与正常操作系统中的页面错误相同,唯一的区别是正在创建的映射类型。)
我的2美分,如果我记错了,请纠正我。
Q1:不,EPT 存储 GPA 到 HPA 的映射。使用 EPT,访客页表仅在访客中维护。
Q2:没有 EPT,VMM 应该改为维护影子页表。所以我不认为EPT浪费空间。
Q3:EPT 存储 GPA 到 HPA 的映射。在这种情况下,GPA 到 GVA 的映射在来宾中维护。
我的小贡献,迟了一年……
Q1:是的,EPT 就像一个 mmu 转换树(4 级或更少),但它将 GPA 转换为 HPA(访客物理地址到主机物理地址)。
Q2:对于虚拟化,翻译树(shadow 或 EPT)是必要的,所以不浪费空间。硬件翻译比影子一(软件)更快,并防止 vmexit 减慢进程。
Q3: 是的,EPT 违规就像页面错误一样发生,但访问违规也会发生。EPT 允许对页面访问(读、写、执行)进行精细控制。