影子页表和EPT

影子页表

不得不承认,一直对影子页表和EPT技术都一知半解,是时候好好的认真的理解了。


先说普通的内存地址转换,首先明确基本知识点。

页表:确定了线性地址和物理地址的转换。

TLB 就是保存页表中对应的线性地址和物理地址的转换,这样的作用是为了加速。


过程:首先CPU会去根据线性地址查找TLB,如果有,则立马得到物理地址;若没有,则进行地址转换 ,并将结果更新到TLB。

所以说CPU并没有说页表一定要和TLB缓存的数据保持一致,若不一致的时候,查找TLB会引发 LTB Miss,然后会通过 TLB fill去修正TLB使之与页表保持一致。


之前,一直对页表这个词不太理解,现在可以这么理解吧,有了它,就可以通过线性地址找到物理地址,而这个页表是可以被用户更改,但是是给CPU查找的。


然后我们说下VTLB,这是基于VT_X技术优化。这里VM中的页表就不直接控制着线性地址和物理地址的转换了,即CR3寄存器指向的不是页表,而是影子页表了。所以呢,地址转换就通过的是影子页表和TLB来共同控制。

既然不是通过页表来查找地址了,那么每次修改其页表,也就不会引发VM_Exit了。 所以呀,这里的页表和影子页表之间其实是不太同步的,有两种情况:

1,VM页表比影子页表有更多的访问权限,比如吧,VM页表中记录着线性地址和物理地址的对应关系,而影子页表不存在此关系,那么VM对线性地址的访问将导致页面故障,这里注意,是访问,不是修改,其实修改是不会产生页面故障的。VMM会捕获这个异常,然后根据VM页表来修正影子页表。

2,如果影子页表的关系更多,而VM页表被修改之后关系很少呢。此时,VM需要执行INVLPG指令或重装CR3寄存器来刷新TLBVM在执行INVLPG指令或重装CR3寄存器时将导致VM exit,使VMM有机会根据VM的页表来修改影子页表,从而修补这种不一致性。发现没,其实影子页表的修改还是通过VM页表来作为参照的。


-------------

对于A位,只要VMM不先于VM建立线性地址到物理地址的映射关系,就可以确保捕获客户对内存的访问,进而有机会确保影子页表项和客户页表项在A位上的一致。因为,当客户首次访问某个线性地址时,由于影子页表中没有该线性地址到物理地址的对应关系,将导致一次页面故障,VMM可以捕获该故障,在影子页表中建立线性地址到物理地址的对应关系,并将客户页表中相应项的A位置1

对于D位,VMM在影子页表中建立线性地址到物理地址间的映射之初,可以将页置为只读,这样当VM对该页进行写操作时,将导致页面故障,使VMM获得控制,进而有机会确保影子页表项和VM页表项在D位上的一致


EPT

EPTVMM控制,并且仅在处理器工作于非根模式时才参与地址转换。采用EPT后,客户在读写CR3和执行INVLPG指令时不会导致VM exit,并且由于客户页表结构自身导致的页故障也不会导致VM exit因此极大地提高了内存虚拟化的效率,简化了内存虚拟化的实现。 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值