1.1 为什么需要分布计算系统 1
第一章 绪论 1
1.2 分布计算系统的相关概念 2
1.2.1 什么是分布计算系统 2
1.2.2 松散耦合与紧密耦合分布计算系统 3
1.2.3 同构型与异构型分布计算系统 4
1.3 分布计算系统的优点和新问题 6
1.3.1 分布计算系统的优点 6
1.4 分布计算系统的透明性 7
1.4.1 透明性的概念 7
1.3.2 分布计算系统的新问题 7
1.4.2 影响透明性的因素 8
1.5 分布计算系统与计算机网络系统 10
1.5.1 网络操作系统与分布式操作系统 10
1.5.2 计算机网络系统与分布计算系统的区别 12
1.6 分布计算系统的体系结构与设计问题 14
1.6.1 分布计算系统的分层体系结构 14
1.6.2 分布计算系统的组成 16
1.6.3 基于中间件的分布计算系统 17
1.6.4 分布计算系统的设计问题 19
参考文献 22
习题 22
第二章 进程通信 23
2.1 同一节点上的进程间通信 23
2.1.1 管道 23
2.1.2 消息队列 26
2.1.3 共享内存 30
2.2 不同节点上的进程间通信 31
2.2.1 网络通信分层结构模型 31
2.2.2 进程通信原语 36
2.2.3 报文传递实例1:socket进程通信 41
2.2.4 报文传递实例2:MPI进程通信 46
2.2.5 RPC实例1:SUN RPC 48
2.2.6 RPC实例2:DCE RPC 51
2.3 组通信 54
2.3.1 组通信的概念 54
2.3.2 组通信的设计问题 56
2.3.3 ISIS中的组通信 59
习题 62
参考文献 63
3.1.1 分布式应用程序的分类 64
第三章 分布式程序设计语言 64
3.1 分布式程序设计语言概述 64
3.1.2 分布式程序设计与顺序程序设计的区别 65
3.1.3 分布式程序设计语言的分类 66
3.2 并行性的支持 68
3.2.1 并行性的概念 68
3.2.2 并行性的表示 69
3.2.3 并行计算到物理处理机的变换 72
3.3 进程通信与同步的支持 74
3.3.1 报文传递 74
3.3.2 共享数据 78
3.3.3 非确定性的表示和控制 80
3.4 逻辑上分布地址空间的语言 83
3.4.1 同步式报文传递语言 83
3.4.2 异步式报文传递语言 84
3.4.3 基于会合的语言 85
3.4.4 基于远程过程调用的语言 86
3.4.5 多重通信原语 87
3.4.6 基于对象的语言 88
3.4.7 基于原子事务处理的语言 89
3.5.1 并行函数式语言 91
3.5 逻辑上共享地址空间的语言 91
3.5.2 并行逻辑语言 92
3.5.3 基于分布数据结构的语言 93
3.6 分布式控制描述语言DCDL 96
3.6.1 DCDL中并行性的表示 96
3.6.2 选择语句 97
3.6.3 重复语句 97
3.6.4 语句并发(或并行)的条件 99
3.6.5 DCDL中的通信 99
3.6.6 DCDL中的通信容错 101
习题 102
考文献 103
第四章 命名与保护 105
4.1 分布式系统中的命名 105
4.1.1 名字、标识符和地址 105
4.1.2 分布式系统中的名字 107
4.1.3 名字的结构 108
4.1.4 名字空间 109
4.1.5 名字解析 111
4.1.6 分布式系统中的名字空间的实现 114
4.1.7 实例:DNS 119
4.2 加密技术 123
4.2.1 传统加密方法 124
4.2.2 公开密钥加密方法 127
4.3 保护 129
4.3.1 保护的目标与要求 129
4.3.2 公开密钥加密技术实现数字签名 131
4.3.3 单密钥加密技术实现数字签名 132
4.3.5 权能的保护 133
4.3.4 使用报文摘要的数字签名 133
4.3.6 分布系统中访问位置的控制 136
4.4 保护的例子:Amoeba 137
4.4.1 信口 137
4.4.2 权能 139
4.4.3 用软件F盒保护 140
习题 141
参考文献 142
5.1 分布式系统中的资源管理 143
5.1.1 资源管理方式 143
第五章 同步和互斥 143
5.1.2 控制空间 144
5.1.3 分散控制与通信 148
5.1.4 资源的分配原则 149
5.2 同步机构 149
5.2.1 分布式系统中同步机构的作用 149
5.2.2 分布计算系统中的同步机构 151
5.2.3 物理时钟 152
5.2.4 逻辑时钟 156
5.3 系统的全局状态 161
5.3.1 全局状态的形式定义 162
5.3.2 全局状态的获取 163
5.3.3 一致全局状态的充要条件 164
5.4 互斥算法 165
5.4.1 互斥问题 165
5.4.2 集中式互斥算法 166
5.4.3 非基于令牌的互斥算法 167
5.4.4 基于令牌的互斥算法 171
5.4.5 选举算法 174
5.4.6 自稳定算法 176
习题 178
参考文献 179
第六章 分布式系统中的死锁 182
6.1 死锁问题 182
6.1.1 死锁发生的条件 182
6.1.2 死锁的图论模型 183
6.1.3 处理死锁的策略 184
6.1.4 死锁的AND条件和OR条件 185
6.2 死锁的预防 186
6.2.1 预防死锁的一般方法 186
6.2.2 基于时间戳的预防死锁方法 187
6.3.1 集中式死锁检测 188
6.3 死锁的检测 188
6.3.2 分布式死锁检测 190
6.3.3 层级式死锁检测 191
6.3.4 死锁检测的实例 192
习题 197
参考文献 198
第七章 分布式系统中容错技术 200
7.1 分布式系统中的故障模型 200
7.1.1 基本概念 200
7.1.2 基本的故障模型 201
7.2.2 故障-停止处理器 204
7.2 容错系统的基本构件 204
7.2.1 坚固存储器 204
7.2.3 原子操作 205
7.3 节点故障的处理 205
7.3.1 向后式恢复 206
7.3.2 向前式恢复 208
7.4 检查点算法 209
7.4.1 一致性检查点 209
7.4.2 异步检查点 211
7.4.3 同步检查点 212
7.4.5 报文日志 214
7.4.4 混合检查点 214
7.5 拜占庭故障的恢复 216
7.5.1 恢复中的设计问题 216
7.5.2 错误屏蔽和进程复制 218
7.5.3 容错系统中的一致性协议 219
7.6 可靠的组通信 225
7.6.1 基本的可靠组播方案 225
7.6.2 可靠的组播通信中的可扩充性 227
7.6.3 原子组播 229
习题 234
参考文献 235
第八章 分布式数据管理 238
8.1 一致性模型 238
8.1.1 严格一致性 238
8.1.2 顺序一致性和可线性化一致性 239
8.1.3 相关一致性 241
8.1.4 FIFO一致性 242
8.1.5 弱一致性 244
8.1.6 释放一致性 245
8.1.7 进入一致性 247
8.2 并发控制 249
8.2.1 并发控制的目标与事务处理 249
8.2.2 可串行化调度 253
8.2.3 基于锁的并发控制 257
8.2.4 基于时间戳的并发控制 259
8.2.5 乐观的并发控制 261
8.3 原子事务处理 261
8.3.1 原子事务处理的性质 261
8.3.2 事务处理的分类 263
8.3.4 基于原子事务处理的局部恢复 264
8.3.3 原子事务处理的实现 264
8.3.5 分布式提交协议 267
8.4 多副本更新和一致性管理 269
8.4.1 分布式系统中的系统数据库 270
8.4.2 兼容可串行化 271
8.4.3 主站点方法 272
8.4.4 循环令牌方法 273
8.4.5 同步表决方法 273
8.4.6 活动复制控制方法 275
8.4.7 法定数方法 276
参考文献 279
习题 279
第九章 分布式文件系统 282
9.1 分布式文件系统的特点和基本要求 282
9.1.1 分布式文件系统的特点 282
9.1.2 分布式文件系统的基本要求 283
9.2 分布式文件系统中的命名 284
9.2.1 命名方案 285
9.2.2 命名的实现技术 286
9.3 共享语义 288
9.4.1 文件的远程访问方法 290
9.4 缓存 290
9.4.2 缓存的粒度和地点 291
9.4.3 更新策略、缓存有效性检验和一致性 292
9.4.4 缓存和远程服务的比较 293
9.5 容错和可扩充性 294
9.5.1 无状态服务和有状态服务 294
9.5.2 可用性与文件复制 296
9.5.3 可扩充性 297
9.5.4 用线程实现文件服务员 298
9.7 SUN网络文件系统(NFS) 299
9.6 安全性 299
9.7.1 NFS概述 300
9.7.2 NFS中的通信 303
9.7.3 NFS服务员 304
9.7.4 NFS中的命名 305
9.7.5 NFS中的文件封锁 308
9.7.6 缓存和复制 310
9.7.7 NFS中的容错 311
9.7.8 NFS的安全性 313
9.8.1 设计目标 316
9.8 其他的分布式文件系统及其比较 316
9.8.2 通信和进程 317
9.8.3 命名 318
9.8.4 同步 318
9.8.5 缓存和复制 319
9.8.6 容错 319
9.8.7 安全性 320
习题 321
参考文献 321
10.1.1 调度算法的分类 324
10.1 调度算法概述 324
第十章 分布式调度 324
10.1.2 调度算法的目标和有效性评价 325
10.2 静态调度 327
10.2.1 任务划分与分配 327
10.2.2 基于任务优先图的任务调度 331
10.2.3 两种最优调度算法 333
10.2.4 基于任务相互关系图的任务调度 335
10.3 动态调度 338
10.3.1 动态调度的组成要素 338
10.3.2 动态负载平衡算法的分类、设计决策和使用的参数 340
10.4.1 工作站共享问题 343
10.4 空闲工作站的调度结构 343
10.4.2 工作环境 345
10.4.3 集中式调度 346
10.4.4 分散式调度 348
10.4.5 混合式调度 349
10.5 进程转移和远程执行 350
10.5.1 进程转移和远程执行的目的和方法 350
10.5.2 Sprite的进程迁移和远程执行设备 351
10.5.3 V系统中的可抢先的远程执行设备 354
10.5.4 NEST中的透明的远程执行设备 354
10.6.1 Sidle的组成 355
10.6 空闲工作站共享系统Sidle 355
10.6.2 Sidle的调度 356
10.6.3 Sidle的透明远程执行设备 357
习题 359
参考文献 359
第十一章 分布式共享存储器 362
11.1 基本概念 362
11.1.1 什么是分布式共享存储器系统 362
11.1.2 为什么需要分布式共享存储器 363
11.1.3 共享存储器中缓存一致性方法 364
11.1.4 DSM的设计与实现问题 365
11.1.5 一致性语义 366
11.2 实现DSM的算法 367
11.2.1 算法使用的模型和环境 367
11.2.2 中央服务员算法 368
11.2.3 迁移算法 369
11.2.4 读复制算法 370
11.2.5 全复制算法 371
11.2.6 算法性能 372
11.2.7 算法比较 373
11.3 使用目录的DSM 374
11.3.1 目录方案的分类 375
11.3.2 全映像目录 375
11.3.3 有限目录 377
11.3.4 链式目录 378
11.3.5 只对专用数据进行缓存的方案 379
11.3.6 性能比较 379
11.4 DSM系统的实现 380
11.4.1 实现DSM的基本方法 380
11.4.2 结构和粒度 381
11.4.3 数据定位和访问 382
11.4.4 一致性协议 383
11.4.5 替换策略 385
11.4.6 颠簸 386
11.4.7 可扩充性 386
11.4.8 异构性 387
11.4.9 其他有关算法 387
11.5 DSM实例:Ivy和MemNet 388
11.5.1 Ivy——软件实现的DSM 388
11.5.2 Ivy一致性协议 388
11.5.3 Ivy存储器管理 391
11.5.4 Ivy中的进程同步 392
11.5.5 MemNet——硬件实现的DSM 392
11.5.6 MemNet缓存一致性协议 393
11.5.7 Ivy与MemNet的比较 394
习题 395
参考文献 395
第十二章 基于对象的分布式系统 397
12.1 分布式对象 397
12.1.1 对象的概念 397
12.1.2 对象的类型 399
12.2 CORBA 400
12.2.1 CORBA的总体结构 400
12.2.2 CORBA的对象模型 401
12.2.3 接口库和实现库 402
12.2.4 CORBA的服务 403
12.2.5 CORBA的通信 404
12.2.6 CORBA的POA 409
12.3 DCOM 411
12.3.1 COM和DCOM 411
12.3.2 DCOM的对象模型 412
12.3.3 DCOM的类型库和注册 413
12.3.4 DCOM的服务 415
12.3.5 DCOM的通信 415
12.3.6 DCOM的Moniker 418
12.4 Clouds系统 419
12.4.1 Clouds的对象 419
12.4.2 Clouds的线程 420
12.4.3 Clouds的存储器 420
习题 421
参考文献 421