内存虚拟化有两种类型:基于软件的内存虚拟化和硬件辅助的内存虚拟化。

因为虚拟化引入了额外级别的内存映射,所以 ESXi 可以跨所有虚拟机来管理内存。虚拟机的一些物理内存可能映射到共享页面或未映射或换出的页面。

主机执行虚拟内存管理时无需了解客户机操作系统,也不会干涉客户机操作系统自身的内存管理子系统。

每个虚拟机的 VMM 保持了从客户机操作系统的物理内存页到基础计算机上物理内存页的映射。(VMware 将基础主机物理页称为“计算机”页,将客户机操作系统的物理页称为“物理”页。)

每个虚拟机均有连续的可寻址物理内存空间,该空间从零开始。每个虚拟机使用的服务器上的基础计算机内存不一定是连续的。

对于基于软件的内存虚拟化和硬件辅助的内存虚拟化,客户机虚拟到客户机物理地址由客户机操作系统管理。管理程序仅负责将客户机物理地址转换为计算机地址。基于软件的内存虚拟化将合并软件中客户机的虚拟到计算机地址,并将其保存在由管理程序管理的卷影页表中。硬件辅助的内存虚拟化将利用硬件设施生成具有由管理程序维护的客户机页表和嵌套页表的组合映射。

该图说明了 ESXi 如何实施内存虚拟化。

图 1. ESXi 内存映射


此图说明了如何实施内存虚拟化。

  • 方框表示页,而箭头表示不同的内存映射。

  • 从客户机虚拟内存到客户机物理内存的箭头表示客户机操作系统中的页表所保持的映射。(未显示 x86 架构处理器从虚拟内存到线性内存的映射。)

  • 从客户机物理内存到计算机内存的箭头表示由 VMM 保持的映射。

  • 虚线箭头表示从客户机虚拟内存到计算机内存的映射,该映射也由 VMM 保持。运行虚拟机的基础处理器使用卷影页表映射。