虚拟化相关内容。
虚拟化与 CPU 虚拟化
一、什么是虚拟化
虚拟化(Virtualization):
通过软件或硬件手段,将一台物理计算机的资源(CPU、内存、存储、网络)抽象为多个逻辑计算环境(虚拟机,VM),使得多个操作系统能在同一台硬件上独立运行。
- Hypervisor(虚拟机监控器):管理和调度虚拟机的核心层。
- Guest OS(客户机操作系统):运行在虚拟机中的操作系统。
- Host OS(宿主操作系统):运行在物理机上的操作系统。
一句话总结:虚拟化让“一个物理机假装成多个独立机器”。
二、为什么需要虚拟化
- 资源高效利用:提升 CPU、内存等硬件使用率。
- 隔离与安全:虚拟机之间互不影响。
- 弹性与迁移:支持快照、迁移、复制。
- 云计算基础:虚拟化是 IaaS(基础设施即服务)的核心技术。
三、虚拟化的核心机制:陷入再模拟(Trap & Emulate)
当 Guest OS 执行特权操作(如访问 I/O、修改页表等)时:
- 陷入(Trap):CPU 触发异常,暂停虚拟机,切换到 Hypervisor;
- 再模拟(Emulate):Hypervisor 模拟指令的执行效果;
- 恢复(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 | 用户态 QEMU ───→ 内核态 KVM ───→ 硬件 VT-x |
运行流程:
- QEMU 打开
/dev/kvm创建设备与 vCPU; - 调用
ioctl(KVM_RUN)启动虚拟机; - Guest 在非根模式执行;
- 触发 VM Exit → 返回 KVM → 模拟 → 再次进入。
QEMU 负责虚拟机外部逻辑(I/O 模拟),
KVM 负责内核态虚拟化逻辑(CPU 调度、内存映射),
VT-x 负责底层硬件支持。
七、中断虚拟化
- 物理中断不能直接送入虚拟机。
- Hypervisor 需拦截物理中断、再注入虚拟中断给 Guest。
- 新一代技术(Intel APICv、ARM GICv4)支持中断直通注入(Posted Interrupt),减少陷入开销。
八、CPU 虚拟化核心流程图
1 | Guest OS (Non-root mode) |
CPU 虚拟化 = 陷入再模拟 + 硬件辅助 + 状态管理。
它让操作系统“以为”自己拥有硬件,
但所有敏感操作都在 Hypervisor 的掌控之下。

