分布式算法
模型:
拓扑:无向图,节点为处理机,边喂双向信道.
算法:由每个处理器上的局部程序构成,包括本地计算和收发msg
节点 pi, pi 相邻的边 r 条.
pi 有两个 buffer list: outbufi[l] , inbufi[l], l∈[1,r]
配置:某时刻,算法运行的全局状态。为一个向量 (q0,…,qn−1),
qi 是 pi 的状态.
状态
事件:两种
- comp(i), 计算事件.
- del(i,j,m), 传递事件,将msg m 从 pi 传递到 pj.
转换函数
执行: 配置和事件交错的序列。
- Safety 条件。 (用来证明算法正确性吗?) 该条件在每个有限前缀里的都成立
- Liveness 条件。 必须成立一定次数。
满足所有安全性条件的序列称为一个执行,
满足所有活跃性条件的 执行 为 容许(admissible) 的执行。
下面主要考虑异步msg传递系统。
执行片段 α 是一个有限或无限的序列:
C0,Φ1,C1,Φ2,C2,…,
其中 Ck 是一个配置, Φk 是一个事件.
如果 α 有限, 则它必须结束于某个配置, 且需满足下述条件:
- 若 Φk=del(i,j,m), 则 m 必须是 Ck−1 时 outbufi[l] 的元素.
l 是 pi 信道 pi,pj 的标号.
从 Ck−1 到 Ck 的唯一变化是将 m 从 Ck−1 里的 outbufi[l] 中
删去, 加入到 Ck 的 inbufi[h], h 是 pj 的信道 pj,pi 的标号.
- 若 Φk=comp(i), 则 Ck−1 到 Ck 的变化是
- 改变状态: 转换函数在pi 的可访问状态(在配置Ck−1里)上进行操作,清空
inbufi[l],(1≤l≤r)
- 发送 msg: 将转换函数制定的消息集合加入 Ck 里的变量 outbufi 上
调度 , 调度(或调度片段)总是和执行(或执行片段)联系在一起,
它是执行中的时间序列:
Φ1,Φ2,…
并不是每个事件序列都是调度. 例如, del(1,2,m) 不是调度, 因为在此时间之前,
p1 没有 send m.
若局部程序是确定的, 则执行(或执行片段)由 初始配置 C0 和调度(或调度片段) σ
唯一确定, 可表示为 exec(C0,σ)
容许执行: 满足活跃性条件的执行.
容许调度: 容许执行的调度.
同步系统, 同步模型中, 执行分为轮, 每轮里, (1)每个处理器能够发送一个
msg 到每个邻居 (2) 每个处理器一接到 msg 就进行计算.
轮 同步系统中, 每轮由一个传递时间(outbuf发送, 清空), 紧跟一个计算时间
(处理所有msg)
终止, 所有处理机均处于终止状态且没有msg 在传输.
msg复杂度
实际很少用状态转换来描述算法, 往往用伪码描述.
生成树