(1)完全虚拟化(Full virtualization)。其实说白了这是一种“骗人”的方式。虚拟化软件会模拟假的CPU、内存、网络、硬盘给虚拟机,让它感觉自己像是物理机内核。但是真正的工作模式其实是当虚拟机内核申请内存和CPU时间片等资源时,由VirtualBox等虚拟机软件代劳,以物理机上的用户态向物理机内核申请资源再给虚拟机内核,虚拟机内核拿到VirtualBox申请的物理机资源后给虚拟机上的用户态软件运行,并且虚拟机的内存地址例如从0开始,但实际上在物理机上可能是从地址90开始。这种方式一个坏处就是非常慢。
(2)硬件辅助虚拟化(Hardware-Assisted Virtualization)。即VirtualBox让虚拟机意识到自己不是物理机,物理机资源的权限问题可以交给Intel的VT-x和AMD的AMD-V标志位。它们是ring 0到3以外的一个新的标志位,表示当前是在虚拟机状态下。对于虚拟机内核来讲,只要将该标志位设为虚拟机状态,就可以直接在物理CPU上执行大部分的指令,不需要虚拟化软件在中间转述,除非遇到特别敏感的指令,才需要将标志位设为物理机内核态运行,这样大大提高了效率。所以安装虚拟机的时候,务必要在BIOS中将物理CPU的这个标志位打开。
(3)半虚拟化(Paravirtualization)。就是访问网络或者硬盘的时候,为了取得更高的性能,需要让虚拟机内核加载特殊的驱动,也是让虚拟机内核从代码层面就重新定位自己的身份,不能像访问物理机一样访问网络或者硬盘,而是用一种特殊的方式。