虚拟化中的虚拟地址与物理地址的映射——EPT机制

这篇具有很好参考价值的文章主要介绍了虚拟化中的虚拟地址与物理地址的映射——EPT机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

​ 当 secondary processor-based VM-execution control 字段 “enable EPT” 为 1 时,启用 EPT ( Extended Page Table,扩展页表)机制

​ 开启 EPT 机制后 VMM 需要建立 EPT 页表结构,通过在 EPTP ( Extende Page Table Pointer ) 中提供 EPT 页表结构的指针值,为每个 VM 准备不同的 EPT 页表结构或在同一个 EPT 页表结构中准备不同的页表项

1. GPA (guest-physical address) 64位宽

​ guest 软件使用的物理地址,不是真正的物理地址。启用 EPT 机制后,VM 有自己独立的 guest-physical address 空间,每个 VM 之间的 GPA 空间互不干扰。

​ 启用分页时,guest 软件的线性地址首先转换为 GPA,最后 GPA 必须通过 EPT 转换为最终的 HPA

1)有效的GPA值

​ 当前 VMX 架构实现了最高48位有效的GPA值 (bits47:0)。x86/x64 体系下最高可实现 52 位的物理地址。实际 GPA 值宽度与 MAXPHYADDR 值相关

  1. CR3 的 bits 63:N (N= MAXPHYADDR) 是保留位
  2. EPTP 字段 的 bits 63:N (N= MAXPHYADDR) 是保留位。
  3. guest paging structure 里每个表项的 bits 63:N (N = MAXPHYADDR) 是保留位

2)GPA的产生

  1. 由 guest-linear address 转换而来 ( guest 未分页时 guest-linear address 直接等于 GPA )

    32 位分页模式下的线性地址转换为 32 位物理地址,则 GPA 高 32 位补为 0。实模式下线性地性为 20 位(物理地址),则 GPA 的 bits 63:20 则补为 0 值

  2. 不是由guest-linear address转换而来(执行MOV to CR3指令,或者访问guest paging structure页表项)

2. HPA (host-physical address)

​ 物理平台上的地址。未启用 EPT 机制时,guest 软件的物理地址是 HPA。启用 EPT 机制时,guest 软件的物理地址是 GPA,而 host 软件的物理地址是 HPA。VMM 软件使用的是 HPA

与这两种物理地址相对应的页转换表结构如下:

3. guest paging-structure

​ 存在于 guest 端,是 x86/x64 体系开启分页机制下的产物,用来将线性地址转换为物理地址。但在 guest 中,线性地址通过 guest paging-structure 转换为 guest-physical address,而不是真正的平台物理地址

1)guest 的分页模式

x64(CRO.PG=1 时):

  1. 当CR4.PAE = 0时,guest使用32位分页模式。当CR4.PSE =1,并且MAXPHYADDR值大于等于40时,允许在4M页面上使用40位的物理地址
  2. 当IA32_EFER.LMA=0,并且CR4.PAE=1时,guest使用PAE分页模式
  3. 当IA32_EFER.LMA= 1,并且CR4.PAE=1时,guest使用IA-32e分页模式

​ guest 的线性地址根据上面的分页模式转换 guest-physical address;当 guest 使用 PAE 分页模式,并且启用 EPT 机制时,在 VM-entry 时会加载 4 个 PDPTE 字段

2)引发 GPA 转换 HPA

  1. guest 进行内存访问,包括读写访问及执行访问
  2. guest 使用 PAE 分页模式加载 PDPTE,包括下面的途径:
    • 执行 MOV to CR3 指令更新 PDPT 基址 (CR3 指向 PDPT)
    • 执行 MOV to CRO 指令修改了 CRO.CD,CRO.NW 或者 CRO.PG 位,从而引起加载 PDPTE
    • 执行 MOV to CR4 指令修改了 CR4.PAE,CR4.PSE,CR4.PGE 或者 CR4.SME 位,从而引起加载 PDPTE
  3. 在 guest-linear address 转换为 guest-physical address 的过程中,处理器访问 guestpaging structure 表项内的地址,它们属于 GPA

3)guest分页机制下GPA的转换

​ 分页机制下,完成整个 guest 访问内存操作会引发一系列的 GPA 转换 HPA 过程。假设 guest 使用 IA-32e 分页模式 (IA32_EFER.LMA = 1,CR4.PAE = 1,CRO.PG =1 ),并且使用 4K 页面

完成这个内存访问操作一共需要进行 5 次 GPA 到 HPA 的转换(N=MAXPHYADDR)

  1. CR3 寄存器的 bits N-1:12 提供 PML4T 基址。在定位 PML4T 时需要对 PML4T 基址进行 GPA 转换。成功转换 HPA 后得到 PML4T 的物理地址,再由 PML4E index 查找 PML4E
  2. PML4E 的 bits N-1:12 提供 PDPT 基址。在定位 PDPT 时需要对 PDPT 基址进行 GPA 转换。在成功转换 HPA 后得到 PDPT 的物理地址,再由 PDPTE index 查找 PDPTE
  3. PDPTE 的 bits N-1:12 提供 PDT 基址。在定位 PDT 时需要对 PDT 基址进行 GPA 转换。在成功转换 HPA 后得到 PDT 的物理地址,再由 PDE index 查找 PDE
  4. PDE 的bits N-1:12 提供 PT 基址。在定位 PT 时需要对PT 基址进行 GPA 转换。在成功转换 HPA 后得到 PT 的物理地址,再由 PTE index 查找 PTE
  5. PTE 的 bits N-1:12 提供 4K page frame 基址。这个 page frame 基址加上 guest-linear address 的 offset 值 (bits 11:0) 得到目标 GPA 值。处理器将这个 GPA 转换为 HPA 得到最终的物理地址,从而完成 guest 内存的访问

虚拟化中的虚拟地址与物理地址的映射——EPT机制

​ 在这一系列的 GPA 转换过程中,任何一个环节都可能会产生 EPT violation 或者 EPT misconfiguration 而导致 VM-exit 发生;也可能由于 guest paging structure 而引发 guest 产生 #PF 异常,从而使得 guest 处理 #PF 异常处理例程或者由于 #PF 异常直接或者间接导致 VM-exit

总结:

  1. 当 guest 使用 32 位分页模式时,guest 的内存访问操作需要 3 次 GPA 转换。CR3 寄存器内的 PDT 基址需要进行 GPA 转换,PDE 内的 PT 基址需要进行 GPA 转换,以及合成的 GPA 需要进行转换

  2. 当 guest 使用PAE分页模式时,guest 的内存访问操作同样需要 3 次 GPA 转换。PDPTE 寄存器内的 PDT 基址需要进行 GPA 转换, PDE 内的 PT 基址需要进行 GPA 转换,以及合成的 GPA 需要进行转换。

    在 PAE 分页模式下,guest 执行 MOV to CR3 指令更新 CR3 寄存器 (也包括更新 CRO 或 CR4 寄存器某些控制位) 引发对 PDPTE 的加载。因此,加载 PDPTE 表项时也会进行 GPA 的转换。

4. EPT paging-structure

​ 这个页表结构只能由 VMM 进行设置,将 GPA 转换为 HPA。guest 软件不知道它的存在,即 guest 软件不能设置 EPT paging-structure
​ 查询 IA32_VMX_EPT_VPID_CAP 寄存器的 bit 6 来确定是否支持 4 级页表结构,为 1 时指示 EPT 支持 4 级页表结构。每个 EPT 页表大小为 4K,每个 EPT 页表项为 64 位宽
虚拟化中的虚拟地址与物理地址的映射——EPT机制

  1. EPT PML4T (EPT Page Map Level-4 Table) ,表项为 EPT PML4E。
  2. EPT PDPT (EPT Page Directory Pointer Table),表项为 EPT PDPTE。
  3. EPT PDT (EPT Page Directory Table) ,表项为 EPT PDE。
  4. EPT PT (EPT Page Table) ,表项为 EPT PTE。

EPT支持三种页面:

  1. lG页面,IA32_VMX_EPT_VPID_CAP[17] = 1 时处理器支持 1G 页面。PDPTE 的 bit7 允许置 1 使用 1G 页面
  2. 2M页面,当IA32_VMX_EPT_VPID_CAP[16] = 1时处理器支持 2M 页面,PDE 的 bit7 允许置 1 使用 2M 页面
  3. 4K页面,PDPTE[7] = PDE[7] = 0时使用 4K 页面,PTE 提供 4K 物理页面地址

5. EPTP(Extended Page Table Pointer 扩展页表指针)

​ 提供 EPT 页表结构顶层的 PML4T 物理地址,即 EPT4TA (EPTP[N-1:12]),这个物理地址属于 HPA

虚拟化中的虚拟地址与物理地址的映射——EPT机制

  1. bit 2:0:设置 EPT paging structure 使用的内存类型,UC(uncacheable:0);WB(writeback:6);EPTP 所支持内存类型可从IA32_VMX_EPT_VPID_CAP 寄存器 bit 8与bit 14查询
  2. bit 5:3:设置 EPT 页表的 walk 长度,即访问 EPT 页表的级数,必须为 3(表示要经过 4 级页表的 walk),EPT 支持 4 级 EPT 页表可从 IA32_VMX_EPT_VPID_CAP 寄存器 bit 6 查询
  3. bit 6:EPT 页表项的 dirty 与 accessed 标志开启位,当 IA32_VMX_EPT_VPID_CAP[21]=1 时,处理器支持 EPT 的 dirty 与 accessed标志位,当 EPTP[6] =1 时将启用 EPT 的 dirty及 accessed 位,EPT 页表项的 bit 8与bit 9 被视为 accessed 与 dirty 标志位
  4. bits N-1:12:PML4T 的物理地址 (host-physical address) 值。如,当 MAXPHYADDR = 36 时,EPTP 的 bits 35:12 是 PML4T 地址值, bits 63:36 是保留位。

6. 4K页面下的EPT页表结构

4K 页面下,GPA 分为:

  1. PML4E index (bits 47:39) ,用于在 PML4T 中索引查找 PML4E
  2. PDPTE index (bits 38:30),用于在 PDPT 中索引查找 PDPTE
  3. PDE index (bits 29:21) ,这个 index 值用于在 PDT 中索引查找 PDE
  4. PTE index (bits 20:12) ,这个 index 值用于在 PT 中索引查找 PTE
  5. Offset(bits11:0),这个 offset 值用于在 4K 页面中定位最终的物理地址

GPA 转换到 HPA 需要经过 4 级 EPT 页表结构 (walk 次数为 4)

虚拟化中的虚拟地址与物理地址的映射——EPT机制

GPA->HPA 的查表转换过程:

  1. 在 PML4T base + PML4E index * 8 中找到 PML4E。PML4E 的 bits N-1:12 提供下一级 PDPT 基址的 bitsN-l:12 位,低 12 位补为 0值
  2. 在 PDPT base + PDPTE index * 8中找到 PDPTE。PDPTE 的 bits N-1:12 提供下一级 PDT 基址的 bitsN-1:12 位,低 12 位补为 0 值
  3. 在 PDTbase + PDEindex * 8 中找到 PDE。PDE 的 bitsN-1:12 提供下一级PT基址的 bitsN-1:12 位,低 12 位补为 0 值
  4. 在 PTbase + PTEindex * 8 中找到 PTE。PTE 的 bitsN-1:12 提供 4K 页面的 bitsN-1:12 位,低 12 位补为 0 值
  5. 这个 4K 页面基址加上 GPA 的 offset 值 (bits 11:0) 得到最终的 HPA 值,完成 GPA 的转换

虚拟化中的虚拟地址与物理地址的映射——EPT机制文章来源地址https://www.toymoban.com/news/detail-825304.html

7. 参考

  • 《x86_x64体系探索及编程(邓志)》
  • 《处理器虚拟化技术(邓志)》

到了这里,关于虚拟化中的虚拟地址与物理地址的映射——EPT机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VM虚拟化——物理机迁移至虚拟化

    VMware vCenter Converter Standalone 【安装向导】  【最终用户专利协议】    【最终用户许可协议】  【安装位置】   【安装类型】默认本地安装 【用户体验设置】   【准备安装】 【转换机器】 【源主机】 填ip、用户名和密码  最好是用administrator的账号,不然可能权限不足。

    2024年01月25日
    浏览(33)
  • 【KVM虚拟化】· KVM中的网络

      目录 🍎虚拟机的网络模式 🍒网络配置文件 🍒virsh查看命令 🍎基于NAT的虚拟网络 🍎基于网桥的虚拟网络 🍎基于隔离的虚拟网络     🦐博客主页:大虾好吃吗的博客     🦐专栏地址:KVM虚拟化专栏 基于NAT(Network Address Translation)的虚拟网络 基于网桥(Bridge)的虚拟

    2024年02月06日
    浏览(55)
  • 云计算——虚拟化中的网络架构与虚拟网络(文末送书)

    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。  公众号:网络豆  座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录  前期回顾 前言 一.网卡虚拟化 1.网卡虚拟化方法: (1)软件网卡虚拟化:  (2)硬件网卡虚拟化 二.虚

    2024年02月11日
    浏览(31)
  • Windows 虚拟地址 到底是如何映射到 物理地址 的?

    我发现有很多的 .NET程序员 写了很多年的代码都没弄清楚什么是 虚拟地址 ,更不用谈什么是 物理地址 以及Windows是如何实现地址映射的了?这一篇我们就来聊一聊这两者之间的联系。 怎么去找 虚拟地址 呢?相信很多朋友都知道 应用程序 用的是虚拟地址,所以从应用程序中

    2024年02月11日
    浏览(33)
  • 容器与虚拟化技术在云计算环境中的集成与运维实践

    作者:禅与计算机程序设计艺术 云计算是一种新型的分布式系统的计算机资源,其中涉及到的硬件设备,网络组件,存储设备都由云服务商提供并按需动态分配给用户,用户只需要关注业务逻辑的开发,部署和运行。 由于云计算平台的高度动态性,容器技术和虚拟机技术可

    2024年02月08日
    浏览(38)
  • 详谈数据中心网络中的四种虚拟化技术:VXLAN、NVGRE、STT和SPBM

      在现代的数据中心网络中,虚拟化技术被广泛应用以提供更高的可扩展性、灵活性和效率。数据中心网络虚拟化允许多个虚拟网络在共享的物理基础设施上运行,使得网络资源的管理更为简单和高效。本文将详细介绍数据中心网络中的四种不同类型的虚拟化技术:VXLAN、N

    2024年02月10日
    浏览(34)
  • 云计算虚拟化技术与开发-------虚拟化技术应用第一章内容(虚拟化技术概念、虚拟化特征、虚拟化目的、半虚拟化和全虚拟化特点和区别、虚拟化实现的三种结构的特点和区别)

    目录 虚拟化技术第一章主要内容 虚拟化技术的概念: 虚拟化的特征:         虚拟化的目的: 虚拟化与云计算的关系: 半虚拟化和全虚拟化的特点和区别:  虚拟化实现的三种结构的特点和区别:         虚拟化(Virtualization)是把物理资源转变为逻辑上可以管理

    2024年02月03日
    浏览(41)
  • 云计算基础-计算虚拟化-内存虚拟化

    内存在物理上是由内存卡提供的,也就是我们俗称的内存条,内存条提供了物理内存。 在物理内存之上还有虚拟内存,虚拟内存操作系统给程序分配的一段连续的内存,属于逻辑上的概念。 虚拟内存和物理内存之间会有一个映射关系,这个映射关系我们称之为页表,通过页

    2024年02月20日
    浏览(42)
  • 什么是网络虚拟化 网络虚拟化简介

    这个概念产生的比较久了,VLAN,VPN, VPLS等 都可以归为网络虚拟化的技术。近年来,云计算的浪潮席卷IT界。几乎所有的IT基础构架都在朝着云的方向发展。在云计算的发展中,虚拟化技术一直是重要的推动因素。作为基础构架,服务器和存储的虚拟化已经发展的有声有色,

    2024年02月05日
    浏览(41)
  • 云计算基础-计算虚拟化-CPU虚拟化

    在CPU的工作原理中,CPU有不同的指令集,如下图,CPU有4各指令集:Ring0-3,指令集是在服务器上运行的所有命令,最终都会在CPU上执行,但是CPU并不是说所有的命令都是一视同仁的,它会把命令分为不同的指令集 Ring0指令集称之为内核态指令集,改啊指令集里面啊运行的主要

    2024年02月20日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包