分布式操作系统 - 6.分布式同步控制

1.物理时钟同步

分布式协同处理:基于真实时间的同步

分布式算法的特点:

  • 相关信息分布在多个场地上
  • 应避免因单点失败造成整个系统的失败
  • 不存在公共时钟或精确的全局时间

1.1 时钟同步问题

makefile误差

两计算机本地时钟不一致导致先后顺序错乱

在这里插入图片描述

1.2 时钟同步算法

同步问题:

  • 如何与现实时钟同步
  • 如何使不同机器之间相互同步

设进程P的机器时钟值 C p ( t ) C_p(t) Cp(t):t为UTC时间

最大偏移率( ρ \rho ρ

  • 精确时钟(理想情况):$C_p(t)=t
    , 即 ,即 dC/dt=1$
  • 快时钟: d C / d t > 1 dC/dt>1 dC/dt>1
  • 慢时钟: d C / d t < 1 dC/dt<1 dC/dt<1

在这里插入图片描述

时钟校正:

  • 设时钟偏移率为 ρ \rho ρ,两个时钟之间的允许误差为 δ \delta δ
  • Δ t \Delta t Δt后,最大可能误差为 2 ρ Δ t 2\rho \Delta t 2ρΔt
  • 为了保证 2 ρ Δ t ≤ δ 2\rho \Delta t ≤ \delta 2ρΔtδ,则$ \Delta t ≤ \delta/2\rho$;即每隔 δ / 2 ρ \delta/2\rho δ/2ρ 应该校准时间

校准原则:单调递增

  • 假设:每秒产生100次中断,每次中断将时间加10毫秒
  • 若调慢时钟,中断服务程序每次只加9毫秒
  • 若加快时钟,每次加11毫秒

1.3 网络时间协议

(1)Christian算法

  • 时间服务器, 可接受WWV的UTC时间
  • 每隔 δ / ( 2 ρ ) δ/(2ρ) δ/(2ρ), 客户机向服务器询问时间
  • 服务器返回CUTC
  • 客户机校正自己时间

(2)考虑的问题

时间服务请求过程参数

  • T 1 T_1 T1:A请求时间
  • T 2 T_2 T2:B接收时间
  • T 3 T_3 T3:B发送时间
  • T_4:A接收时间

传输延时

  • 假定双向路径相同
  • d T r e q ≈ d T r e s dT_{req} \approx dT_{res} dTreqdTres
  • 平均传输时延$ \delta=(dT_{req}+dT_{res})/2 \approx dT_{req} \approx dT_{res}$

时间偏差 θ \theta θ

  • T 1 = T 2 − d T r e q + θ T_1 = T_2 - dT_{req} + \theta T1=T2dTreq+θ
  • T 4 = T 3 + d T r e s + θ T_4=T_3+dT_{res} + \theta T4=T3+dTres+θ
  • θ = T 4 − T 3 − d T r e s = T 4 − T 3 − δ = T 4 − T 3 − ( T 2 − T 1 + θ ) + ( T 4 − T 3 − θ ) 2 = ( T 1 − T 2 ) + ( T 4 − T 3 ) 2 \theta = T_4-T_3 -dT_{res} = T_4-T_3-\delta = T_4-T_3- \frac{(T_2-T_1+\theta) + (T_4-T_3 -\theta)}{2} = \frac{(T_1-T_2)+(T_4-T_3)}{2} θ=T4T3dTres=T4T3δ=T4T32(T2T1+θ)+(T4T3θ)=2(T1T2)+(T4T3)

在这里插入图片描述

(3)Berkeley算法-集中式方法

  1. 时间监控器定期查询其他机器时间
  2. 计算出平均值
  3. 通知其他机器调整时间

在这里插入图片描述

(4)平均值算法-非集中式方法

  1. 划分固定时间间隔R
  2. 在每个间隔,所有机器广播自己的时钟时间
  3. 启动本地计时器手机在S时间间隔中到达的其他机器广播的时间
  4. 执行平均时间计算算法,得到新的时间值

在这里插入图片描述

(5)多重外部时间源法

消除传播延迟造成的误差

例:OSF DCE方法

  1. 接收所有时间源的当前UTC区间
  2. 去掉与其他区间不相交的区间
  3. 将相交部分的中间作为校准时间

在这里插入图片描述

(6)无线网络中的时间同步

传统分布式系统特点:

  • 时间服务器容易部署
  • 机器相互联系
  • 双向协议

无线网络系统特点

  • 结点资源受限
  • 多跳路由器代价高

参考广播同步协议(RBS)

  • 没有具体精确时间结点
  • 目标:接收器之间相对同步

在这里插入图片描述

(7)参考广播同步协议(RBS)

一个节点广播一个消息m后,其他节点记录本地接收时间 T p , m T_{p,m} Tp,m。P和Q交换各自的接收时间,计算相互偏差

偏 差 [ p , q ] = ∑ k = 1 M ( T p . k − T q , k ) M    M = { m 1 , m 2 , . . . , m k } 偏差[p,q]=\frac{\sum_{k=1}^{M}(T_{p.k}-T_{q,k})}{M} ~~ M=\{m_1, m_2,...,m_k\} [p,q]=Mk=1M(Tp.kTq,k)  M={ m1,m2,...,mk}

偏移量随时间增大,采用线性回归方法估计

$$
偏差p,q = \alpha t + \beta

$$

其中,系数$ \alpha$ 、 β \beta β ( T p . k , T q , k ) (T_{p.k},T_{q,k}) (Tp.k,Tq,k)对计算确定

2.逻辑时钟同步

2.1 基本概念

物理时钟:真实事件

逻辑时钟:相对时间

确定事件的先后顺序,而不精确到事件。例子: 记录input.c的版本号, 而不是物理时间, 和input.o进行版本比对。

“之前”关系(happens-before): → \rightarrow

  • 同一进程:事件a在b之前出现,则: a → b a \rightarrow b ab
  • 不同进程:a为发送消息m,b为接收m,则: a → b a \rightarrow b ab
  • 具有传递性: a → b a \rightarrow b ab, b → c b \rightarrow c bc,则 a → c a \rightarrow c ac

并发事件(concurrent):

  • 两个事件相互对立。既不 a → b a \rightarrow b ab,不 b → a b \rightarrow a ba

2.2 Lamport算法:校正算法

(1)Lamport算法

C(a)表示事件a的时钟值。性质:

  • if a → b a\rightarrow b ab,then $C(a)<C(b) $
  • $\forall a,b ~~~~ C(a) \neq C(b) $
  • C是递增的

校正算法

  • a → b a\rightarrow b ab
  • if C ( b ) < C ( a ) C(b)<C(a) C(b)<C(a), then C ( b ) = C ( a ) + 1 C(b) = C(a) +1 C(b)=C(a)+1

三个进程,各有自己的局部时钟,他们速率不同;通过Lamport算法,校正时钟

校正算法:

  1. P i P_i Pi 在执行一个事件之前, P i P_i Pi执行 C i ← C i + 1 C_i \leftarrow C_i + 1 CiCi+1
  2. P i P_i Pi 在发送消息m给 P j P_j Pj时,时间戳 t s ( m ) ← C i ts(m) \leftarrow C_i ts(m)Ci
  3. P j P_j Pj接收到消息m后, C j ← m a x { C j , t s ( m ) } C_j \leftarrow max\{C_j, ts(m)\} Cjmax{ Cj,ts(m)}

在这里插入图片描述

(2)全序多播:Lamport应用示例

问题:两个进程分别对同一个复制数据库进行更新时,造成不一致状态

原因:全局次序不一致。 u 1 → u 2 ; u 2 → u 1 u1→u2; u2→u1 u1u2;u2u1

在这里插入图片描述

解决方案:全序多播

  • 发送进程多播发送消息m时,给m带上当前时间戳ts

  • 当接收进程收到消息m后,存放其局部队列q,并按时间戳排序

  • 接收进程向所有进程多播发送应答

  • 当消息m被所有进程应答,且排在队列q队首后, 方可处理(递交给接收进程,从队列中删除)

定理:各个进程的局部队列的值最终都相同

2.3 向量时钟

(1)因果性

如果事件a, b存在因果关系, a为因, b为果, 则 C ( a ) < C ( b ) C(a)<C(b) C(a)<C(b); 但反之不一定成立。

通过向量时钟捕获因果关系

在这里插入图片描述

(2)Vector Clock

如果 V C ( a ) < V C ( b ) VC(a)<VC(b) VC(a)<VC(b), 则a与b为因果关系

(3)进程Pi上的向量时钟$VC_

i$的基本性质

  1. V C i [ i ] = n VC_i[i]=n VCi[i]=n, 在Pi中发生了n个事件
  2. V C i [ j ] = k VC_i[j]=k VCi[j]=k, Pi已知在Pj中发生了k个事件

(4)向量修改规则

  1. Pi在执行一个事件之前, Pi执行$VC_i[i]←VC_i[i]+1 $
  2. 当进程Pi发送消息m时,$ts(m)=VC_i $
  3. 当进程Pj收到m后,置$VC_j[k]=max{VC_j[k],ts(m)[k]} $

(4)Pi的消息m在进程Pk正确递交的条件:

  • $ts(m)[i] = VC_k[i]+1 $
  • $ts[m][j]≤VC_k[j] ~~for all i≠j $ (符合因果关系)

在这里插入图片描述

3.互斥控制

3.1基本概念

互斥访问:当一个进程使用某个共享资源,其他进程不允许对这个资源操作

临界区:对共享资源进行操作的程序段

基本方法:信号量、管程

问题:死锁、饥饿

3.2 集中式算法

协调者:确定那个进程可进入临界区

通信量:3个消息:请求-许可-释放

在这里插入图片描述

优点:通信量少,实现简单,不会死锁、饿死

缺点:单点失败;单点瓶颈(大规模系统中)

3.3 分布式算法(Ricart-Agrawala算法)

(1)算法

在一个进程P打算进入临界区R之前,向所有其他进 程广播消息 < 临 界 区 R 名 、 进 程 号 、 时 间 戳 > <临界区R名、进程号、时间戳> <R>

当一个进程P’收到消息后,做如下决定:

  • 若P’不在临界区R中,也不想进入R,它就向P发送OK;
  • 若P’已经在临界区R中,则不回答,并将P放入请求队列;
  • 若P’也同时要进入临界区R,但是还没有进入时,则将发来的消息和它发送给其余进程的时间戳对比。如果P时间戳小, 则向P发送OK;否则,不回答,并将P放入请求队列;

当P收到所有的OK消息后,进入R。否则,等待。

当P退出R时,如果存在等待队列,则取出全部请求者,向其发送OK消息

(2)举例

共有0,1,2三个进程,进程0,2申请进入临界区

在这里插入图片描述

(3)算法评价

优点:不会死锁和饿死

缺点:

  • n点失败
  • n点瓶颈
  • 2 ( n − 1 ) 2(n-1) 2(n1)个消息

改进方案:

  • 总是发送应答

  • 超时重发请求

  • 组通信(进程少且不改变组成员时)

  • 简单多数同意(>1/2)

3.4 令牌环算法

构造一个逻辑环,得到令牌才可进入临界区

问题:令牌丢失检测

在这里插入图片描述

3.5 三种互斥算法的比较

算法 每次进出需要的消息 进入前的延迟(按消息次数) 存在问题
集中式 3 2 协调者崩溃
分布式 2(n-1) 2(n-1) n点崩溃
令牌环 1到 ∞ \infty 0到n-1 丢失令牌,进程崩溃

4.选举算法

4.1 基本概念

作用

  • 在分布式进程之间做出统一的的决定
  • 例如:确定协调者

前提

  • 每个进程具有唯一的号码,如IP地址
  • 每个进程知道其它进程的号码

选举标准:确定具有最大号码的进程

4.2 霸道(Bully)算法

将进程进行排序

  1. P向号码高的进程发E消息
  2. 如果没有响应,P选举获胜
  3. 如果有进程Q响应,则P结束,Q接管选举并继续下去。

在这里插入图片描述

4.3 环算法

所有进程按逻辑或物理次序排序,形成一个环

  1. 当一个进程P发现协调者C失效后,向后续进程发送E消息
  2. 每个进程继续向后传递E消息,直到返回P
  3. P再将新确定的协调者C’ 传给所有进程

在这里插入图片描述

4.4 无线网络系统的选举算法

选举一个协调者,它具有最大的能力

1、发起者,提出选举

在这里插入图片描述

2、向邻居结点扩展,形成一个生成树(spanning tree)

在这里插入图片描述

3、沿生成树向父节点返回 [ i , c m a x ] [i, c_{max}] [i,cmax] c m a x c_{max} cmax为最大值

4、发起者,向其余节点发布协调者

在这里插入图片描述

4.5 大型系统的选举

大型系统中需要选举多个节点

  • 如p2p系统中的超级节点

对如何选择超级节点(superpeer)的要求:

  • 普通节点对超级节点的访问延迟要小
  • 超级节点应均匀地分布在覆盖网络中
  • 相对于覆盖网络中的节点数量,应有一定数量的预先定义好的超级节点
  • 每个超级节点服务的普通节点个数不能超过规定的数量

例:一个小型chord系统m=8(长度), k=3(预留)

  • P AND 11100000作为超级节点的键值

  • N个节点中平均有 2 k 2^k 2k个超级节点

M维空间中的超级节点选举

  • 首先,在N个随机选择的节点中,放置N个令牌

  • 每个节点不允许拥有一个以上的令牌

  • 每个令牌具有排斥力,推动另一个令牌移动

  • 通过互相排斥,最终达到在空间中的均匀分布

猜你喜欢

转载自blog.csdn.net/wdnshadow/article/details/128287477