虚拟机类型
虚拟机的类型
Type-1 虚拟机监视器
直接运行在硬件上,充当了操作系统的角色,像操作系统一样实现调度、内存管理、驱动硬件等,典型的有Xen
。
Type-2 虚拟机监视器
依赖主机的操作系统,主机操作系统依旧管理物理资源,将虚拟机当作应用在运行,复用了主机上操作系统的大部分功能。
系统ISA
系统ISA
指的是读写敏感寄存器、控制处理器行为(如WFI
)、控制虚拟或物理内存(打开、配置、安装页表)、控制外设(DMA
和中断)。
为此必须提供捕捉系统ISA
, 内存虚拟化、设备虚拟化。
最直接的实现方法
将虚拟机放在操作系统原本的特权级,这样客户操作系统和进程都运行在用户态,操作系统。当用户态的程序执行特权指令,会陷入到VMM
进行模拟。但是不是所有的敏感指令都是特权指令,如何处理这些不会下陷的敏感指令:
- 解释执行
- 二进制翻译
- 半虚拟化
- 硬件虚拟化
解释执行
使用软件的方法对于任何一条指令进行模拟,没有任何指令直接在硬件上运行,同时使用内存维护虚拟机的状态。
解决了敏感指令不下陷的问题,实现简单,但是效率非常低。
二进制翻译
通过翻译虚拟机指令,之后以基本块为单位进行执行。但是它不能处理自修改的代码,且中断插入的粒度较大,因为每次执行都是将翻译完的代码放到硬件上直接执行,所以VMM
只能在边界进行检查。
半虚拟化
提供hypercall
,修改操作系统的源码,将所有的敏感指令替换为vmm
的调用。
提升了敏感指令不下陷的问题,提升I/O
等场景的性能。缺点是需要修改操作系统。
硬件辅助虚拟化
x86
引入了全新的特权级 root
模式和non-root
模式,将VMM
运行在root
模式,虚拟机运行在非root
模式。
而在ARM
中VMM
运行在EL2
,同时操作系统和应用程序分别运行在EL1
和EL0
。