CPU硬件虚拟化
传统处理器
传统的处理器通过选择不同的运行(Ring 特权)模式,来选择指令集的范围,内存的寻址方式,中断发生方式等操作。
硬件虚拟化处理器
在原有的Ring特权等级的基础上,处理器的硬件虚拟化技术带来了一个新的运行模 式:Guest模式[1],来实现指令集的虚拟化。当切换到Guest模式时,处理器提供了先前完整的特权等级,让Guest操作系统可以不加修改的运行在物理的处理器上。Guest与Host模式的处理器上下文完全由硬件进行保存与切换。此时,虚拟机监视器(Virtual Machine Monitor)通过一个位于内存的数据结构(Intel称为VMCS, AMD称为VMCB)来控制Guest系统同Host系统的交互,以完成整个平台的虚拟化。
IO虚拟化
传统的IO操作
传统的操作系统通过硬件MMU完成虚拟地址到物理地址的映射。
虚拟化传统IO实现
在虚拟化环境中,Guest的虚拟地址需要更多一层的转换,才能放到地址总线上:
Guest虚拟地址 -> Guest物理地址 -> Host物理地址
^ ^
| |
MMU1 MMU2
其中MMU1可以由软件模拟(Shadow paging中的vTLB)或者硬件实现(Intel EPT、AMD NPT)。MMU2由硬件提供。
IO虚拟化技术
系统的IO虚拟化技术,通常是VMM捕捉Guest的IO请求,通过软件模拟的传统设备将其请求传递给物理设备。一些新的支持虚拟化技术的设备,通过硬件技术(如Intel VT-d),可以将其直接分配给Guest操作系统,避免软件开销。
[1]X86处理器的生产厂商有自己的称谓,比如英特尔将Guest模式称为non-root operation,与之相对的是root operation,本文称为host模式。