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
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
VFS
inode/dentry/super_block 关系
块 I/O
bio 调度器、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/O
Block 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 # 或你喜欢的版本