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 体系结构,学习笔记中的不少内容可能已经不适用于现在的内核。

手册

在阅读源码的过程中,可能需要查询下列手册/官方文档:

下面是我根据手册部分章节整理的知识点:

目录

我倾向于将这三本书联系起来阅读,先看 LKD3,然后结合着看另外两本,某些章节 ULK3 更容易理解,某些则是 PLKA 更容易理解。

下面根据个人理解,列出三本书相关章节的联系以及阅读顺序。其中某些标题具有包含的关系,如”文件系统“包含”虚拟文件系统“,但考虑到其内容较多,所以单独拿出来。不论按什么顺序阅读,不同章节之间总是存在一定的交叉引用,很无奈。

内核简介

  1. LKD3 第 1 章:Linux 内核简介
  2. ULK3 第 一 章:绪论
  3. PLKA 第 1 章:简介和概述

内核开发

  1. LKD3 第 2 章:从内核出发
  2. LKD3 第 18 章:调试
  3. LKD3 第 19 章:可移植性
  4. LKD3 第 20 章:补丁、开发和社区
  5. PLKA 附录 A:体系结构相关知识
  6. PLKA 附录 B:使用源代码
  7. PLKA 附录 F:内核开发过程

GCC 扩展语法和内核数据结构

  1. LKD3 第 6 章:内核数据结构
  2. PLKA 附录 C:有关 C 语言的注记

内存管理

  1. LKD3 第 12 章:内存管理
  2. ULK3 第 二 章:内存寻址
  3. ULK3 第 八 章:内存管理
  4. PLKA 第 3 章:内存管理

进程管理

  1. LKD3 第 3 章:进程管理
  2. LKD3 第 4 章:进程调度
  3. ULK3 第 三 章:进程
  4. ULK3 第 七 章:进程调度
  5. PLKA 第 2 章:进程管理和调度

进程地址空间

  1. LKD3 第 15 章:进程地址空间
  2. ULK 第 九 章:进程地址空间
  3. PLKA 第 4 章:进程虚拟内存

系统调用

  1. LKD3 第 5 章:系统调用
  2. ULK3 第 十 章:系统调用
  3. PLKA 第 13 章;系统调用

中断

  1. LKD3 第 7 章:中断和中断处理
  2. LKD3 第 8 章:下半部和推后执行的工作
  3. ULK3 第 四 章:中断和异常
  4. PLKA 第 14 章:内核活动

内核同步

  1. LKD3 第 9 章:内核同步介绍
  2. LKD3 第 10 章:内核同步方法
  3. ULK3 第 五 章:内核同步
  4. PLKA 第 5 章:锁与进程间通信(5.1 和 5.2)

时间管理

  1. LKD3 第 11 章:定时器和时间管理
  2. ULK3 第 六 章:定时测量
  3. PLKA 第 15 章:时间管理

虚拟文件系统

  1. LKD3 第 13 章:虚拟文件系统
  2. ULK3 第 十二 章:虚拟文件系统
  3. PLKA 第 8 章:虚拟文件系统

高速缓存

  1. LKD3 第 16 章:页高速缓存和页回写
  2. ULK3 第 十五 章:页高速缓存
  3. PLKA 第 16 章:页缓存和块缓存
  4. PLKA 第 17 章:数据同步

回收页框

  1. ULK3 第 十七 章:回收页框
  2. PLKA 第 18 章:页面回收和页交换

文件系统

  1. ULK3 第 十六 章:访问文件
  2. ULK3 第 十八 章:Ext2 和 Ext3 文件系统
  3. PLKA 第 9 章:Ext 文件系统族
  4. PLKA 第 10 章:无持久存储的文件系统
  5. PLKA 第 11 章:扩展属性和访问控制表

设备驱动程序

  1. LKD3 第 14 章:块 I/O 层
  2. ULK3 第 十三 章:I/O 体系结构和设备驱动程序
  3. ULK3 第 十四 章:块设备驱动程序
  4. PLKA 第 6 章:设备驱动程序

模块

  1. LKD3 第 17 章:设备与模块
  2. ULK3 附录 二:模块
  3. PLKA 第 7 章:模块

进程间通信

  1. ULK3 第 十一 章:信号
  2. ULK3 第 十九章:进程通信
  3. PLKA 第 5 章:锁与进程间通信(其余部分)

程序的执行

  1. ULK3 第 二十 章:程序的执行
  2. PLKA 附录 E:ELF 二进制格式

系统启动

  1. ULK3 附录 一:系统启动
  2. PLKA 附录 D:系统启动

其他内容

  1. PLKA 第 12 章:网络
  2. PLKA 第 19 章:审计