术语

EPT基本概述
EPT (extended page-table)机制提供了对GOS物理空间的虚拟化,通过EPT机制实现GOS物理地址空间的隔离。当使能EPT后,GOS使用的物理地址GPA并不是真实的内存物理地址,而是要通过EPT转换后才能访问真正的物理地址。EPT的页表数据结构与64位下的页表数据类似的,但是部分内容还是有不同,特别是页表格式。4K页表格式如下:

当没有使能页模式时,CR0.PG = 0,GPA与GVA是一致的。当使能页模式时,CR0.PG = 1,GPA是GVA通过guest paging structures(GOS的页目录页表)转换而来的。
EPT 异常及处理
EPT异常包括EPT violation和EPT misconfiguration两种。
EPT misconfiguration是指访问的EPT表项内容是现在体系不支持的内容。
EPT violation是指不产生EPT misconfiguration时,包括访问EPT 的页表项表示的页是不存在的(页表项bits 2:0全为0)、访问权限与页表项中设置的访问权限不一致。
如果设置了VM-execution control 中的EPT-violation #VE,EPT violation会转化为虚拟异常,而不是导致VM退出,执行虚拟异常对应的IDT中记录的异常异常处理程序。虚拟异常的向量号是20,简写#VE,仅仅在VMX 的non-root态是才会产生。
当前VMM对EPT异常的处理有两种情况:
- 第一种是guest本身缺页导致的页故障异常#PF由guest自身处理,该功能可以通过设置VMCS的页故障屏蔽码和页故障匹配码字段实现。
- 第二种是guest映射的内存空间,但EPT未映射,则会产生EPT violation异常,EPT 相关异常由VMM接管,VMM会把虚拟机挂起。
产生EPT异常的线性地址和GPA地址可通过VMCS的0x0000640a和0x00002400字段获取。EPT异常原因可通过0x00006400字段获取,相关异常信息域如下图:
