分类: LINUX
2014-03-05 14:02:11
l KVM:Kernel-based Virtual Machine,基于kernel的虚拟机
l VMM:Virtual Machine Monitor,虚拟机监控器,在KVM虚拟化环境中,即KVM内核。
l VM:Virtual Machine,虚拟机,即Guest机。
l 全虚拟化:Guest OS无需做任何改动即可运行。有两种实现方式:软件辅助实现和硬件辅助实现。
ü 软件辅助实现的全虚拟化:一般采用优先级压缩(Ring Compression)和二进制翻译(Binary Translation)实现。由于一些特权指令必须运行于特权级Ring0,如LGDT,通常OS kernel运行Ring0中,这样虚拟化环境中,VMM就没有Ring可用了。优先级压缩大致原理为:使VMM运行于Ring0,Guest OS kernel运行于Ring1,而Guest OS user运行于Ring3。优先级压缩能正确处理大部分的特权指令,但是由于x86架构存在虚拟化漏洞(部分敏感指令不能被捕获),采用二进制翻译方法来处理这些虚拟化漏洞:VMM扫描并修改Guest的二进制代码,将无法捕获的敏感指令转换为支持虚拟化的指令。
ü 硬件辅助实现的全虚拟化:依赖硬件虚拟化特性(比如Intel VT-x),基本思想是:在硬件架构上加入了足够的虚拟化功能,使其可以截获Guest OS中所有敏感指令,并进行模拟。
l 半虚拟化:Guest OS需要进行修改,对不能“陷入”的敏感指令进行替换,以解决敏感指令的捕获问题。
l VT-x:Intel为CPU虚拟化提供了VT-x(Intel Virtualization for x86)技术(AMD SVM也提供了类似的功能),VT-x引入了一套新的工作模式,即VMX(Virtual Machine eXtension),该模式下的CPU具有两种操作模式:根模式(VMX root operation)和非根模式(VMX non-root operation)。每种操作模式下,都有独立的Ring0-Ring3。
ü VMM运行于根模式,对KVM虚拟化环境来说,即KVM主机运行于根模式,主机中的kernel运行于根模式中的Ring0,主机中用户态程序(比如Qemu-kvm)运行于根模式中的Ring3。
ü Guest运行于非根模式,Guest中的kernel运行于非根模式中的Ring0,Guest中的用户态程序运行于非根模式中的Ring3。
此外,VT-x还引入了一组新的指令,包括VMLAUNCH/VMRESUME(用于发起VM-Entry)、VMREAD/VMWRITE(用于配置VMCS)等。
l VM-Exit/VM-Entry:在VT-x环境中,非根模式下(即Guest中),执行敏感指令触发的“陷入”称为VM-Exit。VM-Exit发生时,CPU自动从非根模式切换到根模式下,然后就可以由VMM对触发VM-Exit的敏感指令做进一步处理或模拟。
与VM-Exit对应的是VM-Entry,此操作由VMM发起,通常是VMM调度某个Guest(或VCPU)运行时引起,此时CPU自动由根模式切换为非根模式。
l VMCS:在VT-x环境中,引入了VMCS(Virtual Machine Control Structure,虚拟机控制结构),以便更好的支持CPU虚拟化。VMCS用于保存虚拟CPU需要的相关状态,比如:CPU在根模式和非根模式下的寄存器的值、VM-Exit的原因等,当CPU发生VM-Exit和VM-Entry时,会自动查询和更新VMCS,VMM也可以通过配置VMCS控制CPU的行为。