云计算百科
云计算领域专业知识百科平台

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

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

在这里插入图片描述


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

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

  • 进程调度(Process Scheduling)
  • 内存管理(Memory Management)
  • 虚拟文件系统(Virtual File System, VFS)
  • 网络协议栈(Networking Stack)
  • 设备驱动与 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”等概念
    关键抽象层

    用户程序
    ↓ (系统调用: 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 为例

  • Shell 调用 fork() + exec() → 进程调度 创建新进程
  • open("file.txt") 系统调用 → VFS 查找路径,调用 ext4/xfs/EROFS 驱动
  • 文件数据不在内存 → 内存管理 触发缺页中断,从磁盘读入
  • 磁盘 I/O 请求 → I/O 子系统 通过 BFQ 调度器提交到块设备
  • 数据读回后 → 进程被 调度器 唤醒,继续执行 read()
  • 输出到终端 → 通过 网络/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)打下坚实基础。


    赞(0)
    未经允许不得转载:网硕互联帮助中心 » openEuler 内核解读(四):Linux 内核通识:五大子系统概览
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!