第一部分 概述 1
1.1 操作系统是什么 3
第一章 导论 3
1.1.2 系统观点 4
1.1.1 用户观点 4
1.1.3 系统目标 5
1.2.1 批处理系统 6
1.2 大型机系统 6
1.2.3 分时系统 7
1.2.2 多道程序系统 7
1.3 桌面系统 8
1.4 多处理器系统 9
1.5.1 客户机—服务器系统 11
1.5 分布式系统 11
1.5.2 对等系统 12
1.6 集群系统 13
1.7 实时系统 14
1.9 功能迁移 15
1.8 手持系统 15
1.10 计算环境 16
1.10.3 嵌入式计算 17
1.10.2 基于Web的计算 17
1.10.1 传统计算 17
1.11 小结 18
习题一 19
推荐读物 20
2.1 计算机系统操作 21
第二章 计算机系统结构 21
2.2.1 I/O中断 23
2.2 I/O结构 23
2.2.2 DMA结构 25
2.3 存储结构 26
2.3.1 内存 27
2.3.2 磁盘 28
2.3.3 磁带 29
2.4 存储层次 30
2.4.1 高速缓存技术 31
2.5 硬件保护 32
2.4.2 一致性与连贯性 32
2.5.1 双重模式操作 33
2.5.2 I/O保护 34
2.5.3 内存保护 35
2.5.4 CPU保护 36
2.6 网络结构 37
2.6.1 局域网 38
2.6.2 广域网 39
2.7 小结 40
习题二 41
推荐读物 42
3.1.1 进程管理 43
3.1 系统组成 43
第三章 操作系统结构 43
3.1.2 内存管理 44
3.1.4 输入/输出系统管理 45
3.1.3 文件管理 45
3.1.6 联网 46
3.1.5 二级存储管理 46
3.1.8 命令解释系统 47
3.1.7 保护系统 47
3.2 操作系统服务 48
3.3 系统调用 49
3.3.1 进程控制 51
3.3.2 文件管理 53
3.3.5 通信 54
3.3.4 信息维护 54
3.3.3 设备管理 54
3.4 系统程序 55
3.5.1 简单结构 57
3.5 系统结构 57
3.5.2 分层方法 58
3.5.3 微内核 60
3.6 虚拟机 61
3.6.1 实现 62
3.6.2 优点 63
3.6.3 Java 64
3.7.2 机制与策略 65
3.7.1 设计目标 65
3.7 系统设计与实现 65
3.7.3 实现 66
3.8 系统生成 67
3.9 小结 68
推荐读物 69
习题三 69
4.1.1 进程 73
4.1 进程概念 73
第二部分 进程管理 73
第四章 进程 73
4.1.3 进程控制块 74
4.1.2 进程状态 74
4.1.4 线程 75
4.2.1 调度队列 76
4.2 进程调度 76
4.2.2 调度程序 77
4.2.3 关联切换 78
4.3.1 进程创建 79
4.3 进程操作 79
4.3.2 进程终止 81
4.4 进程协作 82
4.5.2 命名 84
4.5.1 消息传递系统 84
4.5 进程间通信 84
4.5.4 缓冲 86
4.5.3 同步 86
4.5.5 例子:Mach 87
4.5.6 例子:Windows 2000 88
4.6.1 套接字 89
4.6 客户机-服务器系统通信 89
4.6.2 远程过程调用 92
4.6.3 远程方法调用 94
习题四 96
4.7 小结 96
推荐读物 97
5.1.1 动机 98
5.1 概述 98
第五章 线程 98
5.1.2 优点 99
5.2.1 多对一模型 100
5.2 多线程模型 100
5.1.3 用户线程与内核线程 100
5.2.3 多对多模型 101
5.2.2 一对一模型 101
5.3.2 取消 102
5.3.1 系统调用fork和exec 102
5.3 若干多线程问题 102
5.3.3 信号处理 103
5.3.4 线程池 104
5.4 Pthread线程 105
5.3.5 线程特定数据 105
5.5 Solaris 2线程 107
5.7 Linux线程 109
5.6 Windows 2000线程 109
5.8.1 线程创建 110
5.8 Java线程 110
5.8.2 JVM与主机操作系统 111
习题五 112
5.9 小结 112
推荐读物 113
6.1.1 CPU-I/O区间周期 114
6.1 基本概念 114
第六章 CPU调度 114
6.1.3 可抢占式调度 115
6.1.2 CPU调度程序 115
6.1.4 分派程序 116
6.3 调度算法 117
6.2 调度准则 117
6.3.1 先到先服务调度 118
6.3.2 最短作业优先调度 119
6.3.3 优先权调度 121
6.3.4 轮转法调度 122
6.3.5 多级队列调度 125
6.3.6 多级反馈队列调度 126
6.4 多处理器调度 127
6.5 实时调度 128
6.6.1 确定性建模 130
6.6 算法评估 130
6.6.2 排队模型 131
6.6.3 模拟 132
6.6.4 实现 133
6.7.1 例子:Solaris 2 134
6.7 进程调度模型 134
6.7.2 例子:Windows 2000 135
6.7.3 例子:Linux 137
习题六 139
6.8 小结 139
推荐读物 141
7.1 背景 142
第七章 进程同步 142
7.2.1 两进程解法 144
7.2 临界区域问题 144
7.2.2 多进程解法 146
7.3 同步硬件 148
7.4.1 用法 150
7.4 信号量 150
7.4.2 实现 151
7.4.4 二进制信号量 153
7.4.3 死锁与饥饿 153
7.5.1 有限缓冲问题 154
7.5 经典同步问题 154
7.5.2 读者—作者问题 155
7.5.3 哲学家进餐问题 156
7.6 临界区域 157
7.7 管程 160
7.8 操作系统同步 165
7.8.1 Solaris 2中的同步 166
7.9 原子事务 167
7.8.2 Windows 2000中的同步 167
7.9.1 系统模型 168
7.9.2 基于日志的恢复 169
7.9.4 并发原子事务 170
7.9.3 检查点 170
7.10 小结 174
习题七 175
推荐读物 177
8.1 系统模型 179
第八章 死锁 179
8.2.1 必要条件 180
8.2 死锁特点 180
8.2.2 资源分配图 181
8.4 死锁预防 183
8.3 死锁处理方法 183
8.4.3 非抢占 184
8.4.2 占有并等待 184
8.4.1 互斥 184
8.4.4 循环等待 185
8.5.1 安全状态 186
8.5 死锁避免 186
8.5.2 资源分配图算法 187
8.5.3 银行家算法 188
实例 191
8.6.1 每种资源类型只有单个 191
8.6 死锁检测 191
8.6.2 每种资源类型的多个实例 192
8.6.3 应用检测算法 193
8.7.2 资源抢占 194
8.7.1 进程终止 194
8.7 死锁恢复 194
8.8 小结 195
习题八 196
推荐读物 198
9.1.1 地址捆绑 201
9.1 背景 201
第三部分 存储管理 201
第九章 内存管理 201
9.1.2 逻辑地址空间与物理地址空间 202
9.1.3 动态加载 203
9.1.4 动态链接与共享库 204
9.1.5 覆盖 205
9.2 交换 206
9.3.1 内存保护 208
9.3 连续内存分配 208
9.3.2 内存分配 209
9.3.3 碎片 210
9.4.1 基本方法 211
9.4 分页 211
9.4.2 硬件支持 215
9.4.3 保护 217
9.4.4 页表结构 218
9.4.5 共享页表 222
9.5.1 基本方法 223
9.5 分段 223
9.5.2 硬件 224
9.5.3 保护与共享 225
9.5.4 碎片 227
9.6 带有分页的分段 228
9.7 小结 229
习题九 230
推荐读物 232
10.1 背景 233
第十章 虚拟内存 233
10.2.1 基本概念 235
10.2 请求页面调度 235
10.2.2 请求页面调度的性能 239
10.3.1 写时拷贝 241
10.3 进程创建 241
10.3.2 内存映射文件 242
10.4 页面置换 243
10.4.1 基本方法 244
10.4.2 FIFO页置换 247
10.4.3 最优页置换 248
10.4.4 LRU页置换 249
10.4.5 LRU近似页置换 250
10.4.6 基于计数的页置换 252
10.5 帧分配 253
10.4.7 页缓冲算法 253
10.5.1 帧的最小数量 254
10.5.3 全局分配与局部分配 255
10.5.2 分配算法 255
10.6 系统颠簸 256
10.6.1 系统颠簸的原因 256
10.6.2 工作集合模型 258
10.6.3 页错误频率 259
10.7.1 Windows NT 260
10.7 操作系统样例 260
10.7.2 Solaris 2 261
10.8.2 页大小 262
10.8.1 预约式页面调度 262
10.8 其他考虑 262
10.8.4 反向页表 264
10.8.3 TLB范围 264
10.8.5 程序结构 265
10.8.6 I/O互锁 266
10.9 小结 267
10.8.7 实时处理 267
习题十 268
推荐读物 271
11.1.1 文件属性 273
11.1 文件概念 273
第十一章 文件系统接口 273
11.1.2 文件操作 274
11.1.3 文件类型 276
11.1.4 文件结构 277
11.1.5 内部文件结构 278
11.2.2 直接访问 279
11.2.1 顺序访问 279
11.2 访问方法 279
11.2.3 其他访问方法 280
11.3 目录结构 281
11.3.1 单层目录 282
11.3.2 双层目录 283
11.3.3 树形结构目录 284
11.3.4 无环图目录 286
11.3.5 通用图目录 288
11.4 文件系统安装 289
11.5.1 多用户 291
11.5 文件共享 291
11.5.2 远程文件系统 292
11.5.3 一致性语义 294
11.5.6 永久共享文件语义 295
11.5.5 会话语义 295
11.5.4 UNIX语义 295
11.6.2 访问控制 296
11.6.1 访问类型 296
11.6 保护 296
11.6.3 其他保护方法 298
11.7 小结 299
11.6.4 例子:UNIX 299
习题十一 300
推荐读物 301
12.1 文件系统结构 302
第十二章 文件系统实现 302
12.2.1 概述 303
12.2 文件系统实现 303
12.2.2 分区与安装 305
12.2.3 虚拟文件系统 307
12.3.2 哈希表 308
12.3.1 线性列表 308
12.3 目录实现 308
12.4.1 连续分配 309
12.4 分配方法 309
12.4.2 链接分配 311
12.4.3 索引分配 313
12.4.4 性能 314
12.5 空闲空间管理 315
12.5.2 链表 316
12.5.1 位向量 316
12.6.1 效率 317
12.6 效率与性能 317
12.5.3 组 317
12.5.4 计数 317
12.6.2 性能 319
12.7.2 备份与恢复 321
12.7.1 一致性检查 321
12.7 恢复 321
12.8 基于日志结构的文件系统 322
12.9 NFS 323
12.9.1 概述 324
12.9.3 NFS协议 325
12.9.2 安装协议 325
12.9.5 远程操作 327
12.9.4 路径名转换 327
12.10 小结 328
习题十二 329
推荐读物 330
13.2 I/O硬件 333
13.1 概述 333
第四部分 I/O系统 333
第十三章 I/O系统 333
13.2.1 轮询(polling) 336
13.2.2 中断 337
13.2.3 直接内存访问 339
13.3 I/O应用接口 341
13.3.1 块与字符设备 343
13.3.3 时钟与定时器 344
13.3.2 网络设备 344
13.4 I/O内核子系统 345
13.3.4 阻塞与非阻塞I/O 345
13.4.2 缓冲 346
13.4.1 I/O调度 346
13.4.3 高速缓存 347
13.4.5 错误处理 348
13.4.4 假脱机与设备预留 348
13.4.6 内核数据结构 349
13.5 把I/O操作转换成硬件操作 350
13.6 流 352
13.7 性能 353
习题十三 356
13.8 小结 356
推荐读物 357
14.1 磁盘结构 358
第十四章 大容量存储器结构 358
14.2.1 FCFS调度 359
14.2 磁盘调度 359
14.2.3 SCAN调度 360
14.2.2 SSTF调度 360
14.2.4 C—SCAN调度 361
14.2.6 磁盘调度算法的选择 362
14.2.5 LOOK调度 362
14.3.1 磁盘格式化 363
14.3 磁盘管理 363
14.3.2 引导块 364
14.4 交换空间管理 365
14.3.3 坏块 365
14.4.2 交换空间位置 366
14.4.1 交换空间的使用 366
14.4.3 交换空间管理:例子 367
14.5.1 通过冗余改善可靠性 368
14.5 RAID结构 368
14.5.3 RAID级别 369
14.5.2 通过并行处理改善性能 369
14.6.1 主机附属存储 373
14.6 磁盘附属 373
14.5.4 RAID级别的选择 373
14.5.5 扩展 373
14.6.2 网络附属存储 374
14.7 稳定存储实现 375
14.6.3 存储区域网络 375
14.8.1 第三级存储设备 376
14.8 第三级存储结构 376
14.8.2 操作系统作业 378
14.8.3 性能 381
14.9 小结 384
习题十四 385
推荐读物 389
15.1.1 分布式系统的优点 393
15.1 背景 393
第五部分 分布式系统 393
第十五章 分布式系统结构 393
15.1.2 分布式操作系统的类型 395
15.2 拓扑结构 399
15.1.3 阶段性小结 399
15.3.1 局域网 400
15.3 网络类型 400
15.3.2 广域网 401
15.4.1 命名和名字解析 403
15.4 通信 403
15.4.2 路由策略 404
15.4.3 分组策略 405
15.4.5 竞争 406
15.4.4 连接策略 406
15.5 通信协议 407
15.6.1 故障检测 410
15.6 健壮性 410
15.6.3 故障恢复 411
15.6.2 重构 411
15.7 设计事项 412
15.8 实例:连网 414
15.9 小结 415
习题十五 416
推荐读物 417
16.1 背景 418
第十六章 分布式文件系统 418
16.2.1 命名结构 419
16.2 命名和透明性 419
16.2.3 实现技术 421
16.2.2 命名方案 421
16.3.1 基本的缓存设计 422
16.3 远程文件访问 422
16.3.2 缓存位置 423
16.3.4 一致性 424
16.3.3 缓存更新策略 424
16.3.5 高速缓存和远程服务的对比 425
16.4 有状态服务和无状态服务 426
16.5 文件复制 427
16.6.1 概述 428
16.6 一个实例:AFS 428
16.6.2 共享名字空间 429
16.6.3 文件操作和一致性语义 430
16.6.4 实现 431
16.7 小结 432
推荐读物 433
习题十六 433
17.1.1 事前关系 434
17.1 事件排序 434
第十七章 分布式协调 434
17.1.2 实现 435
17.2.2 完全分布式的算法 436
17.2.1 集中式算法 436
17.2 互斥 436
17.3.1 两阶段提交协议 438
17.3 原子性 438
17.2.3 令牌传递算法 438
17.3.2 IPC中的错误处理 439
17.4.1 加锁协议 441
17.4 并发控制 441
17.4.2 时间戳 443
17.5.1 死锁预防 444
17.5 死锁处理 444
17.5.2 死锁检测 446
17.6.1 Bully算法 450
17.6 选举算法 450
17.6.2 环算法 451
17.7.1 不可靠通信 452
17.7 达成一致 452
17.7.2 故障处理 453
习题十七 454
17.8 小结 454
推荐读物 455
18.1 保护目标 459
第十八章 保护 459
第六部分 保护与安全 459
18.2.1 域结构 460
18.2 保护域 460
18.2.3 举例:MULTICS 462
18.2.2 举例:UNIX 462
18.3 访问矩阵 464
18.4.2 对象的访问列表 467
18.4.1 全局表 467
18.4 访问矩阵的实现 467
18.4.4 锁—钥匙机制 468
18.4.3 域的权限列表 468
18.4.5 比较 469
18.5 访问权限的撤回 470
18.6.1 举例:Hydra 471
18.6 基于权限的系统 471
18.6.2 举例:剑桥CAP系统 472
18.7 基于语言的保护 473
18.7.1 基于编译程序的强制 474
18.7.2 Java 2的保护 476
18.8 小结 477
习题十八 478
推荐读物 479
19.1 安全问题 480
第十九章 安全 480
19.2.1 密码 481
19.2 用户验证 481
19.2.2 密码脆弱的一面 482
19.2.3 密码加密 483
19.2.5 生物测定学 484
19.2.4 一次性密码 484
19.3.1 特洛伊木马 485
19.3 程序威胁 485
19.3.3 栈和缓冲区溢出 486
19.3.2 后门 486
19.4.1 蠕虫 487
19.4 系统威胁 487
19.4.2 病毒 489
19.5 保证系统与设备的安全 491
19.4.3 拒绝服务 491
19.6 入侵检测 493
19.6.1 入侵的组成 494
19.6.2 审计和记录 495
19.6.3 Tripwire 496
19.6.4 系统调用监控 497
19.7 密码系统 498
19.7.1 验证 499
19.7.2 加密 500
19.7.3 举例:SSL 501
19.7.4 密码术的使用 502
19.8 计算机安全分类 503
19.9 例子:Windows NT 504
19.10 小结 506
推荐读物 507
习题十九 507
20.1 发展历程 511
第二十章 Linux系统 511
第七部分 案例研究 511
20.1.1 Linux内核 512
20.1.2 Linux系统 513
20.1.3 Linux版本 514
20.2 设计原理 515
20.1.4 Linux许可 515
20.2.1 Linux系统的组件 516
20.3.1 模块管理 518
20.3 内核模块 518
20.3.2 驱动程序注册 519
20.4.1 Fork/Exec进程模型 520
20.4 进程管理 520
20.3.3 冲突解决方案 520
20.4.2 进程与线程 522
20.5.1 内核同步 523
20.5 调度 523
20.5.2 进程调度 526
20.6.1 物理内存管理 527
20.6 内存管理 527
20.5.3 对称多处理技术 527
20.6.2 虚拟内存 529
20.6.3 用户程序的执行与装载 531
20.7.1 虚拟文件系统 533
20.7 文件系统 533
20.7.2 Linux ext2fs文件系统 534
20.7.3 Linux Proc文件系统 536
20.8 输入与输出 537
20.8.1 块设备 538
20.8.2 字符设备 539
20.9.2 进程间数据传输 540
20.9.1 同步与信号 540
20.9 进程间通信 540
20.10 网络结构 541
20.11.1 认证 543
20.11 安全 543
20.11.2 访问控制 544
20.12 小结 545
推荐读物 546
习题二十 546
21.1 历史 548
第二十一章 Windows 2000 548
21.2 设计原则 549
21.3.1 硬件抽象层 550
21.3 系统组成 550
21.3.2 内核 551
21.3.3 执行体 555
21.4.1 MS-DOS环境 564
21.4 环境子系统 564
21.4.3 Win32环境 565
21.4.2 16位Windows环境 565
21.5 文件系统 566
21.4.6 登录和安全子系统 566
21.4.4 POSIX子系统 566
21.4.5 OS/2子系统 566
21.5.1 内部布局 567
21.5.2 恢复 568
21.5.4 卷管理及容错 569
21.5.3 安全 569
21.5.6 再解析点 572
21.5.5 压缩技术 572
21.6.1 协议 573
21.6 网络 573
21.6.2 分布式处理机制 574
21.6.4 域 576
21.6.3 重定向器与服务器 576
21.6.5 TCP/IP网络中的名称解析 577
21.7.1 访问内核对象 578
21.7 程序接口 578
21.7.2 进程管理 580
21.7.3 进程间通信 581
21.7.4 内存管理 582
习题二十一 584
21.8 小结 584
推荐读物 585
22.1 历史 586
第二十一章 Windows XP 586
22.2.2 可靠性 587
22.2.1 安全性 587
22.2 设计原则 587
22.2.4 高性能 588
22.2.3 Windows和POSIX应用的兼容性 588
22.3 系统组成 589
22.2.7 国际支持 589
22.2.5 可扩展性 589
22.2.6 可移植性 589
22.3.1 硬件抽象层 590
22.3.2 内核 591
22.3.3 执行体 594
22.4.1 MS-DOS环境 609
22.4 环境子系统 609
22.4.3 IA64的32位Windows环境 610
22.4.2 16位Windows环境 610
22.4.5 POSIX子系统 611
22.4.4 Win32环境 611
22.5.1 NTFS内部布局 612
22.5 文件系统 612
22.4.6 登录与安全子系统 612
22.5.2 恢复 614
22.5.4 卷管理和容错 615
22.5.3 安全 615
22.5.6 安装点 618
22.5.5 压缩与加密 618
22.6.1 网络接口 619
22.6 网络 619
22.5.7 改变日志 619
22.5.8 卷影子拷贝 619
22.6.2 协议 620
22.6.3 分布式处理机制 621
22.6.4 重定向器与服务器 623
22.6.5 域 624
22.7.1 内核对象访问 625
22.7 程序接口 625
22.6.6 活动目录 625
22.6.7 TCP/IP网络的名称解析 625
22.7.2 进程间的对象共享 626
22.7.3 进程管理 627
22.7.4 进程间通信 629
22.7.5 内存管理 630
习题二十二 632
22.8 小结 632
推荐读物 633
23.1 早期系统 634
第二十三章 历史纵览 634
23.2 Atlas 639
23.3 XDS-940 640
23.5 RC4000 641
23.4 THE 641
23.6 CTSS 642
23.8 OS/360 643
23.7 MULTICS 643
23.9 Mach 645
23.10 其他系统 646
参考文献 647
原版相关内容引用表 669
英汉对照表 670