赞
踩
GPA -> HVA -> HPA
三个阶段的地址转换,软件实现效率低。应该
被保存的页目录地址被VMM保存起来,当虚拟机进程被调度出去的时候,CR3中应该
被保存的页目录地址要放回到进程控制块中,这时VMM会截获这个动作并提供之前保存的页目录地址。VMM在CR3寄存器被修改的过程中,偷天换日,将本应该放到CR3中的地址拿走,替换成自己申请的地址,当客户机要从CR3中取回这个地址时替换回去。影子页表的示意图如下,由于每个进程都有自己的地址空间,因此都有一个CR3的内存值,所以影子页表的Hash链表中,一个Node节点对应存放一个进程的页目录地址。影子
)。CR3指向的是进程的一个内存地址空间,所以主机需要为VMX模式下的所有进程,都维护这样一份影子页目录和影子页表,放在hash表中,当进程被调度,页表被加载时,从hash表中找到对应的影子页目录的地址放到CR3中。影子页表通过增加内存维护成本,减少地址转换的路径。有一定效果,但每个进程的页表和页目录的维护成本也不小,因此进一步引入了EPT机制VMCS
的VM-execution control
的EPT-violation
字段为0,页访问出错会触发VM-exit,分下面两种情况:guest-physical address
,CPU对这些地址的访问需要通过EPT转换成主机上的物理地址。EPT地址转换时机就是CPU访问GPA的时侯。为了让客户机的程序感觉不到自己处于客户态,EPT需要支持实模式,保护模式和保护模式下所有的分页模式,所有这些模式下对物理地址的访问,都要触发GPA地址转换。实模式下,进程的所有线性地址都是GPA;保护模式下,进程页表的物理地址,页目录地址,页表地址,这些都是GPA。Q:EPT violation和EPT misconfig都是缺页故障,两者有什么区别吗?
A:从字面意思看,misconfig主要表达的是配置错误,因此当页结构中的entry被写入了违反intel手册规范的值,可能出现misconfig,比如entry中的保留位被设置了就会触发EPT misconfig。还有种情况是内存只允许写不允许读(bit0:0,bit1:1)。写这种内存页会触发EPT misconfig,比如virtio-pci的notify配置空间地址。还有一种是MMIO类型内存的写,会产生EPT misconfig,比如对virtio-pci的common config空间的device_status写数据。
对于violation,它主要就是缺页故障,当内存读写都不被允许时(bit0:0,bit1:0)就会触发,也可以说,缺页故障中,除了misconfig余下的都是violation故障。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。