前言 1
第一章 绪论 7
Linux与其他类Unix内核的比较 8
硬件的依赖性 12
Linux版本 13
操作系统基本概念 14
Unix文件系统概述 18
Unix内核概述 25
第二章 内存寻址 40
内存地址 40
硬件中的分段 41
Linux中的分段 46
硬件中的分页 50
Linux中的分页 62
第三章 进程 84
进程、轻量级进程和线程 84
进程描述符 85
进程切换 107
创建进程 118
撤消进程 130
第四章 中断和异常 135
中断信号的作用 136
中断和异常 137
中断和异常处理程序的嵌套执行 146
初始化中断描述符表 148
异常处理 151
中断处理 154
软中断及tasklet 174
工作队列 182
从中断和异常返回 186
第五章 内核同步 192
内核如何为不同的请求提供服务 192
同步原语 197
对内核数据结构的同步访问 219
避免竞争条件的实例 224
第六章 定时测量 228
时钟和定时器电路 229
Linux计时体系结构 233
更新时间和日期 240
更新系统统计数 241
软定时器和延迟函数 244
与定时测量相关的系统调用 252
第七章 进程调度 258
调度策略 258
调度算法 261
调度程序所使用的数据结构 266
调度程序所使用的函数 270
多处理器系统中运行队列的平衡 284
与调度相关的系统调用 289
第八章 内存管理 294
页框管理 294
内存区管理 323
非连续内存区管理 343
第九章 进程地址空间 351
进程的地址空间 352
内存描述符 354
线性区 358
缺页异常处理程序 376
创建和删除进程的地址空间 391
堆的管理 394
第十章 系统调用 397
POSIX API和系统调用 397
系统调用处理程序及服务例程 398
进入和退出系统调用 400
参数传递 408
内核封装例程 416
第十一章 信号 418
信号的作用 418
产生信号 431
传递信号 437
与信号处理相关的系统调用 448
第十二章 虚拟文件系统 454
虚拟文件系统(VFS)的作用 454
VFS的数据结构 461
文件系统类型 480
文件系统处理 483
路径名查找 495
VFS系统调用的实现 505
文件加锁 509
第十三章 I/O体系结构和设备驱动程序 518
I/O体系结构 518
设备驱动程序模型 525
设备文件 535
设备驱动程序 539
字符设备驱动程序 550
第十四章 块设备驱动程序 557
块设备的处理 557
通用块层 562
I/O调度程序 568
块设备驱动程序 582
打开块设备文件 591
第十五章 页高速缓存 595
页高速缓存 596
把块存放在页高速缓存中 607
把脏页写入磁盘 618
sync()、fsync()和fdatasync()系统调用 625
第十六章 访问文件 627
读写文件 628
内存映射 652
直接I/O传送 662
异步I/O 665
第十七章 回收页框 670
页框回收算法 670
反向映射 674
PFRA实现 682
交换 704
第十八章 Ext2和Ext3文件系统 729
Ext2的一般特征 729
Ext2磁盘数据结构 732
Ext2的内存数据结构 741
创建Ext2文件系统 744
Ext2的方法 746
管理Ext2磁盘空间 749
Ext3文件系统 757
第十九章 进程通信 766
管道 767
FIFO 778
System V IPC 780
POSIX消息队列 796
第二十章 程序的执行 799
可执行文件 800
可执行格式 814
执行域 817
exec函数 818
附录一 系统启动 825
附录二 模块 832
参考文献 842
源代码索引 847