Intel manual: EPT Overview

最近在看这方面的知识点,梳理一遍,也啰嗦部分翻译一下助于自己以后理解。

Intel manual 28.2.1

EPT paging-structure hierarchy
EPT is used when the “enable EPT” VM-execution control is 1. It translates the guest-physical addresses used in VMX non-root operation and those used by VM entry for event injection.

The translation from guest-physical addresses to physical addresses is determined by a set of EPT paging structures.

 

IF CR0.PG = 0, 无客户机页表结构;

IF CR0.PG = 1, 线性地址通过控制寄存器CR3进行翻译

IF “enable EPT” VM-execution control is 1,GPA的标记由CR0.PG决定:

        IF CR0.PG = 0,每一个线性地址都被认为是GPA;

        IF CR0.PG = 1,GPA来源于控制寄存器CR3(包括逻辑处理器存储在内部非架构寄存器中的PDPTE的值)和客户机页表结构的内容(包括由客户页表结构转换线性地址的地址[在页表条目和bit7—SP—是1的其他分页结构条目中])。

              此时IF CR0.PG = 1,LA转换为PA需使用EPTGPA进行多次转换

              假设,例如CR4.PAE = CR4.PSE = 0,则翻译一个32位线性地址操作如下:

              1>线性地址的Bit 31:22是选择一个位于CR3GPA客户机页表目录项。该客户机页表目录项(PDE)的GPA是通过EPT转换以确定客户机PDE的物理地址。

              2>线性地址的Bit 21:12是选择一个位于客户机PDEGPA客户机页表项。该客户页表项(PTE)的GPA是通过EPT转换以确定客户机PTE的物理地址。

              3>线性地址的Bit11:0是位于客户机PTE中的GPA页框中的偏移量。由该偏移量确定的GPA通过EPT的转换,以确定原始线性地址最终转换的物理地址。

 

除了将GPA转换成物理地址外,EPT还指定访问地址时软件的允许权限。不允许的访问尝试成为EPT violations并且会导致VM Exit。

 

只有当这些地址用于访问内存时,处理器才使用EPT转换客户物理地址。此原则意味着以下内容:

1)MOV to CR3指令使用GPA加载CR3,该GPA是否通过EPT转换取决于正在被使用的PAE paging

          —— IF PAE paging没有被使用,该指令不会使用该地址去访问内存并且也不会使它通过EPT进行转换.(IF CR0.PG = 1,在使用线性地址访问的下一个内存上该地址将通过EPT进行转换)

          —— IF PAE paging被使用,该指令从该地址中加载4个页表目录指针表项(PDPTEs)并使该地址通过EPT进行转换。

2)Section 4.4.1定义了指令MOV to CR0和MOV to CR4的执行,它们从CR3中的GPA加载PDPTE, 此类执行会使得该地址通过EPT进行转换。

3)PDPTEs包含了GPAs。加载PDPTE的指令(见上文)不使用这些地址来访问内存,也不会导致它们通过EPT进行转换。PDPTE中的地址将使用该PDPTE的线性地址访问在下一次内存时通过EPT进行转换。

 

补充:PAE Paging(物理地址扩展分页

介绍

PAE Paging可将32-Bit的线性地址转换成最高52位的物理地址,不过受到线性地址宽度的限制,最高可访问的线性地址空间还是4G。PAE Paging使用4个PDPTE寄存器进行地址转换,CR3寄存器保存这4个PDPTE寄存器的物理地址。这样在地址转换时可以使用更多的地址转换结构。

开启条件

首先要通过CPUID指令来查询CPU是否支持PAE Paging,如果CPUID.01H:EDX.PAE [bit 6] = 1表示CPU支持PAE Paging,否则不支持。

其次是CPUID.80000008H:EAX[7:0]表示最高的物理地址宽度,这里MAXPHYADDR最高可达52位,如果MAXPHYADDR<52那么,转换后的物理地址中52:MAXPHYADDR都是0。

CR0.PG = 1, CR4.PAE = 1, and IA32_EFER.LME = 0开启PAE Paging。同样这个设置顺序是有要求的,不能够随意设置,否则会触发#GP异常。

PDPTE寄存器

开启PAE Paging之后,地址转换的顶层结构来源于CPU内部使用4个寄存器,这4个寄存器分别是PDPTE0、PDPTE1、PDPTE2和PDPTE3,每一个寄存器对应1G的地址空间。

开启PAE Paging之后,CR3中保存这叫做“page-directory-pointer table”的物理地址,page-directory-pointer table一共有4项,每一项是一个64位的单元,叫做PDPTE。在特定的时候,CPU会从CR3指定的物理地址中将page-directory-pointer table的4项加载到4个PDPTE寄存器中。

 

参考

《Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3 (3A, 3B & 3C): System Programming Guide》

PAE Paging 参考链接:https://blog.csdn.net/activesys/article/details/16830501

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值