CPU 软件虚拟化#
原文:
- VMM 全称是 Virtual Machine Monitor,虚拟机监控系统,也叫 Hypervisor,是虚拟化层的具体实现。
分类---根据 VMM 的实现结构分类, ** Hypervisor 模型(1 型)和宿主模型(2 型)**
- VM虚拟机---客户机(guest) 物理机---- 宿主机(host) VMM ---- 处在两者之间
- guest host VMM分别处于不同的CPU特权级上
- VMM 本质上是个 Host OS,运行在 Ring 0 上,Guest OS 运行在 Ring 1 上,再往上是相应层次的应用程序运行在 Ring 2 和 Ring 3 上。
- CPU 硬件辅助虚拟化在 Ring 模式的基础上引入了一种新的模式,叫 VMX 模式。它包括根操作模式(VMX Root Operation)和非根操作模式(VMX Non-Root Operation)。
Guest OS 运行在 Ring 0 上 - Guest ----切换到---> Host VMM : VM-exit --->如果 Guest OS 运行过程中遇到需要 VMM 处理的事件,比如中断或缺页异常,或者主动调用 VMCALL 指令调用 VMM 服务的时候(类似于系统调用),硬件自动挂起 Guest OS,切换到根模式,VMM 开始执行。
Guest <---切换到--- Host VMM : VM-entry --->MM 通过显示调用 VMLAUNCH 或 VMRESUME 指令切换到非根模式,硬件自动加载 Guest OS 的上下文,Guest OS 开始执行。
KVM ---一款开源软件,被集成到了 Linux 2.6.20 内核中,成为了内核的一部分。KVM 采用的是基于 Intel VT 的硬件辅助虚拟化技术,以及结合 Qemu 来提供设备虚拟化,从实现上看,属于宿主模型。
- 一个 KVM 虚拟机对应 Host 上的一个 qemu-kvm 进程,它和其他 Linux 进程一样被调度,而 qemu-kvm 进程中的一个线程就对应虚拟机的虚拟 CPU (vCPU),虚拟机中的任务线程就被 vCPU 所调度