openEuler 内核解读(四):Linux 内核通识:五大子系统概览

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


一、为什么是"五大子系统"?

Linux 内核是一个宏内核(monolithic kernel),功能高度集成。尽管模块众多,但核心可归纳为 五大基础子系统,它们共同支撑整个操作系统运行:

  1. 进程调度(Process Scheduling)
  2. 内存管理(Memory Management)
  3. 虚拟文件系统(Virtual File System, VFS)
  4. 网络协议栈(Networking Stack)
  5. 设备驱动与 I/O 管理(Device Drivers & I/O Subsystem)

✅ 这一划分被广泛接受,见于 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"等概念
关键抽象层
text 复制代码
用户程序
   ↓ (系统调用: 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 接口给用户程序
  • 支持流量控制、防火墙、虚拟网络
分层架构(简化)
text 复制代码
应用层(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 SSDKunpeng RAID 控制器 提供深度优化驱动

📌 实验:lsblk -o NAME,ROTA,SCHED 查看磁盘调度器;lspci -v 查看设备驱动


三、五大子系统如何协同工作?------以 cat file.txt 为例

  1. Shell 调用 fork() + exec()进程调度 创建新进程
  2. open("file.txt") 系统调用VFS 查找路径,调用 ext4/xfs/EROFS 驱动
  3. 文件数据不在内存内存管理 触发缺页中断,从磁盘读入
  4. 磁盘 I/O 请求I/O 子系统 通过 BFQ 调度器提交到块设备
  5. 数据读回后 → 进程被 调度器 唤醒,继续执行 read()
  6. 输出到终端 → 通过 网络/TTY 子系统(若 SSH)或直接显示

🔗 五大子系统在此过程中紧密协作,缺一不可。


四、学习建议:如何入门五大子系统?

子系统 入门实验 推荐资料
调度 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)打下坚实基础。


相关推荐
NotStrandedYet4 天前
《国产系统运维笔记》第2期:在 openEuler 24.03 LTS 上在线部署 Tomcat 9 全记录
java·tomcat·信创·国产化·openeuler·信创运维·国产化运维
lightningyang9 天前
利用 OpenSSL 进行国际算法加密通信实验
服务器·密码学·openeuler·天枢一体化虚拟仿真靶场平台·openssl国际算法加密通信·密码实训
王闯写bug10 天前
【openEuler】修改ssh端口号
服务器·网络·ssh·openeuler
lightningyang10 天前
openEluer下CA根证书服务器部署与web服务器证书申请
openeuler·ca·天枢一体化虚拟仿真靶场平台
猫头虎13 天前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
飞翔沫沫情14 天前
OpenEuler 发行版 二进制部署docker
docker·openeuler·容器引擎
菠萝蚊鸭21 天前
openEuler-24.03 ARM64 源码编译 RedisInsight
openeuler·arm64·redisinsight
NotStrandedYet25 天前
CentOS停更后的新选择:图文详解安装6.x内核openEuler+GNOME图形桌面
linux·运维·信创·国产化·openeuler·国产操作系统
lightningyang1 个月前
Hadoop 分布式集群配置(OpenEuler 1主2)
hadoop·openeuler·天枢一体化虚拟仿真靶场平台