CPU虚拟化是将一个物理的CPU虚拟成多个虚拟CPU供虚拟机使用。
在传统的X86指令集中,CPU有4个特权级(0-3),第0级用来运行操作系统,拥有最高的特权,第3级用来运行应用程序,拥有最低的特权级。
虚拟机运行的过程中,通常VMM作为管理组件,运行在宿主机的操作系统中,拥有最高特权级别,而虚拟机上的操作系统就职能运行在第3级别了。
但是,操作系统中的某些指令,只能运行在最高特权级别,因此运行在第3级别的guest操作系统如何去执行那些只能在第0级才能运行的特权指令,就成为一个急需解决的问题。
根据实现机制的不同,这一过程分为三类:
(1)基于模拟执行的CPU虚拟化,也就是所谓的全虚拟化。
当VMM捕获到guest操作系统需要执行的特权指令时,用本地物理CPU的指令对该特权指令进行模拟运行,并将结果返回给guest操作系统。
这中方式的一个优点就在于,它可以虚拟出与本地物理CPU指令集不同的虚拟CPU
如kvm, vmware
(2)操作系统辅助虚拟化,也就是所谓的半虚拟化
将guest操作系统中的特权指令通过hypercall的方式进行改写,类似于系统调用
这种方式需要修改guest操作系统,
如xen
(3)硬件支持的虚拟化
现如今常见的处理器都支持,intel为 Intel VT-x, AMD 为 SVM
在通常的CPU基础之上,增加了一个新的模式,通过CPU模式的切换来执行那些特权指令。