二进制翻译(Binary Translation)是一种直接翻译可执行二进制程序的技术,能够把一种处理器上的二进制程序翻译到另外一种处理器上执行.它使得不同处理器之间的二进制程序可以很容易地相互移植,扩大了硬件/软件的适用范围,有助于打破前面提到的处理器和支持软件之间互相掣肘影响创新的局面.

                                                                       ---来自百度百科

基于二进制翻译技术的完全虚拟化,主要是解决一些敏感指令的翻译。翻译过程如下:

虚拟化的理论-CPU虚拟化_虚拟化

Guest OS运行在Ring1级别,VMM运行在Ring 0级别完全掌控系统资源对资源进行控制,对于一些非特权指令可以直接执行。对于一些特权指令则将其替换成陷入指令,通过VMM来捕获并模拟其指令的执行。


半虚拟化的执行过程如下:

虚拟化的理论-CPU虚拟化_cpu_02

对于半虚拟来说Guest OS和VMM都是运行在Ring 0上,Guest OS的普通指令是可以执行执行的,而对于一些特权指令来说因为Guest OS知道其运行在虚拟环境下,所以对于一些特权指令Guest OS是直接调用VMM提供的Hypercalls来执行的。



下面来介绍下硬件辅助虚拟化,其过程如下:

虚拟化的理论-CPU虚拟化_cpu_03




对于硬件辅助虚拟化来说,又引入了一个Root mode Privilege Levels,Guest OS是运行在普通模式下Ring 0特权级别处于受控模式,是要受到Root mode的控制,而VMM此时是运行在一个Root mode级别下,对于Guest OS执行的所有特权指令一些敏感指令都将会全部陷入Root mode,VMM就可以方便的捕获到全部指令,这就解决了部分非特权的敏感指令问题。并且对于模式的切换和恢复都是由硬件来完成所以性能上也很好。