第1章 绪论 1
1.1 分布式系统的定义 1
1.2 目标 3
1.2.1 让用户连接到资源 3
1.2.2 透明性 4
1.2.3 开放性 6
1.2.4 可扩展性 7
1.3 分布式系统的硬件 12
1.3.1 多处理器系统 13
1.3.2 同构式多计算机系统 15
1.3.3 异构式多计算机系统 16
1.4 分布式系统的软件 17
1.4.1 分布式操作系统 18
1.4.2 网络操作系统 26
1.4.3 中间件 28
1.5 客户-服务器模型 33
1.5.1 客户与服务器 33
1.5.2 应用程序的分层 38
1.5.3 客户-服务器体系结构 40
习题 43
1.6 小结 43
第2章 通信 45
2.1 分层协议 45
2.1.1 低层协议 48
2.1.2 传输协议 50
2.1.3 高层协议 52
2.2 远程过程调用 54
2.2.1 基本的RPC操作 55
2.2.2 参数传递 58
2.2.3 扩展的RPC模型 61
2.2.4 实例:DCE RPC 64
2.3 远程对象调用 68
2.3.1 分布式对象 68
2.3.2 将客户绑定到对象 70
2.3.3 静态远程方法调用与动态远程方法调用 72
2.3.4 参数传递 73
2.3.5 实例1:DCE远程对象 74
2.3.6 实例2:Java RMI 76
2.4 面向消息的通信 79
2.4.1 通信中的持久性和同步性 79
2.4.2 面向消息的暂时通信 83
2.4.3 面向消息的持久通信 86
2.4.4 示例:IBM MQSeries 91
2.5 面向流的通信 95
2.5.1 为连续媒体提供支持 95
2.5.2 流与服务质量 98
2.5.3 流同步 101
2.6 小结 103
习题 104
3.1.1 线程简介 107
3.1 线程 107
第3章 进程 107
3.1.2 分布式系统中的线程 112
3.2 客户 114
3.2.1 用户界面 114
3.2.2 客户端软件与分布透明性 116
3.3 服务器 117
3.3.1 设计上常见的重要问题 117
3.3.2 对象服务器 120
3.4 代码迁移 125
3.4.1 代码迁移方案 125
3.4.2 迁移与本地资源 128
3.4.3 异构系统中的代码迁移 131
3.4.4 实例:D'Agents 132
3.5 软件代理 136
3.5.1 分布式系统中的软件代理 136
3.5.2 代理技术 138
3.6 小结 140
习题 141
4.1 实体的命名 144
4.1.1 名称、标识符和地址 144
第4章 命名 144
4.1.2 名称解析 148
4.1.3 名称空间的实现 152
4.1.4 示例:域名系统 158
4.1.5 示例:X.500 161
4.2 移动实体的定位 165
4.2.1 实体命名与定位 165
4.2.2 简单方法 167
4.2.3 基于起始位置的方法 169
4.2.4 分层方法 171
4.3 删除无引用的实体 176
4.3.1 无引用对象的问题 177
4.3.2 引用计数 178
4.3.3 引用列表 181
4.3.4 标识不可到达实体 182
4.4 小结 187
习题 188
第5章 同步 190
5.1 时钟同步 190
5.1.1 物理时钟 191
5.1.2 时钟同步算法 194
5.1.3 使用同步时钟 197
5.2 逻辑时钟 198
5.2.1 Lamport时间戳 199
5.2.2 向量时间戳 201
5.3 全局状态 203
5.4 选举算法 206
5.4.1 欺负(Bully)算法 206
5.4.2 环算法 207
5.5 互斥 208
5.5.1 集中式算法 208
5.5.2 分布式算法 209
5.5.3 令牌环算法 211
5.5.4 三个算法的比较 212
5.6 分布式事务 213
5.6.1 事务模型 213
5.6.2 事务的分类 216
5.6.3 实现 218
5.6.4 并发控制 220
5.7 小结 226
习题 227
6.1 简介 229
第6章 一致性和复制 229
6.1.1 复制的目的 230
6.1.2 对象复制 230
6.1.3 作为扩展技术的复制 232
6.2 以数据为中心的一致性模型 233
6.2.1 严格一致性 234
6.2.2 线性化和顺序一致性 236
6.2.3 因果一致性 239
6.2.4 FIFO一致性 240
6.2.5 弱一致性 242
6.2.6 释放一致性 244
6.2.7 入口一致性 245
6.2.8 一致性模型小结 247
6.3 以客户为中心的一致性模型 248
6.3.1 最终一致性 249
6.3.2 单调读 250
6.3.3 单调写 251
6.3.4 写后读 252
6.3.5 读后写 253
6.3.6 实现 254
6.4.1 副本放置 256
6.4 分发协议 256
6.4.2 更新传播 259
6.4.3 epidemic协议 262
6.5 一致性协议 264
6.5.1 基于主备份的协议 264
6.5.2 复制的写协议 267
6.5.3 高速缓存相关性协议 270
6.6 实例 271
6.6.1 Orca 272
6.6.2 因果一致的懒惰复制 276
6.7 小结 279
习题 280
第7章 容错性 283
7.1 容错性简介 283
7.1.1 基本概念 283
7.1.2 典型故障 285
7.1.3 使用冗余来掩盖故障 287
7.2 进程恢复 288
7.2.1 设计问题 288
7.2.3 故障系统的协议 290
7.2.2 故障掩盖和复制 290
7.3 可靠的客户-服务器通信 293
7.3.1 点到点通信 293
7.3.2 出现失败时的RPC语义 293
7.4 可靠的组通信 298
7.4.1 基本的可靠多播方法 298
7.4.2 可靠多播中的可扩展性 299
7.4.3 原子多播 301
7.5 分布式提交 307
7.5.1 两阶段提交 307
7.5.2 三阶段提交 312
7.6 恢复 313
7.6.1 简介 314
7.6.2 检查点 316
7.6.3 消息日志 318
7.7 小结 320
习题 321
第8章 安全性 323
8.1 安全性介绍 323
8.1.1 安全威胁、策略和机制 323
8.1.2 设计问题 328
8.1.3 加密 331
8.2 安全通道 337
8.2.1 身份验证 338
8.2.2 消息完整性和机密性 344
8.2.3 安全组通信 346
8.3 访问控制 349
8.3.1 访问控制中的一般问题 349
8.3.2 防火墙 352
8.3.3 保护移动代码 354
8.4.1 密钥管理 359
8.4 安全管理 359
8.4.2 安全组管理 363
8.4.3 授权管理 364
8.5 实例:KERBEROS 368
8.6 实例:SESAME 370
8.6.1 SESAME组件 370
8.6.2 PAC 372
8.7 实例:电子付费系统 373
8.7.1 电子付费系统 373
8.7.2 电子付费系统中的安全性 375
8.7.3 协议实例 377
8.8 小结 381
习题 382
第9章 基于对象的分布式系统 384
9.1 CORBA 384
9.1.1 CORBA概述 385
9.1.2 通信 390
9.1.3 进程 395
9.1.4 命名 399
9.1.5 同步 402
9.1.6 缓存与复制 403
9.1.7 容错性 404
9.1.8 安全性 406
9.2 分布式组件对象模型(DCOM) 408
9.2.1 DCOM概述 408
9.2.2 通信 413
9.2.3 进程 415
9.2.4 命名 417
9.2.5 同步 420
9.2.6 复制 420
9.2.7 容错性 420
9.2.8 安全性 421
9.3 Globe 423
9.3.1 Globe概述 423
9.3.2 通信 430
9.3.3 进程 430
9.3.4 命名 432
9.3.5 同步 435
9.3.6 复制 435
9.3.7 容错性 437
9.3.8 安全性 438
9.4.1 基本原理 439
9.4 CORBA、DCOM和Globe的比较 439
9.4.2 通信 440
9.4.3 进程 441
9.4.4 命名 441
9.4.5 同步 442
9.4.6 缓存与复制 442
9.4.7 容错性 442
9.4.8 安全性 442
9.5 小结 444
习题 444
10.1 SUN网络文件系统 446
第10章 分布式文件系统 446
10.1.1 NFS概述 447
10.1.2 通信 450
10.1.3 进程 451
10.1.4 命名 452
10.1.5 同步 458
10.1.6 缓存和复制 462
10.1.7 容错性 464
10.1.8 安全性 466
10.2.1 Coda概述 469
10.2 Coda文件系统 469
10.2.2 通信 471
10.2.3 进程 472
10.2.4 命名 473
10.2.5 同步 474
10.2.6 缓存和复制 477
10.2.7 容错性 480
10.2.8 安全性 482
10.3 其他分布式文件系统 484
10.3.1 Plan 9:资源统一为文件 485
10.3.2 xFS:无服务器的文件系统 489
10.3.3 SFS:可扩展的安全性 494
10.4 分布式文件系统的比较 496
10.4.1 设计理念 497
10.4.2 通信 497
10.4.3 进程 497
10.4.4 命名 498
10.4.6 缓存和复制 499
10.4.7 容错性 499
10.4.5 同步 499
10.4.8 安全性 500
10.5 小结 501
习题 501
第11章 基于文档的分布式系统 503
11.1 WWW 503
11.1.1 WWW概述 504
11.1.2 通信 511
11.1.3 进程 515
11.1.4 命名 520
11.1.6 缓存和复制 522
11.1.5 同步 522
11.1.7 容错性 526
11.1.8 安全性 526
1 1.2 Lotus Notes 527
11.2.1 Lotus Notes概述 527
11.2.2 通信 529
11.2.3 进程 530
11.2.4 命名 531
11.2.5 同步 533
11.2.6 复制 533
11.2.8 安全性 535
11.2.7 容错性 535
11.3 WWW和Lotus Notes的比较 538
11.4 小结 542
习题 542
第12章 基于协作的分布式系统 544
12.1 协作模型介绍 544
12.2 TIB/Rendezvous 546
12.2.1 TIB/Rendezvous概述 546
12.2.2 通信 548
12.2.4 命名 551
12.2.3 进程 551
12.2.5 同步 553
12.2.6 缓存和复制 554
12.2.7 容错性 554
12.2.8 安全性 556
12.3 Jini 557
12.3.1 Jini概述 558
12.3.2 通信 560
12.3.3 进程 561
12.3.4 命名 563
12.3.5 同步 565
12.3.6 缓存和复制 567
12.3.7 容错性 567
12.3.8 安全性 567
12.4 TIB/Rendezvous和Jini的比较 568
12.5 小结 571
习题 571
第13章 阅读材料和参考书目 573
13.1 对进一步阅读的建议 573
13.1.1 介绍性和综述性的著作 573
13.1.2 通信 574
13.1.3 进程 575
13.1.4 命名 576
13.1.5 同步 576
13.1.6 一致性与复制 577
13.1.7 容错性 578
13.1.8 安全性 579
13.1.9 面向对象的分布式系统 580
13.1.10 分布式文件系统 581
13.1.11 基于文档的分布式系统 582
13.1.12 基于协作的分布式系统 583
13.2 参考书目列表 583