一 基于二进制翻译的全虚拟化

其主要思想是在执行时将VM上执行的Guest OS之指令,翻译成X86 ISA的一个子集,其中敏感指令被替换成陷入指令


翻译过程与指令执行交叉进行


不含敏感指令的用户态程序可以不经翻译直接执行


该技术未VMWare Workstation。VMware ESX Server早期版本,Virtual PC以及QEMU所采用




虚拟化双活必要性 虚拟化二部_虚拟化



二 基于扫描和修改的全虚拟化


VMM会在VM运行每块指令之前对其扫描,查找敏感指令


补丁指令块会在VMM中动态生成,通常每一个需要修补的指令会对应一块补丁指令


敏感指令被替换成一个外跳转,从VM跳转到VMM,在VMM中执行动态生成的补丁指令块


当补丁指令块执行完成后,执行流再跳转回VM的下一条指令处继续执行


SUN 之Virtualbox采用该技术



三 OS协助的虚拟化


通常修改Guest OS的代码,将含有敏感指令的操作,替换对VMM的超调用(Hypercall ,类似OS系统调用,可将控制权转移到VMM)


该技术的优势在于VM的性能接近物理机,缺点在于需要修改Guest OS


该技术因Xen项目而广为人知



虚拟化双活必要性 虚拟化二部_虚拟化_02



四 硬件协助虚拟化


引入新的处理器运行模式和新的指令,使得VMM和Guest运行于不同的模式下,Guest OS运行于受控模式,原来的一些敏感指令在受控模式下全部会陷入VMM,这样就解决了部分非特权的敏感指令的陷入——模拟难题,而且模式切换时上下文的保存恢复由硬件来完成,这样就大大提供了陷入——模拟时上下文切换的效率


该技术的引入使得X86可以很容易地实现完全虚拟化,故被几乎所有之前分歧流派各方所采用,如:KVM-X86,新版VMWare ESX Server 3,Xen 3.0



虚拟化双活必要性 虚拟化二部_Openstack_03



虚拟化双活必要性 虚拟化二部_Xen_04



五 支持硬件虚拟化的CPU


Intel VT-x(Virtualization Technology for x86) 

 

  Intel VT-i(Virtualization Technology for Itanium) 

 

  Intel VT-d(Virtualization Technology for Directed I/O) 

 

  AMD-V(AMD Virtulization)


六 确认对VT的支持:Linux


AMD:cat /proc/cpuinfo | grep svm 

 

  Intel:cat /proc/cpuinfo|grep vmx



七 CPU对虚拟化支持情况


X86:2006年,Intel引入(VT-x,VT-i),AMD引入(AMD-v)


PowerPC:2001年IBM在Power4中引入了虚拟化支持,2004在Power5中推出增强的虚拟化支持。2009年发布Power ISA  v2.06中规范化。


Spac:2005年已经引入虚拟化支持