【深入 Linux 内核架构】系列总览 —— 19 章 + 6 附录全景解读

一句话核心结论:本书是Linux 内核架构的”百科全书”——19 章覆盖进程管理、内存管理、VFS、块 I/O、设备驱动、网络栈、内核同步、启动与调试等所有核心子系统,加上 6 附录讲解数据结构、配置选项、汇编、内核调试、术语表。本系列用 10-12 篇博客 把它讲透。


一、本书定位

graph LR
    A["Linux 学习路径"] --> B["入门\n《鸟哥的Linux私房菜》"]
    A --> C["系统编程\n《UNIX环境高级编程》"]
    A --> D["内核架构\n《深入Linux内核架构》"]
    A --> E["内核源码\n《Linux内核设计与实现》"]

    B -.->|用户态| F["深度"]
    C -.->|系统调用| F
    D -.->|架构| F
    E -.->|源码| F

    style A fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style B fill:#E8D5F5,stroke:#CE93D8,color:#333
    style C fill:#FFDAB9,stroke:#FFAB76,color:#333
    style D fill:#FFB3C6,stroke:#F48FB1,color:#333
    style E fill:#B5EAD7,stroke:#80CBC4,color:#333
    style F fill:#FFF9C4,stroke:#F9A825,color:#333

1.1 与同类书对比

视角难度适合
深入 Linux 内核架构(Mauerer)架构⭐⭐⭐⭐想理解内核子系统如何协作
Linux 内核设计与实现(Love)源码导读⭐⭐⭐想快速入门内核源码
Linux 内核完全注释逐行注释⭐⭐⭐⭐⭐想逐行读懂内核
Understanding the Linux Kernel架构⭐⭐⭐⭐与本书齐名的另一经典
Linux Device Drivers驱动开发⭐⭐⭐想写驱动

1.2 本书特色

  • 架构优先——讲”为什么这样设计”
  • 图示丰富——大量 ASCII 图和流程图
  • 覆盖全面——19 章涵盖所有子系统
  • 附录实用——数据结构、汇编、配置选项速查

二、19 章全景

graph TB
    A["深入 Linux 内核架构 19 章"] --> B["概览 (1)\n内核/用户态/体系结构"]
    A --> C["进程管理 (2-3)\nschedule/fork/exec"]
    A --> D["内存管理 (4-6)\nmalloc/slab/页表"]
    A --> E["VFS (7-8)\n文件系统抽象"]
    A --> F["块 I/O (9)\nbio/scheduler"]
    A --> G["设备驱动 (10-12)\n字符/块/网络"]
    A --> H["网络栈 (13)\nsocket/netfilter"]
    A --> I["同步 (14)\n锁/原子/RCU"]
    A --> J["内核活动 (15-17)\n中断/软中断/tasklet"]
    A --> K["启动 (18-19)\nboot/模块"]
    A --> L["附录 (A-F)\n数据结构/汇编/调试"]

    style A fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style B fill:#E8D5F5,stroke:#CE93D8,color:#333
    style C fill:#FFDAB9,stroke:#FFAB76,color:#333
    style D fill:#FFB3C6,stroke:#F48FB1,color:#333
    style E fill:#B5EAD7,stroke:#80CBC4,color:#333
    style F fill:#FFF9C4,stroke:#F9A825,color:#333
    style G fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style H fill:#E8D5F5,stroke:#CE93D8,color:#333
    style I fill:#FFDAB9,stroke:#FFAB76,color:#333
    style J fill:#FFB3C6,stroke:#F48FB1,color:#333
    style K fill:#B5EAD7,stroke:#80CBC4,color:#333
    style L fill:#FFF9C4,stroke:#F9A825,color:#333

三、19 章目录速览

3.1 第一部分:概览

标题核心内容
1简介与概述内核/用户态、单/多核、ARM/x86 差异、源码结构

3.2 第二部分:进程管理与调度

标题核心内容
2进程管理与调度进程描述符、调度器、O(1)、CFS、实时调度
3进程地址空间VMA、mm_struct、缺页、COW

3.3 第三部分:内存管理

标题核心内容
4内存管理页框分配、伙伴系统、kmalloc、vmalloc
5内核中的内存分配与回收slab、kmem_cache、内存回收
6物理页的换出与换入页面置换、LRU、kswapd、swap

3.4 第四部分:文件系统

标题核心内容
7虚拟文件系统VFS 抽象、超级块、inode、dentry
8Ext 文件系统族Ext2/3/4 实现、磁盘布局、日志

3.5 第五部分:块 I/O

标题核心内容
9块 I/O 层bio、请求队列、调度器(CFQ/Deadline)

3.6 第六部分:设备驱动

标题核心内容
10设备驱动程序字符/块设备、kobject、sysfs
11字符设备tty、终端、串口
12网络设备NIC 驱动、netif

3.7 第七部分:网络栈

标题核心内容
13网络栈socket、TCP/IP、netfilter、路由

3.8 第八部分:内核同步

标题核心内容
14内核同步自旋锁、信号量、RCU、原子操作

3.9 第九部分:内核活动

标题核心内容
15定时器与时间管理jiffies、定时器、时钟中断
16软中断、tasklet 与工作队列bottom half、softirq、workqueue
17内核中数据结构的补充链表、红黑树、基数树

3.10 第十部分:启动与模块

标题核心内容
18模块动态加载、依赖、EXPORT_SYMBOL
19内核移植与启动boot、压缩内核、initramfs

3.11 附录

附录标题
A内核相关的数据结构
B内核相关的高级数据结构
C汇编语言基础
D与体系结构相关
E内核配置选项
F术语表

四、本系列规划:10-12 篇博客

4.1 文章地图

#文章涵盖章节状态
0系列总览全书✅ 已发布
1内核架构总览 + 进程管理第 1-2 章🔜 计划中
2进程地址空间第 3 章🔜 计划中
3内存管理基础第 4 章🔜 计划中
4内存分配器与回收第 5-6 章🔜 计划中
5虚拟文件系统 VFS第 7 章🔜 计划中
6Ext 文件系统族第 8 章🔜 计划中
7块 I/O 层第 9 章🔜 计划中
8设备驱动 + 网络栈第 10-13 章🔜 计划中
9内核同步 + 定时器第 14-15 章🔜 计划中
10中断下半部 + 模块第 16-18 章🔜 计划中
11内核启动 + 附录速查第 19 章 + 附录 A-F🔜 计划中

4.2 文章主题分布

graph TB
    A["10-12 篇文章"] --> B["进程 (1-2)\n进程/调度/地址空间"]
    A --> C["内存 (3-4)\n页框/分配/回收"]
    A --> D["文件系统 (5-6)\nVFS/Ext"]
    A --> E["I/O (7)\n块 I/O"]
    A --> F["驱动 (8)\n字符/块/网络"]
    A --> G["同步 (9)\n锁/原子/RCU"]
    A --> H["内核活动 (10)\n定时器/中断/模块"]
    A --> I["启动 (11)\nboot/附录"]

    style A fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style B fill:#E8D5F5,stroke:#CE93D8,color:#333
    style C fill:#FFDAB9,stroke:#FFAB76,color:#333
    style D fill:#FFB3C6,stroke:#F48FB1,color:#333
    style E fill:#B5EAD7,stroke:#80CBC4,color:#333
    style F fill:#FFF9C4,stroke:#F9A825,color:#333
    style G fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style H fill:#E8D5F5,stroke:#CE93D8,color:#333
    style I fill:#FFDAB9,stroke:#FFAB76,color:#333

五、本系列核心概念图

5.1 Linux 内核架构

graph TB
    subgraph "用户态"
        U["👤 用户进程"]
        S["📞 系统调用 (glibc)"]
    end

    subgraph "内核态"
        SC["🔧 系统调用接口"]
        VFS["📁 VFS"]
        MM["💾 内存管理"]
        SCH["⏰ 调度器"]
        NET["🌐 网络栈"]
        DRV["🔌 设备驱动"]
        BO["🟢 块 I/O"]
    end

    subgraph "硬件"
        HW["💻 CPU/内存/磁盘/网卡"]
    end

    U --> S --> SC
    SC --> VFS
    SC --> MM
    SC --> SCH
    SC --> NET
    SC --> DRV
    DRV --> BO
    VFS --> BO
    MM --> HW
    BO --> HW
    NET --> HW
    DRV --> HW

    style U fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style S fill:#E8D5F5,stroke:#CE93D8,color:#333
    style SC fill:#FFDAB9,stroke:#FFAB76,color:#333
    style VFS fill:#B5EAD7,stroke:#80CBC4,color:#333
    style MM fill:#B5EAD7,stroke:#80CBC4,color:#333
    style SCH fill:#B5EAD7,stroke:#80CBC4,color:#333
    style NET fill:#B5EAD7,stroke:#80CBC4,color:#333
    style DRV fill:#B5EAD7,stroke:#80CBC4,color:#333
    style BO fill:#FFB3C6,stroke:#F48FB1,color:#333
    style HW fill:#FFF9C4,stroke:#F9A825,color:#333

5.2 子系统依赖关系

graph LR
    SCH["⏰ 调度器"] --> MM["💾 内存管理"]
    SCH --> VFS["📁 VFS"]
    MM --> VFS
    VFS --> BO["🟢 块 I/O"]
    BO --> DRV["🔌 设备驱动"]
    DRV --> NET["🌐 网络栈"]
    SCH -.->|线程| NET
    VFS -.->|inode cache| MM
    BO -.->|page cache| MM

    style SCH fill:#FFB3C6,stroke:#F48FB1,color:#333
    style MM fill:#B5EAD7,stroke:#80CBC4,color:#333
    style VFS fill:#FFDAB9,stroke:#FFAB76,color:#333
    style BO fill:#E8D5F5,stroke:#CE93D8,color:#333
    style DRV fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style NET fill:#FFF9C4,stroke:#F9A825,color:#333

六、阅读建议

6.1 适合读者

  • ✅ 想理解 Linux 内核架构的开发者
  • ✅ 操作系统课程的延伸阅读
  • ✅ 准备 Linux 内核开发岗位面试
  • ✅ 内核贡献者的入门读物

6.2 不适合读者

  • ❌ 想”速成”内核开发——请先看《Linux 内核设计与实现》
  • ❌ 想写 Linux 驱动——请看《Linux Device Drivers》
  • ❌ 想学用户态编程——请看《UNIX 环境高级编程》

6.3 推荐路径

graph LR
    A["C 语言基础"] --> B["UNIX 系统编程"]
    B --> C["《Linux 内核设计与实现》"]
    C --> D["《深入Linux内核架构》"]
    D --> E["Linux 内核源码"]

    style A fill:#C7CEEA,stroke:#9FA8DA,color:#333
    style B fill:#E8D5F5,stroke:#CE93D8,color:#333
    style C fill:#FFDAB9,stroke:#FFAB76,color:#333
    style D fill:#FFB3C6,stroke:#F48FB1,color:#333
    style E fill:#B5EAD7,stroke:#80CBC4,color:#333

七、本书与面试

7.1 高频考点

主题面试问得最多的问题
进程管理进程 vs 线程、CFS 调度、fork/exec
内存管理虚拟地址、页表、伙伴系统、slab
VFSinode/dentry/super_block 关系
块 I/Obio 调度器、page cache、buffer cache
同步自旋锁 vs 信号量、RCU、原子操作
中断上下半部、softirq、workqueue
网络栈TCP 三次握手、socket 层次、netfilter

7.2 经验数据

  • 一线大厂后端岗位:30-40% 问内核相关
  • 操作系统岗位:60-70% 问内核
  • 内核开发岗位:必考

八、本系列写作约定

8.1 术语对照

中文英文
进程Process
调度器Scheduler
内存管理Memory Management
虚拟文件系统Virtual File System (VFS)
块 I/OBlock I/O
设备驱动Device Driver
网络栈Network Stack
内核同步Kernel Synchronization
页框Page Frame
伙伴系统Buddy System
写时复制Copy-on-Write (COW)

8.2 内核版本约定

本书基于 Linux 2.6 撰写,但核心思想到 Linux 5.x/6.x 仍然适用

  • ✅ 调度器(CFS):仍然核心
  • ✅ 内存管理(伙伴系统 + slab):仍然核心(slab 已演化为 slub)
  • ✅ VFS:基本不变
  • ✅ 同步(RCU):增强但核心不变
  • ⚠️ 时间管理:tickless 系统等新特性
  • ⚠️ 模块:module 已经成熟

8.3 源码参考

建议对照以下源码:

1
2
3
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
git checkout v6.0 # 或你喜欢的版本

九、系列导航

#文章状态
0本文:系列总览✅ 已发布
1内核架构总览 + 进程管理🔜 计划中
2进程地址空间🔜 计划中
3内存管理基础🔜 计划中
4内存分配器与回收🔜 计划中
5虚拟文件系统 VFS🔜 计划中
6Ext 文件系统族🔜 计划中
7块 I/O 层🔜 计划中
8设备驱动 + 网络栈🔜 计划中
9内核同步 + 定时器🔜 计划中
10中断下半部 + 模块🔜 计划中
11内核启动 + 附录速查🔜 计划中

下一篇:第 1 篇《内核架构总览 + 进程管理》——从内核/用户态、源码结构讲起,深入剖析进程描述符、调度器(CFS/O(1))、实时调度、fork/exec 系统调用。

行动建议

  1. 克隆 Linux 源码——对照阅读
  2. 准备 Linux 环境——VM 或 WSL 2
  3. 本书与《Linux 内核设计与实现》对比阅读——架构 vs 源码
  4. 每个子系统动手实验——写个字符设备
  5. C 语言复习——内核全 C + 汇编