Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Linux 内核空间五大核心子系统 与 namespaces、cgroups 等等的关系

Linux 内核空间有五大核心子系统,namespaces,cgroups,UnionFS,NUMA,runc 等等,与五大核心子系统的关系是什么?

这是一个非常关键、但经常被讲乱的问题

内核视角 -> 机制归属 -> 关系映射,一次性把它理清楚。


一、先定锚:Linux 内核的“五大核心子系统”是什么

内核空间的五大核心子系统(这是“内核内部结构”的划分):

  1. 进程管理(Process)
  2. 内存管理(Memory)
  3. 文件系统(VFS / FS)
  4. 网络子系统(Networking)
  5. 设备与驱动(Devices / Drivers)

👉 它们是 内核的基础功能模块,决定了 Linux 能不能运行程序、用内存、读写文件、收发网络、驱动硬件。


二、namespaces / cgroups / UnionFS / NUMA / runc 是什么层级的东西?

结论先给出:

它们不是第六、第七个“核心子系统” 而是构建在五大核心子系统之上的“内核机制 / 资源管理模型 / 用户态控制工具”


三、逐一说明:它们分别“依附”在哪些核心子系统上

1️⃣ namespaces(命名空间)

本质: 👉 隔离视图(让进程“看到的世界”不同)

归属关系(非常重要)

Namespace 类型 依赖的核心子系统
PID namespace 进程管理
Mount namespace 文件系统
Network namespace 网络子系统
IPC namespace 进程管理
UTS namespace 进程管理
User namespace 进程管理 + 权限模型

结论

namespaces 不是独立子系统 它是 对“进程 / 文件系统 / 网络”等核心子系统做“视图隔离”


2️⃣ cgroups(控制组)

本质: 👉 限制与统计资源使用

归属关系

控制对象 对应核心子系统
CPU 配额 / 调度 进程管理
内存上限 / OOM 内存管理
块 IO 限速 文件系统 / 块设备
网络流量 网络子系统

结论

cgroups 是 对五大核心子系统“资源分配能力”的统一封装


3️⃣ UnionFS / overlayfs / overlay2

本质: 👉 文件系统叠加机制

归属关系

组件 归属
VFS 文件系统核心
overlayfs 文件系统驱动
overlay2 Docker 对 overlayfs 的使用方式

结论

UnionFS / overlayfs 完全属于文件系统子系统内部


4️⃣ NUMA(非一致内存访问)

本质: 👉 硬件内存拓扑感知模型

归属关系

影响对象 内核子系统
内存分配 内存管理
CPU 亲和性 进程管理
中断分配 设备与驱动

结论

NUMA 是 内存管理 + 进程调度 + 硬件拓扑的组合机制


5️⃣ runc

本质: 👉 用户态容器运行器

注意: ⚠️ 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:用户态对内核能力的统一调用者

六、再给你一个“判断标准”

凡是通过系统调用实现的隔离与限制 -> 内核机制 凡是组合这些机制并启动进程 -> 用户态工具