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

文章目录

  • 1.物理时钟同步
    • 1.1 时钟同步问题
    • 1.2 时钟同步算法
    • 1.3 网络时间协议
      • (1)Christian算法
      • (2)考虑的问题
      • (3)Berkeley算法-集中式方法
      • (4)平均值算法-非集中式方法
      • (5)多重外部时间源法
      • (6)无线网络中的时间同步
      • (7)参考广播同步协议(RBS)
  • 2.逻辑时钟同步
    • 2.1 基本概念
    • 2.2 Lamport算法:校正算法
      • (1)Lamport算法
      • (2)全序多播:Lamport应用示例
    • 2.3 向量时钟
      • (1)因果性
      • (2)Vector Clock
      • (3)进程Pi上的向量时钟$VC_
      • (4)向量修改规则
      • (4)Pi的消息m在进程Pk正确递交的条件:
  • 3.互斥控制
    • 3.1基本概念
    • 3.2 集中式算法
    • 3.3 分布式算法(Ricart-Agrawala算法)
      • (1)算法
      • (2)举例
      • (3)算法评价
    • 3.4 令牌环算法
    • 3.5 三种互斥算法的比较
  • 4.选举算法
    • 4.1 基本概念
    • 4.2 霸道(Bully)算法
    • 4.3 环算法
    • 4.4 无线网络系统的选举算法
    • 4.5 大型系统的选举

1.物理时钟同步

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

分布式算法的特点:

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

1.1 时钟同步问题

makefile误差

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

分布式操作系统 - 6.分布式同步控制_第1张图片

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

分布式操作系统 - 6.分布式同步控制_第2张图片

时钟校正:

  • 设时钟偏移率为 ρ \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)

分布式操作系统 - 6.分布式同步控制_第3张图片

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

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

分布式操作系统 - 6.分布式同步控制_第4张图片

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

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

分布式操作系统 - 6.分布式同步控制_第5张图片

(5)多重外部时间源法

消除传播延迟造成的误差

例:OSF DCE方法

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

分布式操作系统 - 6.分布式同步控制_第6张图片

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

传统分布式系统特点:

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

无线网络系统特点

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

参考广播同步协议(RBS)

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

分布式操作系统 - 6.分布式同步控制_第7张图片

(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)
  • $\forall a,b ~~~~ C(a) \neq C(b) $
  • C是递增的

校正算法

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

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

分布式操作系统 - 6.分布式同步控制_第8张图片

校正算法:

  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)}

分布式操作系统 - 6.分布式同步控制_第9张图片

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

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

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

分布式操作系统 - 6.分布式同步控制_第10张图片

解决方案:全序多播

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

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

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

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

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

2.3 向量时钟

(1)因果性

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

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

分布式操作系统 - 6.分布式同步控制_第11张图片

(2)Vector Clock

如果 V C ( a ) < V C ( b ) VC(a)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 $ (符合因果关系)

分布式操作系统 - 6.分布式同步控制_第12张图片

3.互斥控制

3.1基本概念

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

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

基本方法:信号量、管程

问题:死锁、饥饿

3.2 集中式算法

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

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

分布式操作系统 - 6.分布式同步控制_第13张图片

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

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

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申请进入临界区

分布式操作系统 - 6.分布式同步控制_第14张图片

(3)算法评价

优点:不会死锁和饿死

缺点:

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

改进方案:

  • 总是发送应答

  • 超时重发请求

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

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

3.4 令牌环算法

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

问题:令牌丢失检测

分布式操作系统 - 6.分布式同步控制_第15张图片

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接管选举并继续下去。

分布式操作系统 - 6.分布式同步控制_第16张图片

4.3 环算法

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

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

分布式操作系统 - 6.分布式同步控制_第17张图片

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

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

1、发起者,提出选举

分布式操作系统 - 6.分布式同步控制_第18张图片

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

分布式操作系统 - 6.分布式同步控制_第19张图片

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

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

分布式操作系统 - 6.分布式同步控制_第20张图片

4.5 大型系统的选举

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

  • 如p2p系统中的超级节点

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

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

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

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

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

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

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

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

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

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

分布式操作系统 - 6.分布式同步控制_第21张图片

你可能感兴趣的:(分布式操作系统,分布式)