内存虚拟化技术在操作系统原来的机器地址和虚拟地址之间新增了一个内存虚拟化层,用来表示这段连续的“物理”地址空间。内存地址的层次由两层向三层的转变,使得原来的存储管理单元(memory management unit,MMU)失去了作用,因为传统的MMU只能完成一次虚拟地址(virtual address,VA)到物理地址(physical address,PA)的映射(VA→PA),但在虚拟机环境下,经过MMU转换所得到的“物理地址”已经不是真正硬件的机器地址。如果需要得到真正的物理地址,必须由虚拟机监视器(VMM)介入,再经过一次从物理地址到机器地址(machine address,MA)的映射(PA→MA),方能得到计算机的机器地址。
实现内存虚拟化的方式主要有两种:影子页表(shadow page table)技术和硬件辅助技术。影子页表技术为客户机操作系统的每个进程页表,维护一个“影子页表”,并将合成后的映射关系(PA→MA)写入这个“影子页表”中,当客户机访问内存时,真正被装入宿主机MMU的是客户机当前页表所对应的影子页表,从而实现了由客户机虚拟地址到机器地址的直接转换。硬件辅助技术实现内存虚拟化的代表有超微半导体公司(AMD)的NPT技术和英特尔公司(Intel)的EPT技术。以EPT技术为例,它在硬件上直接支持了VA→PA→MA的转化,相比于影子页表,降低了内存虚拟化的复杂度,提升了内存虚拟化的性能。