第一章 Linux概述 1
1.1操作系统内核 1
1.2 Linus与Linux 3
1.3 Linux内核结构 6
1.4 Linux发布 10
1.5 Unix与Linux哲学 12
思考题 21
第二章 平台与工具 22
2.1硬件平台 22
2.2 Intel处理器体系结构 23
2.2.1处理器操作模式 23
2.2.2段页式内存管理 24
2.2.3内存管理的变化与扩展 28
2.2.4内存保护 29
2.2.5进程管理 30
2.2.6中断处理 31
2.2.7 APIC 33
2.2.8处理器初始化 34
2.2.9寄存器与特权指令 35
2.3 GNU C语言 36
2.4 GNU汇编语言 38
2.4.1 GNU汇编格式 38
2.4.2 AT&T指令语法 40
2.4.3 GNU内嵌汇编 41
2.5 GNU链接脚本 43
2.6常用数据结构 45
2.6.1通用链表 45
2.6.2红黑树 46
思考题 48
第三章 引导与初始化 49
3.1内核引导 49
3.2实模式初始化 51
3.3内核解压缩 52
3.4内核预初始化 53
3.5第0级初始化 56
3.6第1级初始化 74
3.7 AP初始化 81
思考题 82
第四章 中断处理 83
4.1中断处理流程 83
4.2异常处理 85
4.2.1异常处理流程 86
4.2.2内核异常捕捉 86
4.3外部中断处理 88
4.3.1硬处理管理结构 88
4.3.2设备中断硬处理管理接口 92
4.3.3外部中断硬处理 94
4.3.4外部中断软处理 97
4.4系统调用 101
4.4.1系统调用表 102
4.4.2标准函数库 103
4.4.3系统调用处理 104
4.4.4快速系统调用 105
思考题 107
第五章 时钟管理 108
5.1时钟管理系统组成结构 108
5.2时钟设备管理 109
5.2.1时钟设备管理结构 109
5.2.2 PIT设备 110
5.2.3 HPET设备 111
5.2.4 Local APIC设备 112
5.2.5当前时钟设备 113
5.3计时器管理 114
5.4周期性时钟中断 115
5.4.1周期性时钟中断处理 115
5.4.2时间管理 116
5.4.3定时管理 118
5.5单发式时钟中断 127
5.5.1高精度单发中断模式 127
5.5.2高精度单发式时钟中断处理 128
5.5.3高精度周期性时钟中断仿真 129
5.5.4低精度单发中断模式 130
5.6变频式周期性时钟中断 131
5.6.1变频管理结构 131
5.6.2高精度周期性时钟中断暂停 132
5.6.3低精度周期性时钟中断暂停 133
思考题 134
第六章 物理内存管理 135
6.1内存管理系统组成结构 135
6.2伙伴内存管理 136
6.2.1伙伴内存管理结构 137
6.2.2伙伴内存初始化 141
6.2.3物理页块分配 144
6.2.4内核线性地址分配 146
6.2.5物理页块释放 148
6.3逻辑内存管理 149
6.4对象内存管理 151
6.4.1 Slab管理器 151
6.4.2 Slub管理器 157
6.4.3 Slob管理器 160
思考题 162
第七章 进程管理 164
7.1进程管理结构 164
7.2进程创建 172
7.3进程调度 175
7.3.1 Linux调度器的演变 175
7.3.2普通进程调度类 179
7.3.3实时进程调度类 181
7.3.4空闲进程调度类 183
7.3.5通用调度器 184
7.3.6 Linux调度器的增强 188
7.4进程终止 190
7.4.1子进程退出操作exit 190
7.4.2父进程回收操作wait 191
思考题 192
第八章 虚拟内存管理 193
8.1虚拟内存管理结构 193
8.2虚拟内存区域管理 198
8.2.1虚拟地址空间布局 199
8.2.2虚拟内存区域操作 200
8.3虚拟地址空间建立 202
8.3.1可执行文件 202
8.3.2加载函数 204
8.3.3 ELF文件加载 205
8.3.4动态链接器初始化 208
8.3.5 ELF格式动态链接 208
8.4页故障处理 210
8.4.1页故障异常处理流程 210
8.4.2非法访问页故障处理 211
8.4.3有效用户页故障处理 212
8.4.4有效内核页故障处理 215
8.5页面回收 216
8.5.1页面换出位置 216
8.5.2页面淘汰算法 219
8.5.3页面回收流程 221
8.5.4优化措施 223
思考题 224
第九章 互斥与同步 225
9.1基础操作 225
9.1.1格栅操作 225
9.1.2原子操作 226
9.1.3抢占屏蔽操作 227
9.1.4睡眠与等待操作 228
9.2自旋锁 229
9.2.1自旋锁的概念 229
9.2.2经典自旋锁 230
9.2.3带中断屏蔽的自旋锁 231
9.2.4读写自旋锁 232
9.3序号锁 234
9.4 RCU机制 235
9.4.1 RCU实现思路 235
9.4.2 RCU管理结构 237
9.4.3宽限期启动 241
9.4.4宽限期终止 242
9.5 信号量 243
9.5.1经典信号量 244
9.5.2互斥信号量 245
9.5.3读写信号量 246
9.6信号量集合 248
9.6.1管理结构 249
9.6.2信号量操作 252
思考题 253
第十章 进程间通信 254
10.1信号 254
10.1.1信号定义 254
10.1.2信号管理结构 256
10.1.3信号处理程序注册 257
10.1.4信号发送 258
10.1.5信号处理 260
10.1.6信号接收 263
10.2管道 263
10.2.1管道的意义 264
10.2.2匿名管道 264
10.2.3命名管道 266
10.3消息队列 267
10.3.1 System V消息队列 267
10.3.2 POSIX消息队列 270
10.4共享内存 274
10.4.1共享文件映射 274
10.4.2 POSIX共享内存 276
10.4.3 System V共享内存 279
思考题 280
第十一章 虚拟文件系统 282
11.1虚拟文件系统管理结构 282
11.1.1虚拟文件系统框架 283
11.1.2超级块结构 284
11.1.3索引节点结构 284
11.1.4目录项结构 287
11.2文件系统管理 288
11.2.1文件系统注册 288
11.2.2文件系统安装 289
11.2.3文件系统卸载 293
11.3文件管理 293
11.3.1路径名解析 294
11.3.2文件管理操作 297
11.4文件I/O操作 299
11.4.1文件描述符表 299
11.4.2文件打开与关闭 302
11.4.3文件内容读写 304
11.5文件缓存管理 305
11.5.1缓存管理基数树 305
11.5.2文件地址空间 307
11.5.3缓存管理机制 308
11.5.4文件读写操作 310
思考题 311
第十二章 物理文件系统 312
12.1块设备管理 312
12.1.1块设备的用户表示 313
12.1.2块设备的物理表示 313
12.1.3块设备的逻辑表示 315
12.1.4请求队列 317
12.1.5请求递交 320
12.1.6请求处理 321
12.2 EXT文件系统 321
12.2.1 EXT文件系统布局 322
12.2.2 EXT管理结构 323
12.2.3 EXT逻辑块管理 330
12.2.4 EXT inode管理 333
12.2.5 EXT文件系统类型 335
12.2.6 EXT超级块操作集 335
12.2.7 EXT inode操作集 336
12.2.8 EXT文件操作集 338
12.2.9 EXT地址空间操作集 338
思考题 340
参考文献 341