第 3 篇 · 操作系统与虚拟化:从一台物理机到一群虚拟机
第 3 篇 · 操作系统与虚拟化:从一台物理机到一群虚拟机
本篇覆盖全景图的 第 ② 层(操作系统)和第 ③ 层(虚拟化 / IaaS)。
第 2 篇讲了"硬件",但硬件是"死的"。要让硬件跑起来、并把一台物理机变成多台虚拟机,需要两样东西:
- 操作系统:管理硬件、运行程序;
- 虚拟化(Hypervisor):在硬件之上"抽象"出多台相互隔离的虚拟机。
本篇把 KVM、QEMU、libvirt、ESXi、vCenter、vSphere、OpenStack、热迁移、快照、模板这些技术的位置和原理一次讲透。
文章目录
一、操作系统:管理硬件、运行程序的"大管家"
1. 操作系统是什么
操作系统(OS)是管理和控制计算机硬件与软件资源的系统软件,在用户和计算机之间起到连接作用。
它的核心功能有五个:
| 核心功能 | 职责 |
|---|---|
| 进程管理 | 创建/调度/销毁进程,分配 CPU |
| 内存管理 | 为每个进程建立虚拟地址空间,分配/回收内存 |
| 文件系统管理 | 在裸硬件上建立结构化的文件组织(“一切皆文件”) |
| 驱动管理 | 为每个外设提供驱动,屏蔽硬件差异 |
| 系统调用接口 | 向上层应用提供访问硬件资源的统一接口 |
2. 内核空间 vs 用户空间(理解一切的基础)
操作系统从逻辑上分成两部分:
几个关键概念:
- 系统调用(syscall):应用程序要访问内核资源(CPU、内存、I/O),必须通过内核提供的接口。类比:写汉字的"笔画"。
- 库函数(libc):对系统调用的封装,把简单接口呈现给用户。类比:汉字的"偏旁"。
- Shell:一个特殊的命令解释器(如 bash),把用户输入的命令翻译成系统调用,本质是对系统调用的封装。
用户态应用访问内核资源有三种方式:系统调用、Shell 脚本、库函数。
3. 内核的内部职责
内核向下控制硬件、向内管理 OS 资源、向上提供系统调用,具体包括:
- 进程调度和管理:创建/销毁进程,处理进程与外界的联系;
- 内存管理:为所有进程在有限物理内存上建立虚拟地址空间;
- 文件系统管理:Linux 几乎"一切皆文件"(目录、设备、套接字、管道都可当文件读写);
- 设备驱动管理:嵌入每个外设的驱动;
- 网络资源管理:路由、地址解析都在内核中实现。
4. 常用服务器操作系统
Linux 与 Unix 的关系:
- Linux 是类 Unix 系统,由 Linus Torvalds 于 1991 年发布,模仿 Unix 的设计;
- Unix 多与硬件配套、是商业软件;Linux 可运行在多种硬件平台、开源免费;
- GNU 计划(1983 年 Richard Stallman 发起)提供了大量自由软件,Linux 提供内核,二者结合构成完整系统。
Linux 主要特性:跨平台、多用户多任务、自由软件、兼容 POSIX、一切皆文件。
5. Linux 目录结构(树形,根目录为 /)
| 目录 | 作用 |
|---|---|
/bin /sbin | 最常用命令 / 系统管理命令 |
/boot | 启动相关文件(内核、grub) |
/dev | 设备文件(如 /dev/sda、/dev/kvm) |
/etc | 系统配置文件(如 /etc/exports、/etc/hosts) |
/lib /lib64 | 系统动态库(类似 Windows 的 DLL) |
/home /root | 普通用户家目录 / 管理员家目录 |
/media /mnt | 自动挂载的可移动设备 / 临时挂载点 |
/opt | 额外安装的软件 |
/proc /sys | 内核与进程信息(虚拟文件系统) |
/tmp | 临时文件 |
/usr | 应用程序和文件(类似 Windows 的 Program Files) |
/var | 经常变化的文件(日志、缓存) |
6. 进程、线程与内存管理(深入)
(1)进程与线程
- 进程:程序运行的一个实例,是资源分配的最小单位。每个进程有独立的地址空间。
- 线程:进程内的执行单元,是 CPU 调度的最小单位。同一进程的多个线程共享进程的内存和资源。
- 多任务的实现:CPU 在某一时刻只能执行一个任务,内核通过时间片轮转快速切换,看起来像同时运行。
(2)内存管理:虚拟内存
这是现代操作系统最重要的设计之一:
- 虚拟内存:每个进程都以为自己独占内存,且从地址 0 开始、连续;内核为每个进程建立独立的虚拟地址空间。
- 分页(Paging):把内存切成固定大小的"页"(x86 默认 4KB),通过页表把虚拟地址映射到物理地址。
- MMU(内存管理单元):CPU 中负责虚拟地址 → 物理地址转换、内存保护的硬件。
- 页表 / TLB:页表记录映射关系,TLB 是缓存页表的高速缓存,减少地址转换开销。
- 交换(Swap):物理内存不够时,把暂时不用的内存页换到磁盘,腾出空间。
- 大页(Huge Page):用 2MB 甚至 1GB 的大页替代 4KB 小页,减少页表数量和 TLB 失效,提升内存访问性能。
这部分非常重要:容器的 Namespace/Cgroups、KVM 的内存虚拟化,本质都是在操作系统这些能力之上做文章。
二、虚拟化:把一台物理机变成多台虚拟机
1. 虚拟化是什么
虚拟化(Virtualization):将任何一种形式的资源抽象成另一种形式的技术,是资源的一种逻辑表示。
它解除了操作系统和物理硬件之间的紧耦合:
- 虚拟化前:操作系统必须与硬件紧耦合,一台机器一个 OS;
- 虚拟化后:上层操作系统与硬件解耦,从资源池中分配资源,一台物理机上跑多个相互隔离的虚拟机。
虚拟化是云计算的基础。本质上,它通过空间分割、时间分时、模拟,可将一份资源抽象成多份(一台变多台),也可将多份资源抽象成一份(如多盘组 RAID)。
2. 虚拟化的重要概念
- Host Machine / Host OS:物理机及物理机上的操作系统;
- Hypervisor / VMM:虚拟化软件层,负责管理、分配硬件资源给虚拟机;
- Guest Machine / Guest OS:虚拟机及虚拟机里的操作系统。
3. 虚拟化的两种部署形态
| 形态 | 说明 | 代表 |
|---|---|---|
| 裸金属(Type-1) | Hypervisor 直接装在物理硬件上,性能高、安全,企业级 | ESXi、Xen、Hyper-V Server、KVM(加载内核后) |
| 寄居式(Type-2) | Hypervisor 作为软件跑在已有操作系统上,用于桌面/学习 | VMware Workstation、VirtualBox |
本课程的 VMware Workstation 是 Type-2(用来在笔记本上做实验);ESXi、KVM 是 Type-1(生产环境)。
4. 虚拟化的三种实现技术(CPU 虚拟化角度)
| 类型 | 原理 | 是否需改 Guest OS | 优缺点 |
|---|---|---|---|
| 全虚拟化 | VMM 完全模拟 CPU、内存、设备 I/O,Guest 不用改 | 否 | 兼容性好,但有额外开销(早期靠二进制翻译/捕获) |
| 半虚拟化 | VMM 负责 CPU/内存,Guest 通过"超级调用"主动配合完成 I/O | 是 | 性能好,但兼容性差(Windows 不能用) |
| 硬件辅助虚拟化 | 借助 CPU 硬件支持实现高效全虚拟化 | 否 | 兼容性好、性能高,是发展趋势 |
硬件辅助虚拟化的关键技术:
- Intel VT-x、AMD AMD-V:CPU 引入新的运行模式,让 VMM 和 Guest 各跑各的特权级;
- Intel VT-d、AMD IOMMU:用于把物理设备直接分配给虚拟机(PCI 直通);
- Intel EPT、AMD NPT:硬件辅助的内存地址转换。
5. 虚拟化的四大特点
| 特点 | 含义 |
|---|---|
| 分区 | 把物理服务器资源划分给多台虚拟机,每台 VM 看到的是"虚拟硬件" |
| 隔离 | VM 之间相互隔离,一台崩溃/中毒不影响其他;可做资源控制 |
| 封装 | 整台 VM(硬件配置、内存/磁盘/CPU 状态)保存在一组文件中,复制文件即可移动 VM |
| 硬件独立 | VM 只看到虚拟硬件,可在任何 x86 服务器上运行而无需修改 |
6. ★ 虚拟化的三大对象:CPU / 内存 / I/O 虚拟化
这是理解 Hypervisor 原理的核心,也是面试重点。
(1)CPU 虚拟化
要解决两个问题:
- 如何模拟 CPU 指令(尤其是敏感/特权指令):
- 敏感指令:读写系统关键资源的指令;特权指令:只能在最高特权级(内核态)执行。
- x86 有 Ring 0~3 四个特权级,OS 内核跑 Ring 0、应用跑 Ring 3。虚拟化后 Guest OS 不能再独占 Ring 0,需要 VMM 介入。
- 如何让多台 VM 共享 CPU:通过定时器中断陷入 VMM,由 VMM 调度。
硬件辅助方案(VT-x):CPU 增加两种模式:
- VMX Root Operation:VMM 运行;
- VMX Non-Root Operation:Guest OS 运行(仍支持 Ring 0~3)。
- 两者之间的切换:Root → Non-Root 叫 VM-Entry(VMLAUNCH),Non-Root → Root 叫 VM-Exit。Guest 大部分指令直接在物理 CPU 上执行,只有特殊指令才 VM-Exit 交给 VMM。
vCPU 与物理 CPU 的关系:
- 示例:2 颗物理 CPU,每颗 8 核,超线程每核 2 线程,则总 vCPU = 2 × 8 × 2 = 32 个。
- 多台 VM 可复用同一物理 CPU(超分),所以 VM 的 vCPU 总和可以超过物理 vCPU 数,但单台 VM 的 vCPU 不能超过单机可用 vCPU。
(2)内存虚拟化
要解决两个问题:
- Guest 都认为内存从物理地址 0 开始(但物理地址 0 只有一个);
- Guest 都认为内存连续(强分配连续物理内存效率低)。
涉及四类地址:
- GVA:客户机虚拟地址;
- GPA:客户机物理地址;
- HVA:宿主机虚拟地址;
- HPA:宿主机物理地址(真实内存)。
两种实现:
- 影子页表(Shadow Page Table):由 VMM 维护一份"GVA → HPA"的直接映射,跳过中间转换。但维护复杂、开销大、每台 VM 一份。
- 硬件辅助(EPT/NPT):CPU 硬件直接支持 GVA→GPA→HPA 两级转换,效率高、实现简单,是现在的主流。
KVM 中,虚拟机的物理内存本质就是
qemu-kvm进程占用的内存空间。
(3)I/O 虚拟化
要解决两个问题:设备发现(控制 VM 能访问哪些设备)和访问截获(截获 Guest 对 I/O 端口/MMIO 的访问)。
QEMU/KVM 中设备有三种方式(性能从低到高):
| 方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 全模拟(Emulation) | QEMU 纯软件模拟设备(如 RTL8139 网卡),保持标准接口 | 兼容性最好、可模拟老旧设备 | I/O 路径长、VM-Exit 多、性能最差 |
| Virtio(半虚拟化) | VM 装前端驱动、主机跑后端,通过共享内存/批量 I/O/事件通知高效通信 | 性能高、VM-Exit 少 | 需 Guest 装 Virtio 驱动(Windows 要额外装) |
| PCI 直通(VT-d) | 把物理 PCI 设备独占分配给某台 VM | 性能接近原生 | 设备数量有限、成本高、无法迁移 |
Virtio 是 KVM 生产环境的标准选择(磁盘用 virtio-blk、网卡用 virtio-net)。
三、★ 主流虚拟化技术栈对比
1. 开源 KVM 技术栈(本课程重点)
KVM 不是一个孤立的软件,而是一组技术协作:
各组件职责(务必分清"谁干什么"):
- KVM(kvm.ko):Linux 内核模块,只负责 CPU 和内存虚拟化,本身不模拟任何设备。加载后 Linux 变成 Hypervisor。
- QEMU:用户态软件,负责模拟 I/O 设备(BIOS、磁盘、网卡、显卡等)。通过
/dev/kvm的 ioctl 与 KVM 交互。- KVM 离不开 QEMU(要 I/O 模拟),QEMU 离不开 KVM(纯软件模拟太慢)。
- libvirt:一套通用、稳定的管理 API + 守护进程,屏蔽底层 Hypervisor 差异(可管 KVM、Xen、VMware、Hyper-V),是事实上的标准。
- virsh:基于 libvirt 的命令行工具。
- virt-manager:基于 libvirt 的图形化管理工具,新手入门首选。
- qemu-img:磁盘工具,创建/转换/查看磁盘(qcow2、raw 格式)。
- virt-install:命令行创建并安装虚拟机。
KVM 的三种运行模式:
- 客户模式:执行 Guest 的非 I/O 代码;
- 用户模式:QEMU 处理 I/O 模拟;
- 内核模式:KVM 处理模式切换和 VM-Exit。
KVM 常用命令:
# 查看虚拟机
virsh list --all
# 启动 / 关闭 / 重启 / 强制关机
virsh start <vm>
virsh shutdown <vm>
virsh reboot <vm>
virsh destroy <vm>
# 创建 / 恢复 / 删除快照
virsh snapshot-create-as <vm> <snap>
virsh snapshot-revert <vm> <snap>
# 挂起 / 恢复
virsh suspend <vm> ; virsh resume <vm>
# 查看信息
virsh dominfo <vm> ; virsh domblklist <vm> ; virsh vcpuinfo <vm>
# 开机自启
virsh autostart <vm>
磁盘管理(qemu-img):
# 创建磁盘(qcow2 支持快照、动态增长;raw 性能最好)
qemu-img create -f qcow2 /var/lib/libvirt/images/disk.qcow2 20G
# 查看磁盘信息
qemu-img info disk.qcow2
# 格式转换
qemu-img convert -f raw -O qcow2 disk.raw disk.qcow2
2. VMware 商业技术栈(vSphere 体系)
- ESXi:VMware 的裸金属 Hypervisor,直接装在物理服务器上,是 vSphere 的基础。
- vCenter Server(VCSA):集中管理多台 ESXi 的"大脑",提供集群、热迁移(vMotion)、HA、DRS、模板等高级功能。单机 ESXi 无法做这些。
- vSphere:是 VMware 整套云计算虚拟化产品包的名字(ESXi + vCenter + 其他组件),不是单个软件。
对应关系:ESXi ≈ KVM(底层 Hypervisor);vCenter ≈ OpenStack/管理平台(集中管理);vSphere ≈ 整套云方案。
3. Xen 与 Hyper-V
- Xen:经典开源 Hypervisor,Hypervisor 很薄、不含驱动。启动后先运行一个特权虚拟机 Dom0(管理硬件、跑驱动),其他虚拟机是 DomU。支持半虚拟化(PV)和全虚拟化(HVM)。
- Hyper-V:微软的裸金属虚拟化,内置于 Windows Server。
4. 横向对比表
| 技术 | 厂商/类型 | 架构 | 特点 |
|---|---|---|---|
| KVM | 开源 / RedHat | Linux 内核模块 + QEMU | 瘦、复用 Linux、性能好、生态主流 |
| ESXi/vSphere | VMware 商业 | 裸金属 + vCenter | 成熟稳定、功能全、企业级标杆、收费 |
| Xen | 开源 / Citrix | 薄 Hypervisor + Dom0 | 安全、支持架构广、早期主流 |
| Hyper-V | 微软商业 | 裸金属 | Windows 生态集成好 |
| VMware Workstation | VMware 商业 | Type-2 寄居 | 桌面实验用 |
四、云平台的高级特性:快照、模板、热迁移、HA
1. 快照 vs 模板(容易混淆)
| 特性 | 快照(Snapshot) | 模板(Template) |
|---|---|---|
| 本质 | 记录 VM 某一时刻的状态(可回滚) | 一台预装系统的"母版",用于批量克隆 |
| 用途 | 备份/回滚、做实验前存档 | 快速批量创建相同配置的虚拟机 |
| 关系 | 可反复创建/恢复 | 由 VM 转换或克隆而成 |
制作 CentOS 模板的典型流程(对应实验):装系统 → 装常用工具(net-tools、vim、wget)→ 清理机器标识(删除
/etc/udev/rules.d/下的网卡规则、清空 MAC)→ 关机转为模板。之后用模板克隆出的机器再各自改 IP/主机名。
2. ★ 热迁移(Live Migration):虚拟机不关机搬家
这是虚拟化最有价值的特性之一,KVM 叫 live migration、VMware 叫 vMotion。
解决的问题 / 使用场景:
- 服务器维护、升级前,把 VM 迁走,避免业务中断;
- 负载均衡,把空闲服务器上的 VM 迁走后关机省电。
核心前提:共享存储。
- 源和目标宿主机都能访问同一份 VM 磁盘(NFS、Ceph RBD、iSCSI 等);
- 所以磁盘不用迁移,只迁移内存 + CPU/设备状态。
迁移过程(Pre-Copy 预复制,迭代进行):
关键:通过"迭代预复制 + 最后短暂停机",把停机时间压到毫秒级,业务几乎不中断。
若没有共享存储,则需要同时迁移磁盘(存储热迁移),耗时更长。
3. HA(高可用)与 DRS(分布式资源调度)
| 特性 | 作用 | 依赖 |
|---|---|---|
| HA | 物理机故障时,在其他正常主机上自动重启 VM,业务快速恢复 | 集群 + 共享存储 |
| DRS | 自动在主机间调度 VM,平衡各主机负载(自动热迁移) | 集群 + vCenter |
注意:HA 是"故障后重启"(有短暂中断,不是无缝),热迁移是"计划内无感搬家"。
五、★ 云管理平台:OpenStack(IaaS 的"总装车间")
KVM/ESXi 解决了"单机虚拟化",但当主机有成百上千台、要对外提供"自助式、可计量"的云服务时,需要一个云管理平台把计算、存储、网络统一编排。
OpenStack 是最主流的开源 IaaS 云平台,它本身不是 Hypervisor,而是管理底层 Hypervisor(通常是 KVM)的上层软件。
核心组件记忆:
- Nova:计算(创建/调度虚拟机);
- Neutron:网络(虚拟网络、路由、安全组);
- Cinder:块存储(云硬盘);
- Glance:镜像(虚拟机模板);
- Keystone:认证(用户、租户、权限);
- Horizon:Web 管理界面;
- Swift:对象存储。
对应关系:
- OpenStack 之于 KVM,相当于 vCenter 之于 ESXi;
- 自建私有云典型方案 = OpenStack + KVM + Ceph;
- 公有云(阿里云/AWS)= 厂商自研的云平台 + 底层 KVM/Xen。
六、从虚拟化到容器:隔离粒度的再次进化
虚拟化解决了"一台物理机跑多台虚拟机",但虚拟机仍然包含完整操作系统,启动慢(分钟级)、资源开销大。
人们开始思考:能不能不跑完整 Guest OS,只把"应用"隔离起来?这就是下一篇的 容器:
| 对比 | 虚拟机 | 容器 |
|---|---|---|
| 隔离级别 | 操作系统级(Hypervisor) | 进程级(内核 Namespace) |
| 是否带 Guest OS | 是(完整 OS) | 否(共享宿主机内核) |
| 启动 | 分钟级 | 秒级/毫秒级 |
| 资源开销 | 大 | 极小 |
| 单机能跑数量 | 几十台 | 上千个 |
| 隔离强度 | 强 | 较弱(共享内核) |
七、本篇总结
请记住这些"同类"与"分工"关系:
- Hypervisor:KVM / ESXi / Xen / Hyper-V;
- 部署形态:Type-1 裸金属 / Type-2 寄居;
- 虚拟化技术:全虚拟化 / 半虚拟化 / 硬件辅助;
- KVM 内部:KVM(CPU/内存)+ QEMU(I/O)+ libvirt(管理);
- VMware:ESXi(底层)+ vCenter(管理)= vSphere(产品包);
- 平台:OpenStack(开源 IaaS)/ vSphere(商业)/ 公有云;
- 特性:快照(回滚)/ 模板(克隆)/ 热迁移(计划内搬家)/ HA(故障重启)/ DRS(负载均衡)。
下一篇:我们进入云原生的核心——容器与 Kubernetes。
你会搞清楚 Docker 容器到底靠什么实现(Namespace/Cgroups)、镜像为什么能分层、Kubernetes 为什么被称为"操作系统级别的大脑",以及它如何管理成千上万的容器。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)