5.1
1、资源管理方式
1)全集中管理方式:所有资源都由一个服务员管理;
2)集中分布管理方式:一个资源由一个服务员管理;
3)全分布管理方式:一个资源是由多个服务员共同管理。
2、多个服务员参加对同一个资源进行控制的方式
1)顺序方式:按某种顺序,先由一个服务员控制一段时间,之后再由另一个服务员控制一段时间。
2)分工方式:由不同的服务员并发或顺序地控制同一资源执行不同的活动。
3)民主方式:所有服务员共同协商一致对同一资源执行每个管理活动。
5.2
1、同步机构在互斥控制中的作用是对活动的执行进行排序。同步机构的目的就是给进程提供某种手段,使系统保持一致状态。
2、分布计算系统的计算方式分为三种:
1)完全复制的计算。任何操作所激发的每个活动必须由所有的消费者共同处理,要求所有的活动均应完成。这时同步机构的目的是保证消费者处理活动的次序必须相同。
2)完全分割的计算。一个操作所激发的不同活动由不同的消费者分别独自处理。在这种情况下,同步机构的目的是保证所有相互干扰的活动成为有序的,使得该操作保持原子性(要么完成操作,要么干脆不发生)。
3)分割和部分复制的计算。一个操作所激发的活动中,某些是由不同的消费者独自处理的,某些操作是由一些消费者共同处理。它兼有前面两种计算形式的特点。对于不同的计算方式,同步机构的目的和要求也是不同的。
3、物理时钟的同步过程:
1)A通过网络向B发送请求;
2)B读取本地时钟值;
3)B的时钟值通过网络传递给A;
4)按照网络所需的传输延迟对B的时钟值进行校正;
5)比较A的时钟值和B的时钟值。
4、集中式物理时钟的实现方式:基于广播的方式、请求驱动的方式。
5、逻辑时钟可以给分布计算系统中的事件一个唯一的排序。逻辑时钟的本质是基于Lamport定义的“在先发生关系” 。
6、标量逻辑时钟:
每个进程Pi有一个逻辑时钟LCi,LCi被初始化为init(init≥0)并且它是一个非减的整数序列。进程Pi发送的每个报文m都被标上LCi的当前值和进程的标号i,从而形成一个三元组(m,LCi,i)。任何一个逻辑时钟LCi基于以下两条规则更新它的逻辑时钟值:
1)当发生一个事件(一个外部发送或内部事件)之前,我们更新LCi: LCi:=LCi+d (d>0)
2)当收到一个带时间戳的报文(m,LCj,j)时,我们更新LCi: LCi:=max(LCi,LCj)+d (d>0)
7、向量逻辑时钟:
在向量逻辑时钟中,每个进程Pi和一个时间向量LCi[1,…,n]相关联,其中
1)向量元素LCi[i]描述了进程Pi的逻辑时间进展情况,即自身的逻辑时间进展情况;
2)向量元素LCi[j]表示进程Pi所知的关于进程Pj的逻辑时间进展情况;
3)向量LCi[1,…,n]组成进程Pi对于逻辑全局时间的局部视图。
任何一个逻辑时钟LCi基于以下两条规则更新它的逻辑时钟值:
1)当发生一个事件(一个外部发送或内部事件)之前,Pi更新LCi[i]: LCi[i]:=LCi[i]+d (d>0)
2)每个报文捎带发送方在发送时的时钟向量,当收到一个带时间戳的报文(m,LCj,j)时,Pi更新LCi: LCi[k]:=max(LCi[k],LCj[k]) 1≤k≤n LCi[i]:= LCi[i]+d (d>0)
5.3
1、全局状态的获取(快照算法):
1)假如启动算法的进程为P,那么它首先记录自己的局部状态,然后它沿着它的输出通道发送一个标志(marker),指示接收者应该参与记录一个全局状态的工作。
2)当接收者Q通过它的输入通道C收到一个标志,它将依据不同条件执行以下不同操作:
a)如果Q还没有记录自己的局部状态,它首先记录自己的局部状态,并记录通道C的状态为空报文序列,然后也沿着它自己的输出通道发送一个标志。
b)如果Q已经记录了自己的局部状态,通过通道C收到的标志用来指示Q应该记录通道的状态。通道的状态是Q记录它的局部状态以来到收到这个标志前所收到的报文系列。
3)如果一个进程已经沿它的每个输入通道接收到一个标志,并对每个标志进行了处理,就称它已经完成了它的那部分算法。
4)一个进程的局部状态,连同它的所有输入通道的状态将被发送到这个快照的发起进程。
2、一致性定理:一个检查点集S,其中每个检查点属于不同的进程,它们属于同一个一致性的全局状态当且仅当S中不存在这样的检查点,它有一条到S中任何其他检查点(包括它自身)的Z字形路径。
推论:
1)检查点C可以属于一个一致性全局状态当且仅当C不属于一个Z字形循环;
2)属于不同进程的两个检查点A和B,它们可以属于同一个一致性全局状态当且仅当
a)没有包括A或B的Z字形循环;
b)在A和B之间不存在Z字形路径。
5.4
1、互斥问题就是定义一些基本的操作来解决共享资源的多个并发进程的冲突问题。
2、互斥算法的主要目标是保证在任一个时刻只能有一个进程访问临界区。一个正确的互斥算法必须避免冲突(死锁和饿死)和保证公平性。为此,算法应满足以下三个条件:
1)已获得资源的进程必须先释放资源之后,另一个进程才能得到资源;
2)不同的请求应该按照这些请求的产生顺序获得满足,请求应该按照某种规则进行排序,例如使用逻辑时钟确定请求的顺序;
3)若获得资源的每个进程最终都释放资源,则每个请求最终都能满足。
3、Lamport时间戳互斥算法由以下5条规则组成 :
1)一个进程Pi如果为了申请资源,它向其它各个进程发送具有时间戳Tm:Pi的申请资源的报文,并把此报文也放到自己的申请队列中;
2)一个进程Pj如果收到具有时间戳Tm:Pi的申请资源的报文,它把此报文放到自己的申请队列中,并将向Pi发送一个带有时间戳的承认报文。如果Pj正在临界区或正在发送自己的申请报文,则此承认报文要等到Pj从临界区中退出之后或Pj发送完自己的申请报文之后再发送,否则立即发送;
3)一个进程Pi如果想释放资源,它先从自己的申请队列中删除对应的Tm:Pi申请报文,并向所有其他进程发送具有时间戳的Pi释放资源的报文;
4)一个进程Pj如果收到Pi释放资源的报文,它从自己的申请队列中删除Tm:Pi申请报文;
5)当满足下述两个条件时,申请资源的进程Pi获得资源:
a)Pi的申请队列中有Tm:Pi申请报文,并且根据时间戳它排在所有其它进程发来的申请报文前面;
b)Pi收到所有其它进程的承认报文,其上面的时间戳值大于Tm。
4、Ricart-Agrawala互斥算法
1)一个进程申请资源时向所有其他进程发出申请报文;
2)其它进程收到申请报文后若不在临界区并且自己未申请进入临界区,或者自己虽然发出了申请报文,但自己的报文排在收到的申请报文之后,则回答表示同意;
3)申请资源的进程仅在收到所有进程的回答报文后才进入临界区使用资源;
4)一个进程使用完资源后,它向所有未给回答的其它申请发送回答报文。
5、Maekawa互斥算法
请求子集:在Maekawa互斥算法中,一个进程P在发出申请报文后,不用得到所有其他进程的回答,而只须得到一个进程子集S中的所有进程的回答即可进入临界区。称S是P的请求子集。假设Ri和Rj分别是进程Pi和Pj的请求子集,要求Ri∩Rj≠NULL。
1)当进程Pi请求进入临界区时,它只向Ri中的进程发送请求报文。
2)当进程Pj收到一个请求报文时,如果它自上一次临界区释放后还没有发出过回答报文给任何进程,且自己的请求队列中无任何请求,它就给该请求报文一个回答。否则,请求报文被放入请求队列中。
3)进程Pi只有收到Ri中的所有进程的回答后,才能进入临界区。 在释放临界区时,进程Pi只给Ri中的所有进程发送释放报文。
6、自稳定系统:一个系统,如果无论它的初始状态是什么,总是能在有限的步骤内达到一个合法的状态,那么它是自稳定的。