本篇将进入 CPU 虚拟化的学习,回想一下在 Linux 中从一个任务切换到另一个任务通过 context_switch 进行切换,其中包括 mm 切换,cpu 的切换等,简言之就是 Linux 操作系统内核实现了物理 CPU 对进程的时分复用。
在 CPU 虚拟化中,首先明确一个概念就是 Guest VM 依然还是运行在实际的物理 CPU 上,那么这里谈到的 VCPU 是一个什么概念呢?VCPU 的运行与进程的上下文切换是类似的,当 Guest VM 需要切换到 VCPU 运行时,Hypervisor 就将 VCPU 对应的 Guest VM 的上下文恢复到对应的物理 CPU 中,当 Guest OS 由于执行一些敏感指令,访问没有映射的内存等情况时,运行的 CPU 会陷入 Hypervisor,然后 Hypervior 负责将物理 CPU 的状态保存到 VCPU 上下文中,所以我们这里就可以理解 VCPU 就是对物理 CPU 资源的抽象, Hypervior 实现了物理 CPU 对 Guest VM 的时分复用。
在 Hypervisor 中可以控制所有的系统资源,包括我们之前讲到的物理内存、IO 设备、中断、指令等。Hypervisor 可以配置 Guest VM 在执行到敏感指令时触发异常,该异常会被路由到 EL2 的 Hypervisor 的中,然后可以对这些敏感指令进行模拟。
<