虚拟机的类型

Type-1 虚拟机监视器

​ 直接运行在硬件上,充当了操作系统的角色,像操作系统一样实现调度、内存管理、驱动硬件等,典型的有Xen

Type-2 虚拟机监视器

​ 依赖主机的操作系统,主机操作系统依旧管理物理资源,将虚拟机当作应用在运行,复用了主机上操作系统的大部分功能。

系统ISA

​ 系统ISA指的是读写敏感寄存器、控制处理器行为(如WFI)、控制虚拟或物理内存(打开、配置、安装页表)、控制外设(DMA和中断)。

​ 为此必须提供捕捉系统ISA, 内存虚拟化、设备虚拟化。

最直接的实现方法

​ 将虚拟机放在操作系统原本的特权级,这样客户操作系统和进程都运行在用户态,操作系统。当用户态的程序执行特权指令,会陷入到VMM进行模拟。但是不是所有的敏感指令都是特权指令,如何处理这些不会下陷的敏感指令:

  • 解释执行
  • 二进制翻译
  • 半虚拟化
  • 硬件虚拟化

解释执行

​ 使用软件的方法对于任何一条指令进行模拟,没有任何指令直接在硬件上运行,同时使用内存维护虚拟机的状态。

​ 解决了敏感指令不下陷的问题,实现简单,但是效率非常低。

二进制翻译

通过翻译虚拟机指令,之后以基本块为单位进行执行。但是它不能处理自修改的代码,且中断插入的粒度较大,因为每次执行都是将翻译完的代码放到硬件上直接执行,所以VMM只能在边界进行检查。

半虚拟化

​ 提供hypercall,修改操作系统的源码,将所有的敏感指令替换为vmm的调用。

​ 提升了敏感指令不下陷的问题,提升I/O等场景的性能。缺点是需要修改操作系统。

硬件辅助虚拟化

x86 引入了全新的特权级 root模式和non-root模式,将VMM运行在root模式,虚拟机运行在非root模式。

​ 而在ARMVMM运行在EL2,同时操作系统和应用程序分别运行在EL1EL0