分布式系统互斥算法

来源:互联网 发布:光大淘宝信用卡 编辑:程序博客网 时间:2024/06/05 10:04

 一、集中式算法借鉴了集中式互斥算法的思想,在分布式系统中,选出一个进程为协调者 (通过科学的分析制定一套规则) 。

协调者对所有的请求进行排队并根据一定的规则授予许可。协调者接受请求以后,检查临界区内的资源是否被其他进程占用。

如果是,则它将当前请求进程插入到对应临界资源的请求队列中; 否则,回复一个同意消息给请求进程,通知它可以访问该临界资源。

该算法通俗易懂,既能够杜绝死锁、饥饿等现象发生,又能保证资源的互斥访问顺利进行。但是它也有缺点,由于是集中式管理,

所以一旦管理进程出现故障,则整个系统将处于瘫痪状态。因此,管理进程的性能完全决定了算法的效率,应用范围小,难以普及。

二、分布式算法

该算法的工作过程如下:当一个进程要访问共享资源时,它会构造一个消息,其中包含要访问的资源的名字、其进程号、当前时间戳;

然后它将该消息发送给系统中的所有其他进程;当一个进程接收到来自另一个进程的请求消息时,它根据自己与消息中的资源相关的状态来决定它要采取的动作:


1)如果接收者没有访问资源,而且也没有访问的打算,就会给发送者一个OK消息;

2)如果接收者已获得对资源的访问,那么他就不进行应答(或者回复拒绝消息),并把该请求放到队列中;

3)如果接收者想访问资源,但是还没开始访问呢,这个时候它就会把自己的请求的时间戳与接收到消息的时间戳做对比,时间戳小者胜出。

发送请求许可消息发出后,进程就会进入等待状态,直到所有进程回复OK;一旦满足条件后就进入访问操作,访问结束后,

会把释放消息发送给其维护的等待队列中的所有要访问的进程;同时把他们从队列中删除。


如图1,进程0和2同时发出访问请求,进程0的请求时间是8,进程2的请求时间是12。

进程1在接收到请求后,由于其不会访问资源,所有给所有请求都回复OK,同时进程0和进程2则进入判定环节,进程2判定进程0的请求时间戳为8小于12,

就给0回复OK;进程0判定时间戳12小于自己的请求时间戳,就把进程2的请求放入队列;此时,进程0接收到了所有进程返回的OK,则进入到访问资源环节,如图2;


当进程0访问结束后,它将2的请求从其队列中删除,同时给2发送OK消息,进程2此时获取到了所有进程返回OK,进入到访问资源环节,如图3.


每个请求需要2(n-1)个消息的发送量。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

三、令牌环算法在一个分布式系统中,把所有进程逻辑上组成一个环,首先每个进程知道其下一个进程是谁(通常更常用的应该是每个进程要维护一个记录,知道其后的所有其他进程,以便在其直接后继发生崩溃时,能把令牌传递给其后继,更有甚者传递给其后继的后继);

当环初始化时,进程0得到一个令牌(可以理解为一个互斥锁),该令牌沿着环进行传递,当进程获得到令牌后,会首先检查其是否有访问共享资源的需求,如果需要,则进行资源访问,访问完成后向后继传递令牌;如果不需要访问,则直接传递令牌给其后继。如图1所示。为了增强可靠性,我们要求当令牌传递给下一个进程时,要求其往回回复确认信息,如果

没有返回确认信息,则认为此节点崩溃,此时将令牌传递给后继的后继。





原创粉丝点击