内存虚拟化的本质就是通过虚拟机管理程序去管理服务器硬件上的物理内存,由于服务器的物理内存一般配置比较大,在实际使用上一般会将虚拟化后的内存资源分配给多个虚拟机使用。对于每个虚拟机所使用的内存空间相互独立,并且在客户机与服务器的物理内存地址之间通过虚拟机管理程序维护映射关系。但是对于客户机的操作系统而言,认为其所拥有的物理内存地址是从零开始的连续内存空间。因此虚拟机管理程序就必须能将虚拟机线性地址到物理地址的转换替换为虚拟机线性地址到宿主机物理地址的转化。为了完成客户机的操作系统的虚拟地址到机器地址的转化。虚拟机管理程序一般采用两种方式:直接模式和影子模式。
(1)直接模式
直接模式表示客户机的操作系统可以直接在自己的页表中访问机器内存,在页表中保存的地址为机器的物理地址。但是根据虚拟机的隔离原则,客户机操作系统不能直接使用机器物理地址。客户机操作系统就要在M2P(Machine to Phys)表和P2M(Phys to Machine)表的帮助下完成虚拟机物理地址和机器物理地址之间的转换,如图6-3所示。
图6-3 直接模式
(2)影子模式(www.xing528.com)
当全虚拟化时,虚拟机管理系统程序不能改动客户机操作系统的页表。为了支持和保存虚拟机线性地址到物理地址的转化,Xen就启用了另一张页表,就是影子页表。虚拟机管理系统程序要为每个虚拟化后的操作系统建立和管理影子页表。虚拟机管理系统程序负责完成物理地址和机器物理地址的转换,并且保持两种页表的同步。运行虚拟机时,在物理服务器主机的页表基地址寄存器(CR3)被虚拟机管理系统程序放入影子页表中指向最高级影子页表的指针,并且影子页表会随着虚拟机页表的更新而更新。在虚拟机进行页表操作时,VMM(Virtual Machine Monitor)虚拟机监视程序会让客户机操作系统更新其页表,然后根据映射关系,用机器地址更新影子页表项,以实现内存访问。
影子页表使用P2MTable和M2PTable存储虚拟机物理地址与机器物理地址的对应关系。在主控表中存储所有虚拟机合用的地址对应信息。同时虚拟机管理程序还维护着一张以非最低级虚拟机页表项中的物理地址和页表类型作为哈希值的哈希表,通过该哈希表就能查找到相应影子页表项中的机器物理地址。其转化方法如图6-4所示。
图6-4 影子模式下的虚拟机页表对应关系
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。