第四章 同步和互斥
By齐浩坤
第四章 同步和互斥By齐浩坤
1分布式系统中的资源管理
一、资源管理方式
2分布式系统中的同步机构
一、分布式系统中同步机构的作用
二、分布式系统中的同步机构
1、逻辑时钟(考试的大题 重点掌握 计算标量逻辑时间)
3系统的全局状态
4互斥算法(互斥也被称为并发控制)
一、集中式互斥算法
二 、基于逻辑时钟的互斥算法
1、Lamport时间戳互斥算法
2、Ricart-Agrawala互斥算法
3、Maekawa互斥算法
三、基于令牌的互斥算法
1、简单令牌互斥算法
2、Ricart-Agrawala令牌环互斥算法
3、基于时间戳的令牌互斥算法
4、选举算法
①Bully选举算法
②环选举算法
③自稳定算法
在分布式计算系统中,资源管理和故障恢复都会用到同步和互斥 而同步机构就是来实现同步和互斥的。
同步确保了分布式系统中不同节点或进程按照一定的顺序执行任务,而互斥保证了共享资源在同一时间只被一个节点或进程访问,以避免竞态条件和数据不一致的问题。
1分布式系统中的资源管理
一、资源管理方式
分布式系统中的资源管理方式有以下三种:
-
全集中管理方式:所有的资源都由一个服务员进行管理
-
集中分布管理方式:一个资源由一个服务员进行管理
-
全分布管理方式:一个资源是由多个服务员共同管理
2分布式系统中的同步机构
同步机构的目的就是给进程提供某种手段,使系统保持一致状态(一个计算系统在所有时间内满足了一定的外部规定或约束)。
一、分布式系统中同步机构的作用
同步点:为了达到合作,各个进程在执行的过程中必须存在若干点,超过这些点的时候,一个进程在另一个进程执行完某一活动之前不能继续执行,这些点成为两个进程之间的同步点
分布计算系统中的两类共享资源:
-
允许各进程可以同时访问的资源:例如只读文件、处理机
-
不允许各进程同时访问的资源:例如可写文件、外部设备,需要利用同步机构的进行互斥控制,互斥控制使用同步机构对活动的执行进行排序。
分布计算系统的三种计算方式:这里的生产者和消费者就是顾客和服务员,生产者发动一个操作,激发若干活动,活动由消费者提供
-
完全复制的计算:任何操作激发的活动必须由所有的消费者共同处理。这时同步机构的目的就是保证消费者处理活动的次序必须相同。
-
完全分割的计算:一个操作所激发的不同活动由不同的消费者分别独自处理。这时同步机构的目的就是保证所有相互干扰的活动成为有序的活动,使该操作保持原子性(要么完成操作,要么不发生)。
-
分割和部分复制的计算:一个操作所激发的活动中,某些是由不同的消费者独自处理,某些操作是由一些消费者共同处理。
评价同步机构的标准:
二、分布式系统中的同步机构
同步实体:物理时钟、事件计数器、逻辑时钟、循环令牌、顺序器、进程等
而分布式计算系统的同步机构分为 集中式同步机构 和 分布式同步机构
-
集中式同步机构:集中式同步机构有一个集中的同步实体 ,每个生产者发动操作的时候都要先访问这个同步实体,执行的每个功能都要经过这个集中同步实体的控制。
-
分布式同步机构:不存在集中同步实体,执行的各种功能是分散控制的。
集中式同步机构和分布式同步机构的优缺点:集中式同步机构的实现简单,但是缺点是不可靠,一旦出现故障就会造成全局不工作,而且在性能方面也会大大下降。分布式同步机构在可靠性和性能方面优于集中式同步机构(多重物理时钟、多重逻辑时钟),但实现复杂。
1、逻辑时钟(考试的大题 重点掌握 计算标量逻辑时间)
逻辑时钟就是为分布计算系统中的时间进行排序,可以给分布计算系统中的事件一个唯一的排序,逻辑时钟的本质是基于Lamport定义的“在先发生关系”
并发在分布式系统中是指多个计算操作可以在重叠的时间段内执行的能力。
在先发生关系的时空图:水平方向代表空间,垂直方向代表时间,圆点代表事件,竖线代表进程,进程之间带箭头的线代表报文。
逻辑时钟:设Ci代表进程i的逻辑时钟,该逻辑时钟就是一个函数,它给进程i中的事件a分配一个正整数值Ci(a)。对任何事件a和b,如果a→b,则C(a)<C(b)。但相反的结论不能成立。
-
若a和b是同一进程Pi中的两个时间,并且a→b,则Ci(a)<Ci(b);
-
若a代表“一个Pi进程发送一个报文”这个事件,b代表“另一个进程Pj接收这个报文”这个事件,Ci(a)<Cj(b)。
标量逻辑时钟:每个进程Pi有一个逻辑时钟LCi,LCi被初始化为init(init≥0)并且它是一个非减的整数序列。进程Pi发送的每个报文m都被标上LCi的当前值和进程的标号i,从而形成一个三元组(m,LCi,i)。任何一个逻辑时钟LCi基于以下两条规则更新它的逻辑时钟值:
-
当发生一个事件(一个外部发送或内部事件)之前,我们更新LCi: LCi:=LCi+d (d>0)
-
当收到一个带时间戳的报文(m,LCj,j)时,我们更新LCi: LCi:=max(LCi,LCj)+d (d>0)
下图为根据这个原理确定逻辑时钟。需要注意 如果a-》b一定有LC(a)<LC(b),但是反过来说LC(a)<LC(b)不一定有a-》b,也就是图中的事件p3和q4 虽然LC(P3)<LC(q4)但是不一定有p3-》q4.
标量逻辑时钟使用线性的时间,不能够区分时钟的前进是因为自己本身的进程引起的还是因为报文的传递所引起的,所以采用向量逻辑时钟,向量逻辑时钟使用n维的整数向量表示时间。
向量逻辑时钟:在向量逻辑时钟中,每个进程Pi和一个时间向量LCi[1,...,n]相关联,这里的n表示进程的数目
-
向量元素LCi[i]描述了进程Pi的逻辑时间进展情况,即自身的逻辑时间进展情况;
-
向量元素LCi[j]表示进程Pi所知的关于进程Pj的逻辑时间进展情况;
-
向量LCi[1,…,n]组成进程Pi对于逻辑全局时间的局部视图。
按照一下的逻辑更新时钟值:
-
当发生一个事件(一个外部发送或内部事件)之前,Pi更新LCi[i]:
LCi[i]:=LCi[i]+d (d>0)
-
每个报文捎带发送方在发送时的时钟向量,当收到一个带时间戳的报文(m,LCj,j)时,Pi更新LCi:
LCi[k]:=max(LCi[k],LCj[k]) 1≤k≤n
LCi[i]:= LCi[i]+d (d>0)
这个地方还会有一种考法?比如比在事件r3之前的事件由哪些?
3系统的全局状态
4互斥算法(互斥也被称为并发控制)
互斥问题就是定义一些基本的操作来解决共享资源的多个并发进程的冲突问题
互斥保证了相互冲突的并发进程可以共享资源。互斥的目标就是保证在任何一个时刻只能有一个进程访问临界区。
一个正确的互斥算法应该避免冲突(死锁:进程和线程在等待其他进程和线程释放资源,但每个进程和线程又持有对方所需要的资源,导致所有进程无法继续推进 和 饿死:某些进程和线程无限期的等待获取资源而始终得不到满足)和保证公平性
所以互斥算法必须满足以下的条件:
-
已获得资源的进程必须先释放资源之后,另一个进程才能得到资源;
-
不同的请求应该按照这些请求的产生顺序获得满足,请求应该按照某种规则进行排序,例如使用逻辑时钟确定请求的顺序;
-
若获得资源的每个进程最终都释放资源,则每个请求最终都能满足。
衡量互斥算法性能:
-
完成一次互斥操作所需的报文数目;
-
同步延迟,即从一个进程离开临界区之后到下一个进程进入临界区之前的时间间隔;
-
响应时间,即从一个进程发出请求到该进程离开该临界区之间的时间间隔。
分布式互斥算法可以分为集中式算法和分布式算法,其中分布式算法又可以分为基于令牌的算法和基于请求的算法。
一、集中式互斥算法
集中式算法选取一个进程作为协调者,接受请求和分发授权,协调者维护一个FIFO队列,按照队列的先后顺序分发授权
每次只允许一个进程进入临界区,按请求的顺序分配临界区,没有进程会永远等待,所以不会出现死锁和饿死的现象。使用一次临界区只需要三个报文,请求报文、同意报文、释放报文。
二 、基于逻辑时钟的互斥算法
1、Lamport时间戳互斥算法
进入一次临界区共需要3(n-1)个报文 n为参加互斥的进程数
2、Ricart-Agrawala互斥算法
是在Lamport时间戳互斥算法的基础上 把承认报文和释放报文合并为了回答报文
3、Maekawa互斥算法
在这种算法中,每个进程有一个固定大小的请求子集,也称为投票集合。这个子集是系统中所有进程的一个子集,
子集大小通常取决于系统中进程的总数,典型的大小是�N,其中N是进程总数。
任意两个请求子集必须至少有一个共同的进程。这是为了确保任意两个进程不能同时进入临界区,从而保证了互斥。
请求子集被构造成每个进程都参与到其它进程请求子集的投票中。这意味着整个系统的投票集合相互重叠,保证了分布式的决策过程。
发出的请求报文数目为O(根号n)
Maekawa算法的两个极端情况说明了算法在不同配置下的行为,这两种情况分别是:
-
退化为集中式互斥算法: 在这种极端情况下,所有的投票集合( R_i )只包含一个特定的协调进程( P_c )。这意味着,系统中的每个进程( P_i )想要进入临界区时,都必须获得协调者( P_c )的许可。这实际上等同于集中式互斥,因为只有一个进程负责授予进入临界区的权利。这种情况下,虽然简化了投票过程,但是协调者成为了单点故障和瓶颈,可能会降低系统的可用性和可扩展性。
-
完全分布式的互斥算法: 另一个极端情况是所有进程的投票集合( R_i )包含系统中的所有进程( {P_1, P_2, …, P_n} )。在这种配置下,一个进程要进入临界区必须获得所有其他进程的投票。这是一种完全分布式的互斥控制方法,每个进程都参与到投票决策中。尽管这样做确保了高度的去中心化和可能的公平性,但是它需要更多的消息传递,并且增加了协调的复杂性和系统的通信负载。
三、基于令牌的互斥算法
一个进程拥有令牌就可以进入临界区 令牌可在所有的进程间传递
1、简单令牌互斥算法
2、Ricart-Agrawala令牌环互斥算法
当请求进程不持有令牌的时候,该互斥算法需要n个报文,其中n-1个为请求报文,1个用于传送令牌
当请求进程持有令牌的时候,该互斥算法需要0个报文
3、基于时间戳的令牌互斥算法
当请求进程不持有令牌的时候,该互斥算法需要n个报文 其中n-1个为请求报文 一个用于传送令牌
当请求进程持有令牌的时候,该互斥算法需要0个报文
4、选举算法
从进程集中选出一个进程执行特别的任务。大部分选举算法是基于全局优先级的,就是说给每个进程预先分配一个优先级,选举算法选择一个具有最高优先级的进程作为协调者。
①Bully选举算法
②环选举算法
③自稳定算法
自稳定系统:一个系统,如果无论它的初始状态是什么,总是能在有限的步骤内达到一个合法的状态,那么它是自稳定的。
一个系统S,如果它满足以下两个性质,那么它关于谓词P是自稳定的。
-
终止性(closure)。P在S的执行下是终止的(closed),也就是说,一旦P在S中被建立,它就不能被再被证明为假。
-
收敛性(convergence)。从任意全局状态开始,S能保证在有限次状态转换内达到一个满足P的全局状态。