为保证客户机操作系统在虚拟环境下观察到的内存空间布局与在实际物理机环境下相同,就必须对内存进行虚拟化。 对于内存虚拟化,目前主要有两种实现方法,其一是利用传统的影子页表进行虚拟化,其二就是通过硬件辅助进行实现。本文主要阐述了这两种内存虚拟化方法在 KVM 上的具体实现。 KVM(KernelVirtual Machine) , 作为开源的内核虚拟机,越来越受到 IBM,Redhat,HP,Intel 等各大公司的大力支持,基于 KVM 的开源虚拟化生态系统也日益完善。而实现 KVM 虚拟化,使客户机高效地、安全地使用宿主机的内存资源,就必须实现内存的虚拟化。 客户机物理地址空间 为了实现内存虚拟化,让客户机使用一个隔离的、从零开始且具有连续的内存空间,KVM 引入一层新的地址空间,即客户机物理地址空间 (Guest PhysicalAddress, GPA),这个地址空间并不是真正的物理地址空间,它只是宿主机虚拟地址空间在客户机地址空间的一个映射。对客户机来说,客户机物理地址空间都是从零开始的连续地址空间,但对于宿主机来说,客户机的物理地址空间并不一定是连续的,客户机物理地址空间有可能映射在若干个不连续的宿主机地址区间,如下图所示: 客户机物理地址到宿主机虚拟地址的转换
|