一文看懂影子页表和扩展页表

一文看懂影子页表和扩展页表

作者: cloud3 2021-10-17 19:48:10

云计算

虚拟化 我们知道从intel的80386引入了保护模式后,内存空间分为虚拟地址空间和物理地址空间。后引入页表机制,把虚拟地址送往MMU,MMU查TLB不中的情况下,依次查页表就可以找到对应的物理地址。

[[429331]]

我是cloud3,前段时间有虚拟机出现内存问题,今天借着这个话题给大家介绍一下内存虚拟化,也就是MMU虚拟化。

我们知道从intel的80386引入了保护模式后,内存空间分为虚拟地址空间和物理地址空间。后引入页表机制,把虚拟地址送往MMU,MMU查TLB不中的情况下,依次查页表就可以找到对应的物理地址。

(关于MMU的原理可以先看我的文章-图解MMU)

在引入虚拟化技术后,内存地址空间就变得复杂了,客户机(Guest)和宿主机(Host)都有自己的地址空间。GuestOS本身有虚拟地址和物理地址。HostOS也有虚拟机地址和物理地址。那虚拟机如何访问到物理机上的物理地址呢?这就是今天我们要讨论的内存虚拟化技术。

首先标记几个概念:

  • HPA:Host Physical Address
  • HVA:Host Virtual Address
  • GPA:Guest Physical Address
  • GVA:Guest Virtual Address
  • PDBR:页目录表物理基地址寄存器,X86上叫CR3
  • EPT:扩展页表

ptr:这里用来描述指向某个页表的寄存器

一.内存虚拟化要解决的问题

内存虚拟化实际实现就是MMU虚拟化,要实现GVA -> GPA -> HVA -> HPA,而传统MMU只能实现VA->PA的转换。所以在虚拟化场景下要解决虚拟机里面的进程如何访问物理机上的内存这一问题,也就是GVA->HPA的映射问题。

在硬件辅助内存虚拟化出现之前,这个过程是通过软件实现的,即通过VMM来实现的。最典型的实现方式就是影子页表技术。

二.影子页表

(Shadow page table)

影子页表我用一句话来描述就是:VMM把Guest和Host中的页表合并成一个页表,称为影子页表,来实现GVA->HPA映射。

变为:

影子页表需要实现 GVA -> HPA的转换。如何实现呢?有下面几步:

1,GVA->GPA,VMM层的软件会将guest Page Table本身使用的物理页面设为write protected的,Guest在进行GVA->GPA 时,由于是只读的,导致 VM exit, traps to VMM。(关于VM exit的过程我们在CPU虚拟化时再详解)。

2, GPA -> HVA,这一过程由VMM软件实现的,这个很容易理解,就是通用的malloc。

3, HVA->HPA,这一过程就是我们已知的使用物理MMU完成VMM进程的虚拟内存到物理内存的转换。

4, 把GVA -> HPA,这一路的映射关系记录到页表中,这个页表就是影子页表。

虚拟机页表和影子页表通过一个哈希表建立关联(当然也有其他的关联方式),客户机操作系统把当前进程的页表基址载入PDBR时而VMM将会截获这一特权指令,将进程的影子页表基址载入客户机PDBR,使客户机在恢复运行时PDBR实际指向的是进程对应的影子页表。这样通过影子页表就可以实现真正的内存访问。

影子页表实现非常复杂,需要为每个Guest中的每个进程的Guest PT都维护一个对应的Shadow PT。page fault和vm-exit的数量,也加重了CPU的负担。为了提高效率,各个CPU厂家推出了硬件辅助MMU虚拟化的技术。

三.扩展页表技术/EPT

嵌套页表技术/NPT

从Intel的Nehalem架构开始,EPT(Extended Page Tables)就作为CPU的一个特性加入到CPU硬件中去了。AMD也提供的类似技术叫做NPT,即Nested Page Tables。

硬件层面引入EPTP寄存器,来指向EPT页表基地址。Guest运行时,Guest页表被载入PDBR,而 EPT 页表被载入专门的EPT 页表指针寄存器 EPTP。

GVA->GPA的转换依然是通过查找原来页表完成,而GPA->HPA的转换则通过查找EPT来实现,每个guest VM有一个由VMM维护的EPT。

具体过程

当Guest中进程访问GVA时,CPU首先就要通过PDBR寄存器去找页目录,但是PDBR中存储的地址是GPA,所以要到EPT中进行GPA->HPA的转换,这个转换过程和物理MMU的工作流程相同。

找到了页目录的HPA基地址,再通过GVA中的Directory offset段,就找到页表的VGA了,这个页表VGA再去EPT中进行GPA->HPA的转换,就找到页表VGA的HPA了。

重复上述过程,依次查找各级页表,最终获得该GVA对应的HPA。如果是三级或者四级页表,也是同样的原理。

page fault处理

上面的查表过程是最理想的处处命中情况,那如果有page fault的情况如何处理呢?

如果Guest的页表中没有命中可直接由guest OS处理,不会产生vm-exit。如果在EPT中没有命中,则产生EPT violation异常,这是Host中VMM层的page fault,不需要vm exit,只需要按照Host中的page fault处理就可以了。所以说EPT/NPT MMU解耦了GVA->GPA转换和GPA->HPA转换之间的依赖关系。并且一个VM只需要一套EPT页表,减少了内存开销,维护也比较简单。

四.看图总结

最后我们直观的看看引入虚拟化之后MMU的变化情况:

没有虚拟化:

影子页表:

EPT/NPT:

 

通过上面的对比图,我们应该能清楚的看到MMU虚拟化的整个设计思路。

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/228627.html<

(0)
运维的头像运维
上一篇2025-04-18 09:39
下一篇 2025-04-18 09:41

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注