概述

介绍下列内容:

  • 特权解除和陷入-模拟
  • X86架构虚拟化遇到的问题
  • X86架构虚拟化方法
  • 应用举例

特权解除和陷入-模拟

  1. 未进行虚拟化的时候OS运行在特权模式下,可直接操作硬件,不会出现权限异常。
  2. 进行虚拟化后,显然OS就不会运行在特权模式下了。
  3. 这个过程叫做“特权解除”。
  4. 此时操作系统依然认为自己运行在特权模式下,会执行一些修改页表等特权指令。
  5. 这些指令会引发异常,从而陷入VMM中,由VMM来模拟特权指令的执行。
  6. 这个过程叫做“陷入-模拟”

特权解除和陷入-模拟这种经典的虚拟化方式需要保证所有的敏感指令都是特权指令才可以使用,但是X86 CPU不满足这个条件。

X86架构虚拟化遇到的问题

X86 ISA指令集中有19条敏感指令不是特权指令,这也就会导致执行这些指令的时候不会陷入到VMM中,也就是被GuestOS越过了VMM直接控制了硬件。

X86架构虚拟化方法

全虚拟化

VMM模拟完整的硬件资源,当GuestOS执行所有敏感指令的时候都会引发异常陷入VMM中。这种方式不需要修改OS代码,但是引入的新的复杂性而且性能开销很大。

半虚拟化

修改GuestOS的源代码,将敏感指令的代码修改为HyperCall以直接和VMM通讯。这种方式无需模拟完整的硬件资源,几乎就是物理机的性能。但是这种虚拟化仅适用于开源的OS,Windows这类OS是不行的。

硬件辅助虚拟化(不仅仅适用于X86架构)

CPU出生就直接支持虚拟化,新增两种运行模式root模式和non-root模式,ring0也是root模式,其余的为non-root模式。当non-root模式下执行敏感指令的时候自动陷入root模式,而VMM就是运行在root模式下,少了二进制翻译和修改GuestOS代码的过程,虽然性能比半虚拟化差一点(因为还要经过一些额外判断),但是也是十分接近的。

应用举例

  • 硬件辅助虚拟化:VMware ESXi,Microsoft Hyper-V,KVM。
  • 全虚拟化:VMware Workstation,QEMU,Virtual PC。
  • 半虚拟化:Xen