《Linux内核精析》作者长期从事Linux系统特别是嵌入式系统产品的研发,积累了丰富的经验。书中全面、系统、深入地介绍了Linux,对Linux内核进行了深度的剖析。全书共15章,包括概述、Linux内核启动、进程、进程地址空间、进程的调度、内存管理、进程间通信、系统调用、内核同步、设备驱动程序、中断、时钟、文件系统、ext文件系统和内核模块。每一章的内容都深入浅出,文字和程序相结合,每一部分的说明都比较详细,尽可能让读者看得懂、能理解。
《Linux内核精析》可作为Linux操作系统的教学参考书、嵌入式专业学生的教材或参考书,也可供Linux操作系统读者自学和Linux产品开发者参考。
Linux是完全免费、开放、跨平台的操作系统,越来越受到开发商和广大师生、读者及开发者的青睐。特别是嵌入式浪潮的出现,使学习Linux成为时尚。
一个典型的Linux发行版包括Linux内核、GNU程序库和工具,Linux的发行版本与内核版本号是相互独立的,Linux的发行版本号随发布者的不同而不同。
学习Linux的关键在于对内核的理解和把握,全面、系统、深入介绍Linux和对Linux内核进行深度剖析的书就成为必需。本书的作者长期从事Linux系统特别是嵌入式系统产品的研发,积累了丰富的经验。
本书共15章,包括概述、Linux内核启动、进程、进程地址空间、进程的调度、内存管理、进程间通信、系统调用、内核同步、设备驱动程序、中断、时钟、文件系统、ext文件系统和内核模块。每一章的内容都深入浅出,文字和程序相结合,每一部分的说明都比较详细,尽可能让读者看得懂、能理解。
本书由南京师范大学郑阿奇主编、孙承龙编著。参加本书编写的还有梁敬东、顾韵华、王洪元、刘启芬、丁有和、曹弋、徐文胜、殷红先、张为民、姜乃松、彭作民、高茜、陈冬霞、钱晓军、朱毅华、时跃华、周何骏、赵青松、周淑琴、陈金辉、李含光、王一莉、徐斌、王志瑞、孙德荣、周怡明、刘博宇、郑进、刘毅、陈杰、刘友春等。
本书配有光盘1张,内含教学课件和教学、学习、开发参考源文件,其中:
arch目录中包含与体系结构相关的核心代码。每一个子目录为一种支持的体系结构,其中包含该体系结构的板级通用驱动。读者一般只需关注arch\x86子目录内容。
include文件夹包括编译核心所需要的大部分头文件。与平台无关的头文件在include/linux子目录下。
mm目录包括所有独立于CPU体系结构的内存管理代码。
kernel目录包括主要的核心代码文件,它实现了大多数Linux系统的内核函数。
drivers目录包含系统所有的设备驱动程序。
对于Windows平台,可以使用Source Insight工具新建工程加载代码、方便代码跟踪;对于Linux平台,可以使用Kscope等工具。
由于作者水平有限,不当之处在所难免,恳请读者批评指正。
编者
2013年1月
第1章 概述
1.1 Linux的内存管理机制
1.2 Linux的基本组成
1.2.1 进程
1.2.2 进程间通信
1.2.3 内存管理
1.2.4 设备驱动
1.2.5 中断
1.2.6 时钟
1.2.7 文件系统
1.2.8 内核模块
1.3 本章小结
第2章 Linux内核启动
2.1 BOIS启动阶段
2.2 实模式setup阶段
2.3 保护模式startup_32阶段
2.4 内核启动start_kernel
2.5 本章小结
第3章 进程
3.1 进程的表示
3.1.1 进程描述符
3.1.2 命名空间
3.1.3 进程标识
3.2 进程关系
3.3 进程的复制
3.3.1 写时复制
3.3.2 执行系统调用
3.4 新进程启动
3.5 进程的切换
3.6 进程的退出
3.7 本章小结
第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 本章小结
第5章 进程的调度
5.1 数据结构
5.1.1 调度器类
5.1.2 就绪队列
5.1.3 调度实体
5.2 进程优先级
5.2.1 优先级内核表示
5.2.2 优先级的计算
5.2.3 计算负荷权重
5.2.4 核心调度器
5.3 CFS调度器
5.3.1 CFS调度器对象
5.3.2 CFS调度器的管理结构
5.3.3 CFS调度器操作
5.3.4 CFS队列操作
5.3.5 周期性调度器
5.3.6 进程加入就绪队列
5.3.7 选择下一个进程
5.3.8 唤醒进程
5.3.9 新进程处理
5.4 实时调度类
5.4.1 实时进程的数据结构
5.4.2 实时调度器操作
5.5 本章小结
第6章 内存管理
6.1 内存管理的框架
6.1.1 非一致内存访问(NUMA)
6.1.2 内存管理区
6.1.3 物理内存地址空间
6.2 内存管理初始化
6.2.1 建立数据结构
6.2.2 启动过程内存管理的初始化
6.2.3 页表的初始化
6.2.4 内存管理结构的初始化
6.3 伙伴算法
6.3.1 伙伴算法初始化与释放
6.3.2 内存分配API
6.3.3 内核中不连续页的分配
6.3.4 内核映射
6.4 slab分配器
6.4.1 slab分配器的原理
6.4.2 slab分配器的实现
6.4.3 通用对象
6.5 slub分配器
6.5.1 slub分配器的原理
6.5.2 slub分配器的初始化
6.5.3 slub内存的分配
6.5.4 slub内存的释放
6.6 本章小结
第7章 进程间通信
7.1 管道
7.1.1 管道相关的数据结构
7.1.2 管道的创建
7.1.3 管道的撤销
7.1.4 向管道写入数据
7.1.5 从管道读取数据
7.2 FIFO
7.3 System V IPC
7.3.1 IPC信号量
7.3.2 消息队列
7.3.3 共享内存
7.4 信号
7.4.1 信号发送
7.4.2 信号传递与捕获
7.5 本章小结
第8章 系统调用
8.1 系统调用简介
8.2 系统调用的实现
8.3 系统调用的参数传递
8.4 异常表
8.5 本章小结
第9章 内核同步
9.1 原子操作
9.2 自旋锁
9.3 读/写自旋锁
9.4 信号量
9.5 RCU机制
9.6 屏障
9.7 互斥量
9.8 本章小结
第10章 设备驱动程序
10.1 I/O体系结构
10.2 设备文件
10.2.1 字符设备、块设备和其他设备
10.2.2 主、从设备号的表示
10.3 字符设备注册
10.3.1 数据结构
10.3.2 字符设备的注册过程
10.4 与文件系统关联
10.4.1 inode中的设备文件成员
10.4.2 标准文件操作
10.5 字符设备操作
10.5.1 字符设备的表示
10.5.2 打开设备文件
10.6 块设备操作
10.6.1 块设备的处理
10.6.2 块设备的表示
10.6.3 向系统添加硬盘和分区
10.6.4 请求结构
10.6.5 BIO
10.6.6 提交请求
10.6.7 I/O调度
10.7 资源分配
10.7.1 资源管理
10.7.2 I/O内存
10.8 总线系统
10.8.1 通用驱动程序模型
10.8.2 PCI总线
10.8.3 USB总线
10.9 本章小结
第11章 中断
11.1 中断处理与中断描述符
11.2 中断的初始化
11.3 中断请求队列的初始化
11.4 中断的处理
11.5 中断与异常的返回
11.6 软中断
11.7 tasklet
11.8 工作队列
11.9 本章小结
第12章 时钟
12.1 低分辨率定时器
12.1.1 数据结构
12.1.2 动态定时器
12.2 通用时钟框架
12.2.1 clocksource概述
12.2.2 clocksource操作
12.2.3 tickless机制
12.3 高分辨率定时器
12.3.1 高分辨率定时器管理结构
12.3.2 高分辨率定时器的初始化
12.3.3 高分辨率定时器操作
12.3.4 高分辨率定时器的实现
12.3.5 动态时钟
12.4 时钟中断处理
12.5 软件定时器
12.5.1 软件定时器的初始化
12.5.2 软件定时器的注册与处理
12.6 本章小结
第13章 文件系统
13.1 虚拟文件系统管理
13.2 通用文件模型
13.2.1 VFS的超级块对象
13.2.2 VFS的inode结构
13.2.3 VFS的文件对象
13.2.4 VFS的目录对象
13.2.5 与进程相关的文件
13.3 文件的类型
13.3.1 磁盘文件
13.3.2 网络文件
13.3.3 特殊文件
13.4 虚拟文件系统处理
13.4.1 文件系统类型注册
13.4.2 文件系统的挂载
13.4.3 文件系统的卸载
13.4.4 路径定位
13.4.5 文件的打开与关闭
13.4.6 文件的读/写
13.5 proc文件系统
13.5.1 数据结构
13.5.2 proc文件系统的初始化
13.5.3 安装proc文件系统
13.5.4 proc数据项管理
13.6 sysfs文件系统
13.6.1 数据结构
13.6.2 安装sysfs文件系统
13.6.3 文件与目录的操作
13.7 本章小结
第14章 ext文件系统
14.1 简介
14.2 ext2文件系统的物理结构
14.3 ext2文件系统的数据结构
14.3.1 超级块
14.3.2 组描述符
14.3.3 索引节点表
14.3.4 目录和文件
14.3.5 ext2文件系统内存中的结构
14.4 ext2文件系统操作
14.5 ext2磁盘空间管理
14.5.1 创建索引节点inode
14.5.2 删除索引节点inode
14.5.3 释放数据块
14.6 ext3文件系统
14.7 本章小结
第15章 内核模块
15.1 模块的实现
15.1.1 模块的表示
15.1.2 模块的依赖关系
……