虚拟化

虚拟化相关内容。

虚拟化与 CPU 虚拟化

一、什么是虚拟化

虚拟化(Virtualization)
通过软件或硬件手段,将一台物理计算机的资源(CPU、内存、存储、网络)抽象为多个逻辑计算环境(虚拟机,VM),使得多个操作系统能在同一台硬件上独立运行。

  • Hypervisor(虚拟机监控器):管理和调度虚拟机的核心层。
  • Guest OS(客户机操作系统):运行在虚拟机中的操作系统。
  • Host OS(宿主操作系统):运行在物理机上的操作系统。

一句话总结:虚拟化让“一个物理机假装成多个独立机器”。


二、为什么需要虚拟化

  • 资源高效利用:提升 CPU、内存等硬件使用率。
  • 隔离与安全:虚拟机之间互不影响。
  • 弹性与迁移:支持快照、迁移、复制。
  • 云计算基础:虚拟化是 IaaS(基础设施即服务)的核心技术。

三、虚拟化的核心机制:陷入再模拟(Trap & Emulate)

当 Guest OS 执行特权操作(如访问 I/O、修改页表等)时:

  1. 陷入(Trap):CPU 触发异常,暂停虚拟机,切换到 Hypervisor;
  2. 再模拟(Emulate):Hypervisor 模拟指令的执行效果;
  3. 恢复(Resume):返回 Guest,继续执行。

虚拟化的本质: 让 Guest “以为自己直接在硬件上运行”,但实际上所有敏感操作都被 Hypervisor 控制。


四、CPU 虚拟化的核心问题与解决方案

1. 挑战:敏感非特权指令

  • 某些访问硬件的指令(I/O、页表修改)在非特权级执行时不会触发陷入
  • 导致 Hypervisor 无法拦截 → 虚拟化失败。

2. 解决方案演进

阶段技术路线核心思想
软件虚拟化二进制翻译、半虚拟化通过软件扫描/改写敏感指令,使其主动陷入
硬件辅助虚拟化Intel VT-x / AMD-V由 CPU 硬件自动触发陷入与恢复

五、硬件辅助虚拟化(Intel VT-x)

1. 模式划分

  • Root Mode(根模式):运行 Hypervisor,拥有最高权限。
  • Non-root Mode(非根模式):运行 Guest OS,被虚拟化的环境。

2. 关键机制

  • VM Entry:从 Hypervisor 进入虚拟机(Root → Non-root)。
  • VM Exit:虚拟机执行敏感指令或异常后退出到宿主机(Non-root → Root)。
  • VMCS(Virtual Machine Control Structure)
    CPU 内部的数据结构,用于保存 Guest/Host 状态与控制信息。

VT-x 让陷入与恢复由硬件自动完成,大幅提升虚拟化性能与兼容性。


六、KVM/QEMU 的虚拟化实现思路

1
2
用户态 QEMU ───→  内核态 KVM ───→  硬件 VT-x
(模拟器) (接口模块) (执行单元)

运行流程:

  1. QEMU 打开 /dev/kvm 创建设备与 vCPU;
  2. 调用 ioctl(KVM_RUN) 启动虚拟机;
  3. Guest 在非根模式执行;
  4. 触发 VM Exit → 返回 KVM → 模拟 → 再次进入。

QEMU 负责虚拟机外部逻辑(I/O 模拟),
KVM 负责内核态虚拟化逻辑(CPU 调度、内存映射),
VT-x 负责底层硬件支持。


七、中断虚拟化

  • 物理中断不能直接送入虚拟机。
  • Hypervisor 需拦截物理中断、再注入虚拟中断给 Guest。
  • 新一代技术(Intel APICv、ARM GICv4)支持中断直通注入(Posted Interrupt),减少陷入开销。

八、CPU 虚拟化核心流程图

1
2
3
4
5
6
7
Guest OS (Non-root mode)
│ 执行特权指令

[VM Exit] → Hypervisor (Root mode)
│ 模拟操作 (Emulate)

[VM Entry] → Guest 继续执行

CPU 虚拟化 = 陷入再模拟 + 硬件辅助 + 状态管理。

它让操作系统“以为”自己拥有硬件,
但所有敏感操作都在 Hypervisor 的掌控之下。