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