Linux 内核空间五大核心子系统 与 namespaces、cgroups 等等的关系
Linux 内核空间有五大核心子系统,namespaces,cgroups,UnionFS,NUMA,runc 等等,与五大核心子系统的关系是什么?
这是一个非常关键、但经常被讲乱的问题。
按 内核视角 -> 机制归属 -> 关系映射,一次性把它理清楚。
内核空间的五大核心子系统(这是“内核内部结构”的划分):
- 进程管理(Process)
- 内存管理(Memory)
- 文件系统(VFS / FS)
- 网络子系统(Networking)
- 设备与驱动(Devices / Drivers)
👉 它们是 内核的基础功能模块,决定了 Linux 能不能运行程序、用内存、读写文件、收发网络、驱动硬件。
结论先给出:
它们不是第六、第七个“核心子系统” 而是构建在五大核心子系统之上的“内核机制 / 资源管理模型 / 用户态控制工具”
本质: 👉 隔离视图(让进程“看到的世界”不同)
归属关系(非常重要):
| Namespace 类型 | 依赖的核心子系统 |
|---|---|
| PID namespace | 进程管理 |
| Mount namespace | 文件系统 |
| Network namespace | 网络子系统 |
| IPC namespace | 进程管理 |
| UTS namespace | 进程管理 |
| User namespace | 进程管理 + 权限模型 |
✅ 结论
namespaces 不是独立子系统 它是 对“进程 / 文件系统 / 网络”等核心子系统做“视图隔离”
本质: 👉 限制与统计资源使用
归属关系:
| 控制对象 | 对应核心子系统 |
|---|---|
| CPU 配额 / 调度 | 进程管理 |
| 内存上限 / OOM | 内存管理 |
| 块 IO 限速 | 文件系统 / 块设备 |
| 网络流量 | 网络子系统 |
✅ 结论
cgroups 是 对五大核心子系统“资源分配能力”的统一封装
本质: 👉 文件系统叠加机制
归属关系:
| 组件 | 归属 |
|---|---|
| VFS | 文件系统核心 |
| overlayfs | 文件系统驱动 |
| overlay2 | Docker 对 overlayfs 的使用方式 |
✅ 结论
UnionFS / overlayfs 完全属于文件系统子系统内部
本质: 👉 硬件内存拓扑感知模型
归属关系:
| 影响对象 | 内核子系统 |
|---|---|
| 内存分配 | 内存管理 |
| CPU 亲和性 | 进程管理 |
| 中断分配 | 设备与驱动 |
✅ 结论
NUMA 是 内存管理 + 进程调度 + 硬件拓扑的组合机制
本质: 👉 用户态容器运行器
注意: ⚠️ runc 不在内核中
它做的事是:
- 调用
clone()-> 创建进程 - 配置 namespaces -> 隔离视图
- 配置 cgroups -> 限制资源
- 设置 rootfs -> 使用 overlayfs
- 最终
execve()-> 启动应用进程
✅ 结论
runc 是 用户空间对内核能力的“编排器”
┌───────────────────────────────────┐
│ 用户空间 │
│ │
│ Docker / Podman / containerd │
│ │ │
│ runc │
│ │ │
└──────────────┼────────────────────┘
│ 系统调用
┌──────────────▼────────────────────┐
│ Linux 内核 │
│ │
│ ┌──────── 进程管理 ────────────┐ │
│ │ PID / 调度 / namespace │ │
│ └─────────────────────────────┘ │
│ │
│ ┌──────── 内存管理 ────────────┐ │
│ │ 页分配 / NUMA / cgroups │ │
│ └─────────────────────────────┘ │
│ │
│ ┌──────── 文件系统 ────────────┐ │
│ │ VFS / overlayfs / UnionFS │ │
│ └─────────────────────────────┘ │
│ │
│ ┌──────── 网络子系统 ──────────┐ │
│ │ netns / veth / iptables │ │
│ └─────────────────────────────┘ │
│ │
│ ┌────── 设备与驱动 ────────────┐ │
│ │ 块设备 / 网卡 / 中断 │ │
│ └─────────────────────────────┘ │
└───────────────────────────────────┘
- 五大核心子系统:内核的“基础能力”
- namespaces:隔离这些能力的“视图”
- cgroups:限制这些能力的“额度”
- UnionFS / overlayfs:文件系统子系统的一种实现
- NUMA:内存与 CPU 的硬件拓扑优化机制
- runc:用户态对内核能力的统一调用者
凡是通过系统调用实现的隔离与限制 -> 内核机制 凡是组合这些机制并启动进程 -> 用户态工具