自序
目录
Chapter 1 本书导读
1.1 为什么研究Linux内核
1.1.1 Linux的历史来源
1.1.2 Linux取得的成功
1.1.3 Linux的前景展望
1.2 选择什么版本进行研究
1.3 内核基本结构
1.3.1 内核在操作系统中地位
1.3.2 内核源代码目录树简介
1.3.3 版本2.6内核的新特性
1.4 如何阅读本书
1.4.1 本书内容简介
1.4.2 内核探索工具
1.4.3 推荐阅读方法
Chapter 2 引导过程
2.1 内核镜像的构建过程
2.1.1 编译内核的步骤及分析
2.1.2 内核镜像构建过程分析
2.2 系统引导过程分析
2.2.1 傀儡引导扇区
2.2.2 探测系统资源
2.2.3 解压内核镜像
2.2.4 进入保护模式
2.2.5 系统最终初始化
2.3 系统引导过程总结
Chapter 3 内存管理
3.1 基础知识
3.1.1 存储器地址
3.1.2 分段机制
3.1.3 分页机制
3.2 内核页表的初始化过程
3.2.1 启用分页机制
3.2.2 构建内核页表
3.3 物理内存的描述方法
3.3.1 内存节点
3.3.2 内存区域
3.3.3 物理页框
3.4 物理内存的初始化过程
3.4.1 探测系统物理内存
3.4.2 初始化内存分配器
3.5 物理内存的分配与回收
3.5.1 伙伴分配算法
3.5.2 对象缓冲技术
3.6 内核地址空间
3.6.1 常规映射地址空间
3.6.2 固定映射地址空间
3.6.3 长久内核映射空间
3.6.4 临时内核映射空间
3.6.5 非连续映射地址空间
Chapter 4 进程管理
4.1 进程与线程的概念
4.1.1 程序与进程
4.1.2 进程与线程
4.2 进程描述符
4.2.1 进程标识符
4.2.2 进程的状态
4.2.3 进程上下文
4.2.4 当前进程
4.3 进程的组织形式
4.3.1 进程标识符构成的哈希表
4.3.2 所有进程构成的双向链表
4.3.3 执行态进程组成的运行队列
4.3.4 阻塞态进程组成的等待队列
4.4 进程的创建过程
4.4.1 进程创建的接口函数
4.4.2 进程创建的处理过程
4.5 进程的调度算法
4.5.1 进程的分类
4.5.2 进程优先级
4.5.3 时间片分配
4.5.4 进程调度时机
4.6 进程切换过程分析
4.6.1 选取合适进程
4.6.2 完成上下文切换
4.7 空闲进程的初始化
4.7.1 空闲进程的内核态栈
4.7.2 空闲进程的内存描述符
4.7.3 空闲进程的硬件上下文
4.7.4 空闲进程的任务状态段
Chapter 5 中断和异常
5.1 基础知识
5.1.1 中断和异常的定义
5.1.2 中断和异常的分类
5.1.3 中断和异常的对比
5.2 处理机制
5.2.1 IA32架构下的处理机制
5.2.2 Linux内核的实现策略
5.3 中断描述符表的初始化
5.3.1 中断描述符表的初步初始化
5.3.2 中断描述符表的最终初始化
5.4 具体处理过程
5.4.1 公用的硬件处理阶段
5.4.2 中断的软件处理阶段
5.4.3 异常的软件处理阶段
5.5 延迟处理机制
5.5.1 softirq延迟处理
5.5.2 tasklet延迟处理
5.5.3 work queue延迟处理
Chapter 6 时间度量
6.1 硬件支持
6.1.1 实时钟RTC
6.1.2 系统时钟
6.2 软件架构
6.2.1 jiffies时间
6.2.2 xtime时间
6.2.3 内核定时器
6.3 时间度量的初始化步骤
6.3.1 内核定时器初始化
6.3.2 系统时钟的初始化
6.3.3 时钟中断源初始化
6.4 时钟中断处理过程
6.4.1 找回遗失的时钟中断
6.4.2 更新jiffies_64、xtime
6.4.3 对当前进程记账
6.4.4 时钟中断处理小结
6.5 内核定时器工作原理
6.5.1 内核定时器初始化
6.5.2 激活内核定时器
6.5.3 内核定时器的处理
6.6 微秒级延迟
6.6.1 微妙级延迟的访问接口
6.6.2 微妙级延迟的实现方法
Chapter 7 系统调用
7.1 系统服务接口的种类
7.1.1 系统调用接口
7.1.2 应用编程接口
7.2 系统调用的访问手段
7.2.1 使用封装函数
7.2.2 使用通用接口
7.2.3 使用内嵌汇编
7.3 系统调用的工作机制
7.3.1 系统调用的基本要素
7.3.2 系统调用门的初始化
7.3.3 系统调用的处理过程
7.4 系统调用的参数传递
7.4.1 少量数据的情况
7.4.2 大量数据的情况
7.5 如何添加新系统调用
7.5.1 前期准备工作
7.5.2 添加处理函数
7.5.3 测试新系统调用
7.6 什么是快速系统调用
7.6.1 工作机制
7.6.2 实现策略
7.6.3 处理过程
Chapter 8 同步机制
8.1 同步原理
8.1.1 原子变量
8.1.2 中断禁用
8.1.3 内核态抢占
8.2 自旋锁机制
8.2.1 普通自旋锁
8.2.1.1 单处理器系统下工作原理
8.2.1.2 多处理器系统下工作原理
8.2.2 读写自旋锁
8.2.2.1 读锁定工作原理
8.2.2.2 写锁定工作原理
8.2.3 顺序自旋锁
8.2.3.1 读访问工作原理
8.2.3.2 写访问工作原理
8.3 信号量机制
8.3.1 普通信号量
8.3.1.1 加锁处理过程
8.3.1.1 解锁处理过程
8.3.2 读写信号量
8.4 其他同步机制
8.4.1 每处理器变量
8.4.2 RCU同步机制
附录A 内核双向链表
A.1 内核链表表头
A.2 内核链表遍历
A.3 内核链表操作
附录B 内核代码分析
B.1 引导代码分析
B.1.1 文件src/arch/i386/boot/bootsect.S
B.1.2 文件src/arch/i386/boot/setup.S
B.1.3 文件src/arch/i386/boot/compressed/head.S
B.1.4 文件src/arch/i386/boot/compressed/misc.c
B.1.5 文件src/arch/i386/kernel/head.S
B.2 内核关键代码段
B.2.1 进程拷贝
附录C 跟踪调试内核
C.1 安装辅助工具
C.2 准备内核镜像
C.3 准备根文件系统
C.4 进行源码级调试
附录D 内核汇编语法
D.1 常规汇编语法
D.2 内嵌汇编语法
D.2.1 内嵌汇编举例
D.2.2 内嵌汇编格式之——格式框架
D.2.3 内嵌汇编格式之——汇编语句
D.2.3 内嵌汇编格式之——输出列表
D.2.4 内嵌汇编格式之——输入列表
D.2.5 内嵌汇编格式之——修饰字符
D.2.6 内嵌汇编格式之——破坏描述
附录E 参考文献