第 1章 计算机系统的概要 1
第 2章 用户模式实现的功能 11
2.1 系统调用 12
2.2 系统调用的包装函数 22
2.3 C标准库 24
2.4 OS提供的程序 26
第3章 进程管理 27
3.1 创建进程 28
3.2 fork()函数 28
3.3 execve()函数 31
3.4 结束进程 38
第4章 进程调度器 41
4.1 关于实验程序的设计 43
4.2 实验程序的实现 44
4.3 实验 48
4.4 思考 53
4.5 上下文切换 54
4.6 进程的状态 55
4.7 状态转换 57
4.8 空闲状态 59
4.9 各种各样的状态转换 61
4.10 吞吐量与延迟 63
4.11 现实中的系统 69
4.12 存在多个逻辑 CPU时的调度 70
4.13 实验方法 71
4.14 实验结果 72
4.15 吞吐量与延迟 76
4.16 思考 77
4.17 运行时间和执行时间 78
4.18 进程睡眠 84
4.19 现实中的进程 85
4.20 变更优先级 87
第5章 内存管理 95
5.1 内存相关的统计信息 96
5.2 内存不足 98
5.3 简单的内存分配 101
5.4 虚拟内存 106
5.5 页表 108
5.6 实验 110
5.7 为进程分配内存 111
5.8 实验 116
5.9 利用上层进行内存分配 118
5.10 解决问题 121
5.11 虚拟内存的应用 126
5.12 文件映射 127
5.13 请求分页 131
5.14 写时复制 145
5.15 Swap 151
5.16 多级页表 159
5.17 标准大页 163
第6章 存储层次 167
6.1 高速缓存 168
6.2 高速缓存不足时 173
6.3 多级缓存 175
6.4 关于高速缓存的实验 176
6.5 访问局部性 180
6.6 总结 181
6.7 转译后备缓冲区 181
6.8 页面缓存 181
6.9 同步写入 186
6.10 缓冲区缓存 187
6.11 读取文件的实验 187
6.12 写入文件的实验 194
6.13 调优参数 196
6.14 总结 198
6.15 超线程 199
第7章 文件系统 203
7.1 Linux的文件系统 207
7.2 数据与元数据 210
7.3 容量限制 211
7.4 文件系统不一致 212
7.5 日志 214
7.6 写时复制 218
7.7 防止不了的情况 221
7.8 文件系统不一致的对策 221
7.9 文件的种类 223
7.10 字符设备 224
7.11 块设备 225
7.12 各种各样的文件系统 228
7.13 基于内存的文件系统 228
7.14 网络文件系统 230
7.15 虚拟文件系统 231
7.16 Btrfs 233
第8章 外部存储器 241
8.1 HDD的数据读写机制 242
8.2 HDD的性能特性 244
8.3 HDD的实验 246
8.4 实验程序 247
8.5 顺序访问 251
8.6 随机访问 253
8.7 通用块层 254
8.8 I/O调度器 255
8.9 预读 256
8.10 实验 258
8.11 SSD 267
8.12 总结 279
后记 280