微信公众号:杰夫弹弹看
分类: 虚拟化
2012-06-08 22:11:22
X86处理器引入的一个很重要的虚拟化支持就是Non-Root模式和Root模式。VMM运行在Root模式,guest OS都运行在Non-Root模式。
为什么引入这种特殊的模式呢? 这要从X86的毛病说起,因为X86架构在2005年之前都对虚拟化没有相应的支持:在于,
首先,X86的处理器指令有一部分是特权指令,在用户模式下,它们会被trap,如果在内核模式,不会trap。
除此之外,还有一部分指令很特殊(sensitive instruction),会涉及到对系统资源的访问,比如对标志寄存器的修改。这些指令在用户模式下不会被trap。这样会造成guest OS 认为状态更改了,但是Hardware本身忽略这些修改。所以需要通过一种手段来截获这些特殊的敏感指令,在VMM层进行相应的模拟,例如二进制翻译。
虽然在VMware在软件层次的全虚拟化方法性能上不错,但是离开了硬件上的虚拟化支持还是有所打折。2005年——2006年,Intel/AMD推出了VT/SVM,CPU引入了Non-Root模式和Root模式,使得敏感指令在guest OS执行时,会被VMM截获,直接转换等价的硬件指令执行。
KVM最初的出发点就是利用硬件技术的虚拟化,来实现Linux host OS的全虚拟化方案, 而Vmware直到2007年才推出第一款利用Hardware虚拟化的Hypervisor。
参考资料:
(1)KVM: Kernel-based Virtualization Driver
(2)Understanding Full Virtualization, Paravirtualization, and Hardware Assist