虚拟化与 KVM
这页讲的是:Linux 不只自己跑应用,它还可以帮助一台机器像承载多台机器那样工作。学这页的重点,是把“容器共享内核”和“虚拟机拥有独立内核”这两种思路区分清楚。
这块是什么
虚拟化讲的是如何让一台物理机器在较强隔离下运行多个“像完整机器一样”的来宾系统。KVM 则是 Linux 内核中支撑这种能力的重要组成部分。和容器不同,这里强调的不只是视图隔离,而是让不同 guest 看到自己像在一台独立机器上运行。
如果说容器像“同一栋楼里分隔出的不同房间”,虚拟机更像“在同一块地上搭了多栋各自运行的小楼”。
它负责什么
支撑虚拟机运行
- 帮助 guest 获得 CPU、内存等基础执行环境
- 让来宾系统像在自己的机器上运行
- 利用硬件虚拟化能力提高效率
- 把 Linux 变成虚拟化平台的一部分
组织资源映射与隔离
- 为 guest 组织虚拟 CPU、内存和设备视图
- 控制不同 guest 之间的边界
- 减少相互干扰
- 帮助一台物理机承载多套系统实例
连接更高层虚拟化栈
- 和用户空间虚拟化管理组件协作
- 把底层能力暴露给更高层工具使用
- 服务云主机和测试环境等场景
- 让虚拟化不是抽象概念,而是可运营系统能力
虚拟机和容器最核心的区别
| 维度 | 容器 | 虚拟机 |
|---|
| 内核 | 共享同一个宿主 Linux 内核。 | 每个 guest 通常有自己的内核视角和系统实例。 |
| 隔离思路 | 更像在同一系统里做资源和视图隔离。 | 更像在同一物理机上运行多台逻辑机器。 |
| 开销与灵活性 | 通常更轻、更快启动。 | 通常更重,但隔离和系统独立性更强。 |
| 关注点 | 共享内核下的治理和打包运行。 | 硬件抽象、来宾系统运行和强隔离环境。 |
关键概念
| 概念 | 现在怎么理解 |
|---|
| KVM | Linux 内核中支撑硬件辅助虚拟化的重要能力。 |
| guest | 运行在虚拟机里的来宾系统。 |
| host | 承载虚拟化能力和来宾系统的宿主环境。 |
| vCPU | 分配给来宾系统使用的虚拟 CPU 视图。 |
| 设备虚拟化 | 让 guest 看到可用设备接口,而不必直接掌握真实硬件全部细节。 |
为什么重要
- 虚拟化是现代云计算、测试环境、多租户平台的重要基础。
- 它把调度、内存、设备、隔离和安全等多个底层能力进一步组合起来。
- 理解它有助于你分清容器和虚拟机背后的内核思路差异。
- 它说明 Linux 不只是“运行应用的内核”,也能成为承载其他系统的基础平台。
常见误解
- 误解一:容器和虚拟机只是“轻”和“重”的区别。实际上它们共享内核与否,是更本质的差异。
- 误解二:虚拟化只是用户空间工具的事情。实际上内核在 CPU、内存、设备和隔离层面都参与很深。
- 误解三:学容器就不用理解虚拟化。实际上两者是现代基础设施里互补且常并存的能力。
它不负责什么
- 它不替代容器隔离,而是另一条不同的系统组织思路。
- 它不自己定义所有高层管理体验,很多管理能力在用户空间工具中完成。
- 它不脱离调度、内存、设备和安全这些底座独立存在。
和其他模块的关系
| 相关模块 | 关系 |
|---|
| 调度器 | guest 的执行最终仍要落到宿主机的 CPU 调度上。 |
| 内存管理 | guest 内存视图和宿主资源管理之间需要严密配合。 |
| 设备模型 / 驱动 | 虚拟设备和真实设备之间的衔接离不开设备和驱动组织方式。 |
| 安全 | 更强的隔离能力也意味着对边界和可信执行要求更高。 |
你现在先把虚拟化拆成三层看
| 层次 | 它在做什么 | 为什么这样拆有帮助 |
|---|
| guest 视角 | 来宾系统觉得自己像在一台独立机器上运行。 | 这能帮你理解虚拟机为什么和容器的“共享宿主内核”根本不同。 |
| KVM / 内核能力 | 把 CPU、内存和某些硬件辅助虚拟化能力正式接进 Linux 内核。 | 这说明虚拟化不是单靠用户空间包装出来的幻觉。 |
| 用户空间虚拟化栈 | 更高层工具去创建、管理和编排虚拟机实例。 | 这能帮你把“内核提供底座”和“平台提供管理体验”分开。 |
| 真实物理资源 | 最终 guest 用到的一切,还是要落回宿主机的 CPU、内存和设备。 | 这解释了为什么调度、内存和设备模型始终绕不开虚拟化话题。 |
读完这页后,你应该能回答
- 为什么虚拟机和容器不是同一种隔离思路?
- 为什么 KVM 这种能力必须深深嵌入内核而不是只靠用户空间模拟?
- 为什么虚拟化会把调度、内存、设备和安全这些主题一起带进来?
后面适合继续问:虚拟 CPU 和真实 CPU 的关系是什么?来宾内存和宿主内存是怎样衔接的?为什么虚拟化经常和设备模型一起讨论?