全虚拟化x86架构的CPU因为先天设计的原因,很难做到虚拟化,原因在于x86 CPU定位于单用户使用,当初并没有考虑到将计算资源分配给不同OS的问题。x86 CPU运行区分为四个特权等级,分别是Ring 0、1、2、3。Ring0是最高等级,它可以直接控制硬件CPU、I/O和存储器。只有OS系统内核和驱动可以运行在Ring 0级别。Ring 1、2两个等级基本上没有使用,而Ring 3主要运行一般的应用程序。虚拟化体系中,有一个重要的部分叫VMM(Virtual Machine Monitor),它是hypervisor的一部分。它是负责硬件资源的分配的,所以它需要运行在Ring 0级别上。而虚拟化出来Guest OS,是运行在VMM之上的,所以它被降到Ring 1级别。这里就有一个问题了,Ring 1级别是不能直接调用CPU、IO和存储器的,而我们刚才说OS系统内核又必须运行在Ring 0级别,那Guest OS势必会崩溃的。VMWare在1999年解决了这个问题,那就是全虚拟化。VMWare研究出了一种新的技术,名叫Binary Translation,它通过VMM拦截GuestOS发出来的原本不能被虚拟化的命令,将其进行二进制转译的替换操作,使得GuestOS自认为可以直接操作硬件,这样GuestOS就可以正常运行了。全虚拟化的好处是,OS不必做任何修改,即可在虚拟化平台上直接使用,非常方便。相较于全虚拟化,还有一种叫半虚拟化,XenServer和hyper-V就是这类的,有时间在讨论。