第1章 Linux内核简介 1
1.1 什么是Linux 1
1.1.1 Linux发展历程 1
1.1.2 常见Linux发行版本 1
1.2 Linux的内核特征 3
1.2.1 接口特色 3
1.2.2 功能特色 4
1.2.3 结构特征 4
1.3 关于Linux内核 4
1.3.1 Linux内核版本 4
1.3.2 Linux内核体系结构 5
1.3.3 单内核与微内核 6
1.4 内核编译方法 7
1.4.1 获取内核代码 7
1.4.2 内核源码的组成 7
1.4.3 编译内核 8
第2章 Linux进程管理 11
2.1 进程描述 11
2.1.1 进程的描述 11
2.1.2 Linux进程描述符 11
2.2 进程的组织形式 18
2.2.1 进程链表 18
2.2.2 哈希链表 19
2.2.3 等待队列 22
2.2.4 当前进程 23
2.3 进程创建 25
2.3.1 概述 25
2.3.2 写时复制 25
2.3.3 fork()、vfork()与clone() 26
2.4 进程终止 30
2.4.1 概述 30
2.4.2 do_exit()函数 30
2.4.3 wait()函数 31
2.5 线程的实现 32
2.5.1 用户线程 32
2.5.2 内核线程 32
2.6 进程使用综合实例 33
2.6.1 问题陈述 33
2.6.2 解决方案 33
第3章 Linux进程调度算法 35
3.1 内核调度概述 35
3.1.1 调度原理 35
3.1.2 Linux调度器发展 36
3.1.3 CFS调度器 38
3.2 与调度相关的数据结构 39
3.2.1 运行队列 39
3.2.2 模块化调度 42
3.2.3 组调度 43
3.3 CFS调度算法 44
3.3.1 进程优先级和虚拟运行时间 44
3.3.2 CFS调度算法的实现 45
3.4 实时调度算法 47
3.4.1 实时调度策略 47
3.4.2 实时调度的具体实现 48
3.5 Linux内核调度 49
3.5.1 schedule() 49
3.5.2 内核抢占 51
3.6 调度相关系统调用 52
第4章 Linux中断机制分析 56
4.1 x86对中断的支持 56
4.1.1 中断向量 56
4.1.2 中断描述符 57
4.1.3 中断描述符的初始化 58
4.2 中断处理程序 64
4.2.1 概述 64
4.2.2 编写中断处理程序 65
4.2.3 中断上下文 66
4.3 中断处理机制的实现 66
4.3.1 中断的硬件处理过程 66
4.3.2 中断处理程序的注册 68
4.3.3 中断的软件处理过程 71
4.4 中断的下半部 75
4.4.1 下半部机制 76
4.4.2 软中断 77
4.4.3 tasklet 81
4.4.4 工作队列 85
第5章 Linux系统调用分析 91
5.1 C程序库和系统调用 91
5.2 系统调用实现分析 91
5.2.1 系统调用的初始化 92
5.2.2 与系统调用相关的数据结构 92
5.2.3 系统调用入口函数 93
5.2.4 系统调用的参数传递 93
5.3 添加系统调用 94
5.4 快速系统调用 95
5.4.1 实现原理 96
5.4.2 实现策略 98
第6章 Linux内核同步机制分析 101
6.1 临界区和竞争条件 101
6.1.1 临界区举例 101
6.1.2 共享队列和加锁 102
6.1.3 确定保护对象 103
6.1.4 并发执行的原因 103
6.2 原子操作 104
6.2.1 原子整数操作 104
6.2.2 原子位操作 107
6.3 自旋锁 108
6.3.1 普通自旋锁 108
6.3.2 读写自旋锁 113
6.4 信号量机制 120
6.4.1 普通信号量 121
6.4.2 读写信号量 125
6.5 RCU同步机制 127
6.5.1 RCU同步机制原理 127
6.5.2 RCU同步机制的实现 128
6.6 其他同步机制 130
6.6.1 每个处理器变量 130
6.6.2 禁止内核抢占 131
6.6.3 BKL 135
第7章 Linux定时器和时间管理机制 136
7.1 内核中的时间概念 136
7.1.1 内核中的时钟 136
7.1.2 节拍率 136
7.1.3 jiffies 137
7.2 时钟中断处理过程 139
7.2.1 时钟中断的初始化 139
7.2.2 时钟中断处理函数 141
7.3 定时器 145
7.3.1 定时器的实现原理 145
7.3.2 定时器的使用 146
7.3.3 定时器的实现过程 148
7.4 内核中的延迟 154
7.4.1 忙等待 155
7.4.2 短延迟 155
7.4.3 schedule_timeout() 156
第8章 Linux模块机制 159
8.1 模块概念 159
8.2 内核模块的使用 160
8.2.1 一个简单的内核模块程序 160
8.2.2 构建模块 161
8.2.3 模块参数 164
8.2.4 内核导出模块符号表 164
8.3 内核模块实现机制分析 165
8.3.1 相关的数据结构 165
8.3.2 内核模块工作机制 168
第9章 内存管理机制 174
9.1 基本机制 174
9.2 物理内存的描述方法 175
9.2.1 内存节点 175
9.2.2 内存区 177
9.2.3 物理页面 181
9.3 物理内存的分配与回收 183
9.3.1 物理页面的请求 183
9.3.2 物理页面的释放 192
9.3.3 伙伴系统 193
9.4 Slub分配器 198
9.4.1 Slub分配器概述 198
9.4.2 Slub分配器的设计 199
9.4.3 相关的数据结构 201
9.4.4 高速缓存的创建与销毁 203
9.4.5 内核对象的分配与释放 210
9.5 进程地址空间 212
9.5.1 内存描述符 212
9.5.2 内存区域 214
9.5.3 页表 216
第10章 Linux文件系统 218
10.1 Linux文件系统基础 218
10.1.1 Linux文件系统 218
10.1.2 文件 219
10.1.3 文件目录和路径 220
10.1.4 磁盘块 221
10.2 Linux虚拟文件系统 221
10.2.1 虚拟文件系统的引入 221
10.2.2 VFS中的对象 222
10.2.3 超级块对象 223
10.2.4 索引节点对象 226
10.2.5 目录项对象 230
10.2.6 文件对象 233
10.2.7 与进程相关的数据结构 236
10.3 文件系统的安装与卸载 237
10.3.1 文件系统的注册 238
10.3.2 文件系统的安装 239
10.3.3 文件系统的卸载 243
10.4 页高速缓存 244
10.4.1 相关数据结构 245
10.4.2 页回写 246
10.5 文件的打开与读写 248
10.5.1 文件的打开与关闭 248
10.5.2 文件的读和写 250
第11章 I/O设备管理 252
11.1 I/O管理机制 252
11.2 块设备管理 255
11.2.1 缓冲区和缓冲区头 255
11.2.2 bio结构体 256
11.2.3 请求队列 256
11.3 驱动程序设计 257
11.3.1 驱动程序框架 257
11.3.2 Linux 2.6驱动程序新特性 261
11.3.3 驱动程序设计实例 262
第12章 Hadoop分布式文件系统 266
12.1 Hadoop框架简介 266
12.2 HDFS——Hadoop分布式文件系统 267
12.2.1 HDFS设计目标 268
12.2.2 HDFS基本架构 268
12.2.3 HDFS的关键技术 270
12.3 HDFS使用 273
12.3.1 访问接口 273
12.3.2 常用特性 275
12.3.3 权限管理 277
12.3.4 命令手册 277
12.4 应用实例——HDFS编译、安装和简单的使用 279
第13章 Linux安全系统 283
13.1 Linux日志系统和审计系统 283
13.1.1 Linux日志系统 283
13.1.2 Linux审计系统 285
13.2 Linux访问控制机制 289
13.2.1 基于ACL的自主访问机制 289
13.2.2 强制访问机制 290
13.3 文件权限管理 291
13.3.1 UGO文件权限管理 291
13.3.2 ACL文件权限管理 293
13.4 内核密钥环 294
13.4.1 密钥和密钥环数据结构 294
13.4.2 密钥环数据操作 296
13.4.3 内核密钥环的管理 296
13.5 应用实例——Linux ACL体验 302
第14章 Linux网络安全 306
14.1 网络安全机制 306
14.1.1 简介 306
14.1.2 安全隐患和基本安全策略 306
14.1.3 Linux网络安全工具 307
14.1.4 Linux 2.6网络安全新功能 309
14.2 防火墙技术 310
14.2.1 什么是防火墙 310
14.2.2 防火墙的种类 311
14.2.3 防火墙配置结构 312
14.3 使用Linux架构包过滤防火墙 314
14.3.1 什么是包过滤 314
14.3.2 工作层次 314
14.3.3 工作原理 315
14.3.4 基本过程 316
14.4 管理工具 316
14.4.1 iptables 317
14.4.2 Netfilter 318
14.5 Linux防火墙程序设计 321
附录A 内核中常见数据结构类型 325
附录B 红黑树 329
附录C 特殊的C语言用法 331
附录D 汇编语法 332
参考文献 338