第 3 篇 · 操作系统与虚拟化:从一台物理机到一群虚拟机

本篇覆盖全景图的 第 ② 层(操作系统)和第 ③ 层(虚拟化 / IaaS)。

第 2 篇讲了"硬件",但硬件是"死的"。要让硬件跑起来、并把一台物理机变成多台虚拟机,需要两样东西:

  • 操作系统:管理硬件、运行程序;
  • 虚拟化(Hypervisor):在硬件之上"抽象"出多台相互隔离的虚拟机。

本篇把 KVM、QEMU、libvirt、ESXi、vCenter、vSphere、OpenStack、热迁移、快照、模板这些技术的位置和原理一次讲透。


一、操作系统:管理硬件、运行程序的"大管家"

1. 操作系统是什么

操作系统(OS)是管理和控制计算机硬件与软件资源的系统软件,在用户和计算机之间起到连接作用。

它的核心功能有五个:

核心功能职责
进程管理创建/调度/销毁进程,分配 CPU
内存管理为每个进程建立虚拟地址空间,分配/回收内存
文件系统管理在裸硬件上建立结构化的文件组织(“一切皆文件”)
驱动管理为每个外设提供驱动,屏蔽硬件差异
系统调用接口向上层应用提供访问硬件资源的统一接口

2. 内核空间 vs 用户空间(理解一切的基础)

操作系统从逻辑上分成两部分:

内核空间 Kernel Space(特权模式)

用户空间 User Space(受限模式)

系统调用 syscall

应用程序

库函数(如 glibc,封装系统调用)

Shell(命令解释器)

Linux 内核:进程调度 / 内存管理 / 文件系统 / 驱动 / 网络

硬件:CPU / 内存 / 磁盘 / 网卡

几个关键概念:

  • 系统调用(syscall):应用程序要访问内核资源(CPU、内存、I/O),必须通过内核提供的接口。类比:写汉字的"笔画"。
  • 库函数(libc):对系统调用的封装,把简单接口呈现给用户。类比:汉字的"偏旁"。
  • Shell:一个特殊的命令解释器(如 bash),把用户输入的命令翻译成系统调用,本质是对系统调用的封装。

用户态应用访问内核资源有三种方式:系统调用、Shell 脚本、库函数。

3. 内核的内部职责

内核向下控制硬件、向内管理 OS 资源、向上提供系统调用,具体包括:

  • 进程调度和管理:创建/销毁进程,处理进程与外界的联系;
  • 内存管理:为所有进程在有限物理内存上建立虚拟地址空间;
  • 文件系统管理:Linux 几乎"一切皆文件"(目录、设备、套接字、管道都可当文件读写);
  • 设备驱动管理:嵌入每个外设的驱动;
  • 网络资源管理:路由、地址解析都在内核中实现。

4. 常用服务器操作系统

闭源

Windows Server

开源(免费、源码公开)

Linux 发行版
RHEL/CentOS、Ubuntu、Debian、openEuler、麒麟

Unix(多与硬件配套)
AIX、HP-UX、Solaris

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 虚拟机1

Guest OS 客户操作系统

Guest Machine 虚拟机2

Guest OS

  • 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:宿主机物理地址(真实内存)。

Guest 页表(CR3)

EPT 硬件转换

GVA 客户机虚拟地址

GPA 客户机物理地址

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 不是一个孤立的软件,而是一组技术协作:

Hypervisor层

适配层

管理工具层

virt-manager(图形界面)

virsh(命令行)

virt-install(命令行装机)

libvirt(统一管理 API / 守护进程,事实标准)

QEMU(用户态:模拟 I/O 设备)

KVM 内核模块(内核态:CPU/内存虚拟化)

/dev/kvm(QEMU 与 KVM 交互的桥梁,ioctl)

各组件职责(务必分清"谁干什么"):

  • 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 体系)

计算

管理

vCenter Server(VCSA,集中管理多台 ESXi)

ESXi 主机1

ESXi 主机2

ESXi 主机3

  • 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开源 / RedHatLinux 内核模块 + QEMU瘦、复用 Linux、性能好、生态主流
ESXi/vSphereVMware 商业裸金属 + vCenter成熟稳定、功能全、企业级标杆、收费
Xen开源 / Citrix薄 Hypervisor + Dom0安全、支持架构广、早期主流
Hyper-V微软商业裸金属Windows 生态集成好
VMware WorkstationVMware 商业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 预复制,迭代进行):

目标宿主机 源宿主机 目标宿主机 源宿主机 VM 运行中(磁盘在共享存储) 迁移期间 VM 仍在运行,内存又产生变化 当脏页很少时 VM 在目标继续运行 1. 先在目标创建同规格空 VM 2. 第一轮:复制全部内存 3. 迭代复制"脏页"(变化的内存),每轮数据变小 4. 短暂暂停 VM(毫秒级,业务几乎无感) 5. 复制剩余少量内存 + CPU/设备状态 6. 目标拉起 VM,源删除

关键:通过"迭代预复制 + 最后短暂停机",把停机时间压到毫秒级,业务几乎不中断。
若没有共享存储,则需要同时迁移磁盘(存储热迁移),耗时更长。

3. HA(高可用)与 DRS(分布式资源调度)

特性作用依赖
HA物理机故障时,在其他正常主机上自动重启 VM,业务快速恢复集群 + 共享存储
DRS自动在主机间调度 VM,平衡各主机负载(自动热迁移)集群 + vCenter

注意:HA 是"故障后重启"(有短暂中断,不是无缝),热迁移是"计划内无感搬家"。


五、★ 云管理平台:OpenStack(IaaS 的"总装车间")

KVM/ESXi 解决了"单机虚拟化",但当主机有成百上千台、要对外提供"自助式、可计量"的云服务时,需要一个云管理平台把计算、存储、网络统一编排。

OpenStack 是最主流的开源 IaaS 云平台,它本身不是 Hypervisor,而是管理底层 Hypervisor(通常是 KVM)的上层软件。

底层

OpenStack 云平台

Horizon 仪表盘(Web 界面)

Keystone 认证/权限

Nova 计算服务(创建管理 VM)

Glance 镜像服务(存 VM 模板)

Neutron 网络服务(虚拟网络/VLAN/路由)

Cinder 块存储(云硬盘)

Swift 对象存储

KVM / QEMU

物理存储(LUN/NFS)

物理交换机

核心组件记忆:

  • Nova:计算(创建/调度虚拟机);
  • Neutron:网络(虚拟网络、路由、安全组);
  • Cinder:块存储(云硬盘);
  • Glance:镜像(虚拟机模板);
  • Keystone:认证(用户、租户、权限);
  • Horizon:Web 管理界面;
  • Swift:对象存储。

对应关系:

  • OpenStack 之于 KVM,相当于 vCenter 之于 ESXi;
  • 自建私有云典型方案 = OpenStack + KVM + Ceph;
  • 公有云(阿里云/AWS)= 厂商自研的云平台 + 底层 KVM/Xen。

六、从虚拟化到容器:隔离粒度的再次进化

虚拟化解决了"一台物理机跑多台虚拟机",但虚拟机仍然包含完整操作系统,启动慢(分钟级)、资源开销大。

人们开始思考:能不能不跑完整 Guest OS,只把"应用"隔离起来?这就是下一篇的 容器:

更轻、更快、更细

容器方案(进程级隔离)

App + Bins/Libs(容器)

App + Bins/Libs(容器)

共享宿主机内核

虚拟机方案(Hypervisor 级隔离)

App + Bins/Libs + 完整 Guest OS

App + 完整 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 为什么被称为"操作系统级别的大脑",以及它如何管理成千上万的容器。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐