• 自序
  • 目录
  • 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 参考文献