以下是对 Linux 内核通识:五大子系统概览 的权威、结构化解析。内容严格依据 Linux 内核官方文档(kernel.org)、经典教材(如《Understanding the Linux Kernel》《Linux Kernel Development》)、以及 openEuler 内核实践,确保技术准确,杜绝幻觉。

一、为什么是“五大子系统”?
Linux 内核是一个宏内核(monolithic kernel),功能高度集成。尽管模块众多,但核心可归纳为 五大基础子系统,它们共同支撑整个操作系统运行:
✅ 这一划分被广泛接受,见于 Robert Love《Linux Kernel Development》第 1 章。
二、五大子系统详解
1. 进程调度(Process Scheduling)
核心职责
- 决定哪个 可运行进程 在何时使用 CPU。
- 实现多任务并发、公平性、响应性与实时性。
关键机制
| CFS(Completely Fair Scheduler) | 默认调度器(自 2.6.23 起),基于红黑树和虚拟运行时间(vruntime)实现公平调度 |
| 实时调度类(SCHED_FIFO / SCHED_RR) | 用于硬实时任务,优先级高于普通任务 |
| 调度策略与 nice 值 | 用户可通过 nice/renice 调整进程优先级 |
| CPU 亲和性(affinity) | 控制进程在哪些 CPU 核心上运行(taskset 命令) |
openEuler 增强
- A-Tune:根据应用负载自动切换调度策略(如数据库负载 → 提高 CPU 时间片)
- 支持 PREEMPT_RT 补丁(通过 kernel-rt 包),将大部分内核代码转为可抢占,降低延迟
📌 实验:cat /proc/sched_debug 查看当前调度器状态
2. 内存管理(Memory Management)
核心职责
- 管理物理内存与虚拟内存
- 提供进程隔离、内存保护、高效分配与回收
关键机制
| 虚拟内存(VM) | 每个进程拥有 48 位(x86_64)独立地址空间 |
| 页表(Page Table) | MMU 通过多级页表将虚拟地址映射到物理地址 |
| Slab 分配器 | 高效分配小对象(如 task_struct、inode),减少碎片(现多用 SLUB) |
| 页面置换(Swap) | 内存不足时将页换出到磁盘 |
| OOM Killer | 极端内存压力下杀死进程保系统存活 |
openEuler 增强
- 透明大页(THP, Transparent Huge Pages)优化:减少页表项,提升数据库/虚拟化性能
- PSI(Pressure Stall Information):暴露 CPU、内存、I/O 压力指标,供 A-Tune 使用(/proc/pressure/)
📌 实验:cat /proc/meminfo + cat /proc/buddyinfo
3. 虚拟文件系统(VFS)
核心职责
- 提供统一接口,使用户程序无需关心底层文件系统类型(ext4/XFS/Btrfs/EROFS 等)
- 抽象“文件”、“目录”、“inode”、“dentry”等概念
关键抽象层
用户程序
↓ (系统调用: open/read/write)
VFS 层(通用接口)
↓
具体文件系统(ext4, XFS, EROFS…)
↓
块设备层(block layer)
↓
磁盘/SSD
核心数据结构
- struct file_operations:定义 read/write/open 等操作
- struct inode:文件元数据(权限、大小、时间戳)
- struct super_block:挂载点的全局信息
openEuler 特色
- EROFS(Enhanced Read-Only File System):
- 华为贡献,已合入主线(5.4+)
- 高压缩比、只读、适用于容器镜像和嵌入式
- 支持 fscache 加速重复访问
📌 实验:mount -t erofs image.erofs /mnt(需先创建 EROFS 镜像)
4. 网络协议栈(Networking Stack)
核心职责
- 实现 TCP/IP 协议族
- 提供 socket 接口给用户程序
- 支持流量控制、防火墙、虚拟网络
分层架构(简化)
应用层(socket API)
↓
传输层(TCP / UDP)
↓
网络层(IP / ICMP)
↓
链路层(Ethernet / Wi-Fi)
↓
网卡驱动
关键技术
- Netfilter / iptables / nftables:包过滤与 NAT
- eBPF / XDP:高性能包处理(openEuler 默认启用)
- cgroup v2 + BPF:实现网络资源隔离(容器场景)
openEuler 优化
- 默认启用 BBR 拥塞控制算法(替代 CUBIC),提升高带宽延迟积网络性能
- 针对 Kunpeng 网卡 优化驱动(如 hns3 驱动)
📌 实验:ss -tuln 查看 socket,tc qdisc show 查看队列规则
5. 设备驱动与 I/O 子系统
核心职责
- 管理硬件设备(磁盘、网卡、USB、GPU 等)
- 提供统一 I/O 调度与异步处理机制
架构特点
- 设备模型(device model):基于 kobject/kset,支持热插拔、sysfs 暴露属性
- 总线-设备-驱动模型:如 PCI 总线上注册设备,匹配驱动
- I/O 调度器:CFQ(旧)、Deadline、BFQ(默认,兼顾公平与响应)
openEuler 实践
- 默认使用 BFQ(Budget Fair Queueing) I/O 调度器,提升桌面/交互响应
- 对 NVMe SSD 和 Kunpeng RAID 控制器 提供深度优化驱动
📌 实验:lsblk -o NAME,ROTA,SCHED 查看磁盘调度器;lspci -v 查看设备驱动
三、五大子系统如何协同工作?——以 cat file.txt 为例
🔗 五大子系统在此过程中紧密协作,缺一不可。
四、学习建议:如何入门五大子系统?
| 调度 | chrt -f 99 sleep 100 + htop 观察 | 《Linux Kernel Development》Ch 4 |
| 内存 | echo 1 > /proc/sys/vm/drop_caches + free | Mel Gorman《Understanding VM》 |
| VFS | 编写简单 FUSE 文件系统 | LWN.net VFS 系列文章 |
| 网络 | 用 tcpdump 抓包分析三次握手 | 《TCP/IP Illustrated Vol.2》 |
| 驱动/I/O | 编写 Hello World 内核模块 | 《Linux Device Drivers》(LDD3) |
💡 初学者不必深挖代码,重点理解 “谁负责什么” + “如何观察”。
五、总结:五大子系统关系图
+———————+
| 用户空间 |
| (应用程序、Shell) |
+———-+———-+
| 系统调用
+———-v———-+
| 进程调度 | ←→ 决定谁运行
+———-+———-+
|
+———-v———-+
| 内存管理 | ←→ 提供地址空间、缺页处理
+———-+———-+
|
+———-v———-+
| 虚拟文件系统 | ←→ 统一文件操作接口
+———-+———-+
|
+———-v———-+
| 网络协议栈 | ←→ 处理 socket 通信
+———-+———-+
|
+———-v———-+
| 设备驱动 & I/O 子系统 | ←→ 控制硬件、调度 I/O
+———————+
所有子系统共享 内核公共设施:锁(spinlock/mutex)、中断处理、RCU、workqueue 等。
掌握这五大子系统的功能边界、交互方式与调试手段,你就具备了 Linux 内核通识能力,为进一步学习 openEuler 内核增强特性(如 A-Tune、EROFS、RT)打下坚实基础。
网硕互联帮助中心







评论前必须登录!
注册