第1章 系统设计需求 1
1.1 内在的并发系统 2
1.2 支持潜在的并发应用 11
1.3 软件系统的体系结构 14
1.4 定义并发系统 20
1.5 系统实现需求 21
1.6 系统设计中的安全,保护与容错 22
习题 22
第一部分 系统设计:技术与原理 25
第2章 系统结构与动态执行 26
2.1 系统结构:概念视图 27
2.2 系统结构:实现视图 29
2.3 进程概念 36
2.4 操作系统功能 39
2.5 操作系统调用和保护 40
2.6 操作系统结构 41
2.7 操作系统内的对象结构及操作系统支持下的对象结构 44
2.8 分布式对象系统,平台和中间件 46
2.9 安全与保护 47
2.10 小结 48
思考题 48
习题 49
第3章 硬件接口,I/O和通信 50
3.1 概述 50
3.2 与设备的接口 51
3.3 异常处理 59
3.4 多处理器 62
3.5 用户级的输入和输出 64
3.6 通信管理 65
3.7 通信网络,接口和驱动 66
3.8 通信协议 69
3.9 操作系统之中和操作系统之上对通信的处理 72
3.10 小结 73
习题 74
第4章 进程支持 75
4.1 系统中进程的使用 75
4.2 进程和处理器 76
4.3 进程状态 78
4.4 与硬件同步:事件与WAIT操作 79
4.5 进程数据结构 81
4.6 调度:通用方案 82
4.7 共享内存多处理器系统的调度 84
4.8 满足实时需求的进程调度 85
4.9 进程抽象和实现 88
4.10 操作系统结构和进程的实现 89
4.11 多线程进程的实现 90
4.12 语言系统,运行时系统和操作系统中的进程 91
4.13 语言系统和操作系统中的进程状态 92
4.14 使用系统调用的顺序程序 94
4.15 编程语言并行性的发展 95
4.16 编程语言中的进程创建 102
4.17 线程体系结构 105
4.18 Java的线程和异常 107
4.19 小结 109
思考题 110
习题 111
第5章 存储管理 113
5.1 存储管理简介 113
5.2 存储层次结构 114
5.3 进程的地址空间 115
5.4 段式虚拟存储 118
5.5 页式虚拟存储 121
5.6 分段和分页结合 123
5.7 操作系统数据结构 125
5.8 内存管理单元的示例 128
5.9 系统设计中的内存管理 130
5.10 小结 131
习题 131
第6章 文件管理 133
6.1 文件管理 133
6.2 文件系统功能综述 133
6.3 文件和目录结构 135
6.4 文件系统接口 137
6.5 文件系统的实现 139
6.6 现代文件系统设计 144
6.7 基于网络的文件服务 147
6.8 虚拟内存和存储的集成 152
6.9 小结 154
习题 155
第7章 分布式系统基础 156
7.1 简介 156
7.2 一般分布式系统的演化 157
7.3 个人计算 158
7.4 模型和软件架构 158
7.5 分布式系统的独有特点 158
7.6 分布式系统中的时间 159
7.7 命名 162
7.9 小结 166
7.8 移动用户,计算机和对象 166
习题 167
第8章 安全 168
8.1 场景和安全需求 168
8.2 威胁及风险分析 169
8.3 加密方法 170
8.4 算法 173
8.5 协议 175
8.6 实例 180
8.7 小结 183
习题 184
第二部分 主存中的并发控制 185
第9章 系统结构 187
9.1 共享地址空间中的进程 187
9.2 独立地址空间中的进程 189
9.3 共享操作系统 190
9.4 对两种模型中进程设置方式的小结 191
9.5 进程间交互的要求 193
9.6 进程交互的种类 194
9.7 进程交互 195
9.8 单一并发动作的定义 198
习题 199
思考题 199
第10章 底层同步:实现 201
10.1 进程同步和事件通知与等待之间的比较 202
10.2 互斥 202
10.3 互斥的硬件支持 204
10.4 信号量 207
10.5 使用信号量的风格 208
10.6 信号量操作的实现 211
10.7 小结 215
思考题 215
习题 216
第11章 底层同步:算法 218
11.1 简介 218
11.2 系统设计中信号量的例子:THE系统 218
11.3 生产者-消费者,有界缓冲区问题 220
11.4 安全性和活跃性属性 224
11.5 多读者,单写者问题 225
11.6 信号量的局限性 229
11.7 eventcount(事件计数)与sequencer(序列器) 229
11.8 POSIX线程 233
11.9 小结 236
实例研究及练习:磁盘高速缓存的管理 237
思考题 241
习题 242
第12章 用共享内存实现IPC 244
12.1 编程语言中的临界区 244
12.2 管程 246
12.3 在操作粒度上的同步 259
12.4 小结 263
思考题 264
习题 264
13.1 进程间通信的风格 267
第13章 IPC和系统结构 267
13.2 系统结构和用共享内存实现的IPC 268
13.3 系统结构和非共享内存的IPC 269
13.4 适合共享内存通信的系统 270
13.5 不适合共享内存通信的系统 270
13.6 经典UNIX中的例子 270
13.7 进程间通信概述 271
13.8 系统结构的对偶性 273
13.9 命名 274
思考题 275
习题 275
13.10 小结 275
第14章 非共享内存的IPC 276
14.1 简介 276
14.2 共享文件 277
14.3 UNIX管道 277
14.4 异步消息传递 279
14.5 基本消息传递机制的几种变体 281
14.6 异步消息传递的实现 285
14.7 同步消息传递 287
14.8 编程语言中的消息传递 288
14.10 小结 291
14.9 服务器和客户端的多线程模型 291
思考题 292
习题 292
第15章 灾难恢复和永久数据存储 293
15.1 故障简述 293
15.2 灾难模型 294
15.3 灾难恢复和透明性 294
15.4 幂等(可重复)操作 294
15.5 永久对象的原子操作 295
15.6 原子操作的实现 295
15.7 非易失内存 297
15.8 永久存储的操作 298
15.9 操作系统中DBMS的需求 299
15.10 小结 299
思考题 300
习题 300
第16章 分布式IPC 301
16.1 简介 301
16.2 分布式系统的特征 302
16.3 分布式IPC:消息传递 302
16.4 IPC和通信的集成 304
16.5 Java的套接字和流 307
16.6 分布式程序设计范型 310
16.7 远程过程调用 312
16.8 RPC语言集成 316
16.9 Java的RMI:一般对象模型中的RPC 320
16.10 对同步调用的评述 325
16.11 命名,定位和绑定 326
16.12 小结 329
思考题 330
习题 330
第三部分 事务 333
17.1 组合操作 334
第17章 组合操作 334
17.2 主存中的组合操作 335
17.3 涉及主存和持久性存储的组合操作 335
17.4 组合操作的并发执行 336
17.5 潜在的问题 337
17.6 系统崩溃 339
17.7 小结 340
思考题 340
习题 341
18.2 死锁 342
18.1 动态分配需求 342
第18章 资源分配和死锁 342
18.3 活锁和饥饿 344
18.4 死锁存在的必要条件 344
18.5 哲学家就餐问题 345
18.6 对象分配图 346
18.7 死锁检测的数据结构及算法 347
18.8 死锁避免 349
18.9 关于多进程释放对象 351
18.10 分布式死锁 351
18.11 小结 352
思考题 353
习题 354
第19章 事务处理 355
19.1 简介 355
19.2 事务的规约与编程 356
19.3 串行化和一致性的定义 358
19.4 事务的ACID属性 359
19.5 给出事务的特定次序 359
19.6 事务处理的一个系统模型 360
19.7 事务的依赖图 363
19.8 历史记录及串行图 365
19.9 处理中止操作:更多关于隔离性 367
19.10 小结 369
思考题 370
习题 370
第20章 并发控制 372
20.1 简介 372
20.2 主存中的并发组合操作 372
20.3 事务管理系统的结构 375
20.4 通过锁机制控制并发 375
20.5 时间戳顺序(TSO) 378
20.6 乐观并发控制(OCC) 380
20.7 小结 386
习题 387
思考题 387
21.1 系统恢复需求 389
第21章 系统恢复 389
21.2 对象模型,对象状态与恢复 390
21.3 并发,系统崩溃和事务特性 390
21.4 为系统崩溃恢复提供日志和影子对象 391
21.5 恢复日志的使用 391
21.6 撤销和重做操作 393
21.7 系统失效时的事务状态 394
21.8 事务恢复的算法 394
21.10 小结 396
21.9 移动对象的位置数据库 396
习题 397
第22章 分布式事务 398
22.1 分布式系统的一个对象模型 398
22.2 分布式事务处理 399
22.3 通信 400
22.4 并发控制:两阶段锁 400
22.5 并发控制:时间戳顺序 400
22.6 乐观并发控制 401
22.7 分布式系统的提交和终止 402
22.8 原子性提交:两阶段提交协议 403
22.9 对OCC的两阶段确认 404
22.10 小结 406
思考题 407
习题 407
第23章 分布式计算 408
23.1 简介 408
23.2 进程组 408
23.3 数据副本的一致性 411
23.4 消息传递的排序 412
23.5 分布式的n进程互斥 414
23.6 小结 417
习题 418
第四部分 实例研究 420
第24章 经典UNIX 420
24.1 简介 420
24.2 UNIX的发展历史 421
24.3 系统结构和UNIX内核 421
24.4 文件系统接口 424
24.5 文件系统的实现 426
24.6 进程创建,终止和调度 430
24.7 IPC:管道和信号 437
24.8 小结 441
习题 441
第25章 Linux,Solaris和现代UNIX 443
25.1 简介 443
25.2 内核结构 443
25.3 SVr4 IPC 447
25.4 套接字和集成了IPC的文件子系统 450
25.5 内存管理 455
25.6 多处理器调度 457
习题 459
25.7 小结 459
第26章 可扩展系统 461
26.1 可扩展性机制 461
26.2 编译时配置 462
26.3 微内核操作系统 463
26.4 可下载代码 467
26.5 exokernel和垂直结构 468
26.6 嵌套虚拟机 472
26.7 可扩展虚拟机 474
26.8 小结 477
习题 478
27.1 Windows 2000简介 479
第27章 Windows 2000 479
27.2 系统结构 480
27.3 对象模型和对象管理 482
27.4 内核 488
27.5 进程,线程,纤程和并发控制 490
27.6 I/O子系统 493
27.7 NT文件系统(NTFS) 496
27.8 网络 498
27.9 小结 500
习题 501
第28章 万维网 502
28.1 Web客户端与Web服务器的简单交互 502
28.2 Web页面的命名 504
28.3 使用HTTP通信 505
28.4 文档表示 505
28.5 在客户端和服务器上执行程序 507
28.6 安全 508
28.7 并发控制 509
28.8 可伸缩性问题 509
28.9 基于Web的中间件:XML和SOAP 510
习题 511
28.10 小结 511
第29章 中间件 512
29.1 中间件范型 512
29.2 Java中间件 514
29.3 OMG和OMA 519
29.4 CORBA 522
29.5 ODMG 526
29.6 COM,DCOM和.NET 526
29.7 面向消息的中间件(MOM) 528
29.8 小结 531
习题 532
30.1 事务处理监视器 533
第30章 事务处理监视器和系统 533
30.2 电子货币转账(EFT)应用程序简介 537
30.3 国际银行支付:SWIFT 539
30.4 使用PIN码验证身份 539
30.5 国际自动柜员机(ATM)网络服务 541
30.6 TP系统中的负载和通信 543
30.7 小结和趋势 544
习题 545
附录A 计算机系统的演变 546
参考文献 561
术语表 572