第一章 硬件平台 1
1.1 基本概念 1
1.1.1 特权级 1
1.1.2 操作模式 2
1.1.3 系统级体系结构 3
1.2 描述符 4
1.2.1 段描述符 4
1.2.2 全局和局部描述符表 6
1.2.3 段选择符 7
1.2.4 段寄存器 8
1.2.5 任务状态段 8
1.2.6 中断和异常 10
1.2.7 门描述符 11
1.3 分页机制 16
1.3.1 与分页相关的标志 16
1.3.2 页目录和页表 17
1.3.3 页级保护 20
1.4 寄存器 20
1.4.1 通用寄存器 21
1.4.2 标志寄存器 21
1.4.3 段寄存器 22
1.4.4 管理寄存器 23
1.4.5 控制寄存器 23
1.4.6 指令寄存器 26
1.4.7 特殊模式寄存器 26
1.4.8 其它寄存器 26
1.5 系统指令 27
1.6 AT&T汇编语言 28
1.6.1 AT&T汇编格式 28
1.6.2 AT&T内嵌汇编 30
第二章 引导和初始化 32
2.1 开机过程 32
2.2 内核的组织 34
2.3 引导程序 34
2.4 实模式下的初始化 37
2.5 内核映像解压缩 41
2.6 保护模式下的初始化 42
2.7 内核启动 47
2.8 init进程 75
第三章 中断处理 82
3.1 中断 82
3.1.1 中断设置 83
3.1.2 中断处理要求 84
3.1.3 异常处理 85
3.1.4 外部中断处理 90
3.2 时钟 102
3.2.1 时钟中断 102
3.2.2 时钟中断上部处理 103
3.2.3 时钟中断底半处理 105
3.2.4 系统时间 106
3.2.5 更新进程时间片 107
3.2.6 定时器 109
3.3 系统调用 121
3.3.1 调用机制 121
3.3.2 int $0x80 124
3.3.3 内存拷贝 126
第四章 内存管理 130
4.1 物理内存管理器 131
4.1.1 数据结构 131
4.1.2 页分配 135
4.1.3 页释放 136
4.1.4 页回收 137
4.2 内核内存管理器 143
4.2.1 初始化 145
4.2.2 Cache的建立 148
4.2.3 为Cache增加Slab 149
4.2.4 对象的分配 151
4.2.5 对象的释放 153
4.2.6 回收指定Cache的空闲Slab 154
4.2.7 回收Cache中的空闲Slab 156
4.3 虚拟内存管理器 156
4.3.1 虚拟内存抽象模型 158
4.3.2 虚拟内存拷贝 168
4.3.3 虚拟内存重建 172
4.3.4 缺页处理 176
4.3.5 共享映射页的写出 185
4.3.6 交换 189
4.3.7 页缓存和交换缓存 198
4.3.8 堆 201
4.3.9 虚拟内存释放 203
4.4 内核虚拟内存管理器 209
第五章 进程管理 212
5.1 进程数据结构 212
5.2 进程创建 226
5.3 进程调度 232
5.4 进程执行映像的加载 237
5.4.1 ELF格式执行文件 238
5.4.2 ELF格式共享库 241
5.4.3 脚本文件 242
5.4.4 ELF文件的加载过程 242
5.5 进程终止 247
5.6 进程等待队列 253
5.7 进程同步 255
5.7.1 锁 255
5.7.2 信号灯 257
5.7.3 条件变量 263
5.7.4 睡眠等待 265
第六章 进程间通信 268
6.1 信号 268
6.1.1 信号的定义 269
6.1.2 数据结构 271
6.1.3 信号位图操作 274
6.1.4 注册信号处理程序 275
6.1.5 发送信号 278
6.1.6 处理信号 283
6.1.7 其余操作 298
6.1.8 信号的局限 302
6.2 管道 302
6.3 系统V IPC机制 304
6.3.1 消息队列 305
6.3.2 信号灯 309
6.3.3 共享内存 315
第七章 文件系统 322
7.1 虚拟文件系统 323
7.1.1 VFS超级块 324
7.1.2 VFS inode 327
7.1.3 目录项 332
7.1.4 注册文件系统 334
7.1.5 安装文件系统 336
7.1.6 获得文件的inode和目录项 340
7.1.7 创建或打开文件 343
7.1.8 文件I/O 347
7.1.9 卸载文件系统 348
7.1.10 重装文件系统 349
7.1.11 同步文件系统 350
7.2 缓存机制 351
7.2.1 VFS inode缓存 351
7.2.2 目录项缓存 359
7.2.3 Buffer Cache 366
7.3 EXT2文件系统 389
7.3.1 EXT2超级块 390
7.3.2 EXT2 inode 392
7.3.3 EXT2组描述符 395
7.3.4 EXT2目录 396
7.3.5 文件查找 398
7.3.6 数据块的分配和释放 398
7.3.7 EXT2文件系统的注册 399
7.3.8 EXT2文件系统的安装 400
7.3.9 EXT2文件系统的VFS inode 402
7.3.10 EXT2文件系统的文件操作 404
第八章 设备驱动 406
8.1 设备驱动程序概念 407
8.1.1 I/O空间 408
8.1.2 轮询和中断 410
8.1.3 数据传输方式 411
8.1.4 设备名字空间 412
8.1.5 设备和驱动程序分类 414
8.1.6 内存限制 415
8.1.7 设备驱动程序和内核的接口 416
8.2 字符设备驱动程序 418
8.2.1 注册 418
8.2.2 打开 420
8.2.3 设备I/O操作 421
8.2.4 中断 423
8.2.5 关闭 423
8.3 块设备驱动程序 424
8.3.1 注册 425
8.3.2 IDE磁盘的初始化 429
8.3.3 打开设备(Open) 439
8.3.4 设备I/O操作 441
8.3.5 释放设备 447
8.3.6 Ramdisk驱动程序 447
8.4 网络设备驱动程序 452
第九章 内核模块 459
9.1 内核模块的设计 460
9.2 模块数据结构 464
9.3 模块的加载 468
9.4 模块的卸载 477
9.5 模块系统调用 478
9.6 内核模块的问题 483
参考文献 485