内存虚拟化是虚拟化技术中至关重要的环节,它提供了虚拟机间内存的隔离与保护。Xen 采用影子页表机制来实现硬件虚拟机的内存虚拟化。 Xen 内存内存虚拟化实现虚拟化实现 ————影子页表内存管理机制影子页表内存管理机制 辛晓慧 在 Xen 中,影子页表(Shadow Page Table)的设计源于页表与TLB 的基本交互过程,,这是实现分页机制的内存访问的核心。事实上,整个影子页表被看作是一个相对于客户机页表(Guest Page Table)而言的巨大的TLB(Translation Lookaside Buffers)。影子页表和客户机页表不一定需要一致,只要影子页表的内容能正确仿真客户机的TLB 即可。本文简述影子页表,并介绍影子表机制在 Xen 中的实现。 影子页表简介 1.启用影子页表的原因 Xen 利用影子页表机制来实现硬件虚拟机的内存虚拟。宿主机就是真实的物理机器,Xen 的监控程序就运行在宿主机上。客户机是指在宿主机上执行的硬件虚拟机,也被称为虚拟域。客户机认为它所拥有的内存地址空间总是从 0 开始,但它在宿主机上执行时不可能总是拥有从 0 开始的地址所在的物理内存。也就是说客户机的物理地址并不等于宿主机上的机器物理地址。图1 描述了客户机的物理地址与宿主机上机器物理地址的关系。 这样监控程序必须把客户机线性地址到客户机物理地址的转换修正为客户机线性地址到宿主机物理地址的转换。这样的转换显然不是客户机的页表所能支持的,客户机的页表只知道客户机的物理地址,而监控程序为了实现对各个客户机的隔离与保护,也不会让客户机了解宿主机的物理地址。对于完全虚拟化的客户机,监控程序甚至不能够修改客户机的页表。但是,客户机的线性地址到宿主机物理地址的转换是保证客户机在宿主机上访问内存运行正确的核心环节,这样,为了支持和保存这种转换或映射,并能根据客户机修改页表的需要及时更新,Xen 就启用了另外一张页表,这就是影子页表。 2.影子页表 影子页表是监控程序真正使用和维护的页表。客户机执行时,监控程序在宿主机的页表基地址寄存器(CR3)中放入的是影子页表中指向最高级的影子页表的指针(物理地址)。当物理机上没有监控程序运行时,在物理机的页表基地址寄存器中放入的是物理机上运行的惟一操作系统所指向最高级页表的指针。在 Xen 中客户机维护着客户机自己的页表,而监控程序维护着影子页表。客户机实际上是通过影子页表在访问真实的机器物理地址,影子页表以客户机页表为蓝本建立起来,并且...