一 基于二进制翻译的全虚拟化
其主要思想是在执行时将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项目而广为人知
四 硬件协助虚拟化
引入新的处理器运行模式和新的指令,使得VMM和Guest运行于不同的模式下,Guest OS运行于受控模式,原来的一些敏感指令在受控模式下全部会陷入VMM,这样就解决了部分非特权的敏感指令的陷入——模拟难题,而且模式切换时上下文的保存恢复由硬件来完成,这样就大大提供了陷入——模拟时上下文切换的效率
该技术的引入使得X86可以很容易地实现完全虚拟化,故被几乎所有之前分歧流派各方所采用,如:KVM-X86,新版VMWare ESX Server 3,Xen 3.0
五 支持硬件虚拟化的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年已经引入虚拟化支持