第1章 分布式系统概述 1
1.1 什么是分布式系统 1
1.2 目标 2
1.2.1 分布式系统与集中式系统相比较而言的优点 2
1.2.2 分布式系统与独立PC机相比较的优点 4
1.2.3 分布式系统的缺点 5
1.3 硬件概念 5
1.3.1 基于总线的多处理机 7
1.3.2 交换型多处理机 8
1.3.3 基于总线的多计算机 10
1.3.4 交换型多计算机 10
1.4 软件概念 11
1.4.1 网络操作系统 12
1.4.2 真正的分布式系统 13
1.4.3 多处理机分时系统 14
1.5 设计中的问题 16
1.5.1 透明性 16
1.5.2 灵活性 18
1.5.3 可靠性 19
1.5.4 性能 20
1.5.5 可伸缩性 21
1.6 小结 22
习题 23
第2章 分布式系统的通信 25
2.1 分层协议 25
2.1.1 物理层 27
2.1.2 数据链路层 28
2.1.3 网络层 28
2.1.4 传输层 29
2.1.5 会话层 29
2.1.6 表示层 30
2.1.7 应用层 30
2.2 ATM网络 30
2.2.1 什么是异步传输模式 30
2.2.2 ATM物理层 32
2.2.3 ATM层 32
2.2.4 ATM适配层 33
2.2.5 ATM交换 34
2.2.6 ATM对分布式系统的影响 35
2.3 客户-服务器模式 36
2.3.1 客户和服务器 36
2.3.2 客户和服务器的一个示例 37
2.3.3 寻址 40
2.3.4 阻塞与非阻塞原语 42
2.3.5 有缓冲和无缓冲原语 44
2.3.6 可靠和非可靠原语 45
2.3.7 客户-服务器模式的实现 47
2.4 远程过程调用 48
2.4.1 基本RPC操作 49
2.4.2 参数传递 51
2.4.3 动态捆绑 55
2.4.4 失败情况下的RPC语义 57
2.4.5 实现的问题 60
2.4.6 问题领域 68
2.5 组通信 70
2.5.1 组通信的引入 70
2.5.2 设计的问题 71
2.5.3 在ISIS中的组通信 78
2.6 小结 81
习题 82
第3章 分布式系统的同步 84
3.1 时钟同步 84
3.1.1 逻辑时钟 85
3.1.2 物理时钟 88
3.1.3 时钟同步算法 90
3.1.4 使用同步时钟 93
3.2 互斥 94
3.2.1 集中式算法 95
3.2.2 分布式算法 95
3.2.3 令牌环算法 97
3.2.4 三种算法的比较 98
3.3 选举算法 99
3.3.1 欺负算法 99
3.3.2 环算法 100
3.4 原子事务 101
3.4.1 原子事务简介 101
3.4.2 事务模型 103
3.4.3 实现 106
3.4.4 并发控制 109
3.5 分布式系统中的死锁 112
3.5.1 分布式死锁检测 113
3.5.2 分布式死锁预防 115
3.6 小结 117
习题 117
第4章 分布式系统中的进程和处理机 120
4.1 线程 120
4.1.1 线程简介 120
4.1.2 线程的用途 121
4.1.3 线程包的设计问题 123
4.1.4 实现一个线程包 126
4.1.5 线程和远程过程调用(RPC) 130
4.2 系统模型 131
4.2.1 工作站模型 131
4.2.2 使用空闲工作站 133
4.2.3 处理机池模型 136
4.2.4 混合模型 139
4.3 处理机分配 139
4.3.1 分配模型 139
4.3.2 处理机分配算法的设计问题 141
4.3.3 处理机分配算法的实现问题 142
4.3.4 处理机分配算法举例 144
4.4 分布式系统的调度 148
4.5 容错 150
4.5.1 组成部件错误 150
4.5.2 系统失效 151
4.5.3 同步系统与异步系统 151
4.5.4 使用冗余 151
4.5.5 使用主动复制方法的容错 152
4.5.6 使用主机后备的容错 154
4.5.7 容错系统中的协同一致 155
4.6 实时分布式系统 157
4.6.1 什么是实时系统 157
4.6.2 设计问题 160
4.6.3 实时通信 162
4.6.4 实时调度 165
4.7 小结 170
习题 170
第5章 分布式文件系统 173
5.1 分布式文件系统设计 173
5.1.1 文件服务接口 173
5.1.2 目录服务器接口 175
5.1.3 文件共享的语义 178
5.2 分布式文件系统的实现 181
5.2.1 文件的使用 181
5.2.2 系统结构 182
5.2.3 高速缓存 184
5.2.4 复制 189
5.2.5 例子:SUN公司的网络文件系统 191
5.2.6 学到的教训 196
5.3 分布式文件系统的发展趋势 197
5.3.1 新的硬件 197
5.3.2 规模 198
5.3.3 广域网 199
5.3.4 移动用户 200
5.3.5 容错 200
5.3.6 多媒体 200
5.4 小结 201
习题 201
第6章 分布式共享存储器 203
6.1 简介 204
6.2 什么是共享存储器 205
6.2.1 芯片存储器 205
6.2.2 基于总线的多处理机 205
6.2.3 基于环的多处理机 208
6.2.4 交换式多处理机 210
6.2.5 NUMA多处理机 215
6.2.6 分布式共享系统的比较 217
6.3 一致性模型 219
6.3.1 严格一致性 220
6.3.2 顺序一致性 221
6.3.3 因果一致性 224
6.3.4 PRAM一致性和处理器一致性 225
6.3.5 弱一致性 226
6.3.6 释放一致性 228
6.3.7 入口一致性 230
6.3.8 一致性模型总结 230
6.4 基于分页的分布式共享存储器 231
6.4.1 基本设计 232
6.4.2 复制 232
6.4.3 粒度 233
6.4.4 实现顺序一致性 234
6.4.5 寻找拥有者 237
6.4.6 寻找拷贝 238
6.4.7 页面置换 238
6.4.8 同步 239
6.5 共享变量的分布式共享存储器 240
6.5.1 Munin 240
6.5.2 Midway 245
6.6 基于对象的分布共享内存 246
6.6.1 对象 247
6.6.2 Linda 248
6.6.3 Orca 253
6.7 比较 257
6.8 小结 258
习题 258
第7章 实例研究1:Amoeba 260
7.1 Amoeba介绍 260
7.1.1 Amoeba的发展史 260
7.1.2 研究目标 260
7.1.3 Amoeba的系统结构 261
7.1.4 Amoeba微内核 263
7.1.5 Amoeba服务器 264
7.2 Amoeba中的对象和权能 265
7.2.1 权能 265
7.2.2 对象保护 266
7.2.3 标准操作 267
7.3 Amoeba中的进程管理 268
7.3.1 进程 268
7.3.2 线程 270
7.4 Amoeba中的内存管理 270
7.4.1 段 271
7.4.2 段映射 271
7.5 Amoeba的通信 272
7.5.1 远程过程调用 272
7.5.2 Amoeba的组通信 275
7.5.3 快速本地互联协议FLIP 281
7.6 Amoeba服务器 286
7.6.1 子弹服务器 286
7.6.2 目录服务器 289
7.6.3 复制服务器 293
7.6.4 运行服务器 293
7.6.5 引导服务器 294
7.6.6 TCP/IP服务器 295
7.6.7 其他服务器 295
7.7 小结 295
习题 296
第8章 实例研究2:Mach 297
8.1 有关Mach的介绍 297
8.1.1 Mach的发展历史 297
8.1.2 Mach的设计目标 298
8.1.3 Mach微内核 298
8.1.4 Mach的BSD UNIX服务器 300
8.2 Mach中的进程管理 300
8.2.1 进程 300
8.2.2 线程 302
8.2.3 调度 305
8.3 Mach的存储管理 307
8.3.1 虚拟内存 307
8.3.2 存储共享 309
8.3.3 外部存储管理器 312
8.3.4 Mach中的分布式共享存储 314
8.4 Mach中的通信 315
8.4.1 端口 315
8.4.2 消息的发送与接收 319
8.4.3 网络消息服务器 323
8.5 Mach的UNIX仿真 325
8.6 小结 326
习题 326
第9章 实例研究3:Chorus 328
9.1 Chorus简介 328
9.1.1 Chorus的发展史 328
9.1.2 Chorus的设计目标 329
9.1.3 Chorus系统结构 330
9.1.4 内核概念 331
9.1.5 内核结构 332
9.1.6 UNIX子系统 333
9.1.7 面向对象子系统 334
9.2 Chorus中的进程管理 334
9.2.1 进程 334
9.2.2 线程 335
9.2.3 调度 336
9.2.4 陷阱、异常和中断 337
9.2.5 进程管理的内核调用 337
9.3 Chorus的内存管理 339
9.3.1 区域和段 339
9.3.2 映像程序 339
9.3.3 分布式共享存储器 340
9.3.4 内存管理的内核调用 340
9.4 Chorus中的通信 342
9.4.1 消息 342
9.4.2 端口 342
9.4.3 通信操作 343
9.4.4 通信的内核调用 344
9.5 Chorus中的UNIX仿真 345
9.5.1 UNIX进程的结构 346
9.5.2 对UNIX的扩展 346
9.5.3 Chorus上UNIX的实现 347
9.6 COOL:一个面向对象的子系统 350
9.6.1 COOL的体系结构 351
9.6.2 COOL基层 351
9.6.3 COOL通用运行时系统 352
9.6.4 语言运行时系统 352
9.6.5 COOL的实现 353
9.7 Amoeba,Mach和Chorus之比较 353
9.7.1 指导思想 353
9.7.2 对象 354
9.7.3 进程 355
9.7.4 内存模式 355
9.7.5 通信 356
9.7.6 服务器 357
9.8 小结 358
习题 358
第10章 实例研究4:DCF 360
10.1 关于DCE的介绍 360
10.1.1 DCE的历史 360
10.1.2 DCE的目标 360
10.1.3 DCE部件 361
10.1.4 信元 363
10.2 线程 365
10.2.1 DCE线程介绍 365
10.2.2 调度 366
10.2.3 同步 367
10.2.4 线程调用 367
10.3 远程过程调用 370
10.3.1 DCE RPC的目标 370
10.3.2 客户与服务器的编写 370
10.3.3 客户到服务器的绑定 372
10.3.4 RPC的执行 373
10.4 时间服务 374
10.4.1 DTS时间模型 374
10.4.2 DTS实现 376
10.5 目录服务 377
10.5.1 名字 377
10.5.2 信元目录服务 378
10.5.3 全局目录服务 381
10.6 安全服务 384
10.6.1 安全模式 384
10.6.2 安全部件 386
10.6.3 许可证与鉴别码 387
10.6.4 认证过的RPC 388
10.6.5 访问控制表 390
10.7 分布式文件系统 391
10.7.1 DFS接口 392
10.7.2 服务器核心中的DFS部件 394
10.7.3 客户内核中的DFS部件 395
10.7.4 用户空间中的DFS部件 397
10.8 小结 398
习题 399
第11章 读物列表与参考书目 401
11.1 阅读材料建议 401
11.1.1 介绍性和普通著作 401
11.1.2 分布式系统通信 402
11.1.3 分布式系统同步 402
11.1.4 分布式系统进程和处理机 403
11.1.5 分布式文件系统 404
11.1.6 分布式共享存储器 404
11.1.7 实例研究1:Amoeba 404
11.1.8 实例研究2:Mach 405
11.1.9 实例研究3:Chorus 405
11.1.10 实例研究4:DCE 406
11.2 文献目录(按字母顺序排列) 406