Linux 内核学习笔记系列,整理《深入理解 Linux 内核》(第三版,以下简称 ULK3)、《Linux 内核设计与实现》(原书第 3 版,以下简称 LKD3)和《深入 Linux 内核架构》(以下简称 PLKA)相关章节的联系以及个人理解。
引言
本文将作为 Linux 内核学习笔记系列的目录。原计划用一年时间,初步阅读这三本书籍,逐渐完善相关学习笔记。现在正式宣告计划破产,之后不定期填坑(逃
这三本讲解 Linux 内核的经典书籍,都基于 Linux 2.6 版本的内核。ULK3 基于 Linux 2.6.11 版本,LKD3 基于 Linux 2.6.34 版本,PLKA 基于 Linux 2.6.24 版本。
虽然书中很多内容已经过时,但对于入门内核来说还是非常不错的选择。2.6 版本的 Linux 内核源码可以在 https://www.kernel.org/pub/linux/kernel/v2.6/ 上下载,本系列学习笔记将基于 2.6.34 版本。
注意,本系列学习笔记只记录根据三本书籍整理的内容,即到 Linux 2.6.34 为止,且仅针对 x86 体系结构,学习笔记中的不少内容可能已经不适用于现在的内核。
手册
在阅读源码的过程中,可能需要查询下列手册/官方文档:
- GCC 在线文档(包括 GCC、CPP 等)
- GNU Binutils 在线文档(包括 ld、as 等)
- GNU 在线文档(除了上述两个,还包括 Make 等)
- Linux Kernel 在线文档
下面是我根据手册部分章节整理的知识点:
目录
我倾向于将这三本书联系起来阅读,先看 LKD3,然后结合着看另外两本,某些章节 ULK3 更容易理解,某些则是 PLKA 更容易理解。
下面根据个人理解,列出三本书相关章节的联系以及阅读顺序。其中某些标题具有包含的关系,如”文件系统“包含”虚拟文件系统“,但考虑到其内容较多,所以单独拿出来。不论按什么顺序阅读,不同章节之间总是存在一定的交叉引用,很无奈。
内核简介
- LKD3 第 1 章:Linux 内核简介
- ULK3 第 一 章:绪论
- PLKA 第 1 章:简介和概述
内核开发
- LKD3 第 2 章:从内核出发
- LKD3 第 18 章:调试
- LKD3 第 19 章:可移植性
- LKD3 第 20 章:补丁、开发和社区
- PLKA 附录 A:体系结构相关知识
- PLKA 附录 B:使用源代码
- PLKA 附录 F:内核开发过程
GCC 扩展语法和内核数据结构
- LKD3 第 6 章:内核数据结构
- PLKA 附录 C:有关 C 语言的注记
内存管理
- LKD3 第 12 章:内存管理
- ULK3 第 二 章:内存寻址
- ULK3 第 八 章:内存管理
- PLKA 第 3 章:内存管理
进程管理
- LKD3 第 3 章:进程管理
- LKD3 第 4 章:进程调度
- ULK3 第 三 章:进程
- ULK3 第 七 章:进程调度
- PLKA 第 2 章:进程管理和调度
进程地址空间
- LKD3 第 15 章:进程地址空间
- ULK 第 九 章:进程地址空间
- PLKA 第 4 章:进程虚拟内存
系统调用
- LKD3 第 5 章:系统调用
- ULK3 第 十 章:系统调用
- PLKA 第 13 章;系统调用
中断
- LKD3 第 7 章:中断和中断处理
- LKD3 第 8 章:下半部和推后执行的工作
- ULK3 第 四 章:中断和异常
- PLKA 第 14 章:内核活动
内核同步
- LKD3 第 9 章:内核同步介绍
- LKD3 第 10 章:内核同步方法
- ULK3 第 五 章:内核同步
- PLKA 第 5 章:锁与进程间通信(5.1 和 5.2)
时间管理
- LKD3 第 11 章:定时器和时间管理
- ULK3 第 六 章:定时测量
- PLKA 第 15 章:时间管理
虚拟文件系统
- LKD3 第 13 章:虚拟文件系统
- ULK3 第 十二 章:虚拟文件系统
- PLKA 第 8 章:虚拟文件系统
高速缓存
- LKD3 第 16 章:页高速缓存和页回写
- ULK3 第 十五 章:页高速缓存
- PLKA 第 16 章:页缓存和块缓存
- PLKA 第 17 章:数据同步
回收页框
- ULK3 第 十七 章:回收页框
- PLKA 第 18 章:页面回收和页交换
文件系统
- ULK3 第 十六 章:访问文件
- ULK3 第 十八 章:Ext2 和 Ext3 文件系统
- PLKA 第 9 章:Ext 文件系统族
- PLKA 第 10 章:无持久存储的文件系统
- PLKA 第 11 章:扩展属性和访问控制表
设备驱动程序
- LKD3 第 14 章:块 I/O 层
- ULK3 第 十三 章:I/O 体系结构和设备驱动程序
- ULK3 第 十四 章:块设备驱动程序
- PLKA 第 6 章:设备驱动程序
模块
- LKD3 第 17 章:设备与模块
- ULK3 附录 二:模块
- PLKA 第 7 章:模块
进程间通信
- ULK3 第 十一 章:信号
- ULK3 第 十九章:进程通信
- PLKA 第 5 章:锁与进程间通信(其余部分)
程序的执行
- ULK3 第 二十 章:程序的执行
- PLKA 附录 E:ELF 二进制格式
系统启动
- ULK3 附录 一:系统启动
- PLKA 附录 D:系统启动
其他内容
- PLKA 第 12 章:网络
- PLKA 第 19 章:审计