分布式计算中关键的Maekawa互斥算法仔细讲解

        在Maekawa互斥算法中,一个进程P在发出申请报文后,不用得到所有其他进程的回答,而只须得到一个进程子集S中的所有进程的回答即可进入临界区。称S是P的请求子集。假设Ri和Rj分别是进程Pi和Pj的请求子集,要求Ri∩Rj≠NULL。

        当进程Pi请求进入临界区时,它只向Ri中的进程发送请求报文。

        当进程Pj收到一个请求报文时,如果它自上一次临界区释放后还没有发出过回答报文给任何进程,且自己的请求队列中无任何请求,它就给该请求报文一个回答。否则,请求报文被放入请求队列中。

进程Pi只有收到Ri中的所有进程的回答后,才能进入临界区。

在释放临界区时,进程Pi只给Ri中的所有进程发送释放报文。

Maekawa指出,算法中的申请集合必须满足下面4个条件:

(1)对任意的i和j:Ri∩Rj≠NULL (i≠j, 1≤i,j≤n )

(2)对任意的i:Pi ∈ Ri (1≤i≤n)

(3)对任意的i:|Ri| = K (1≤i≤n)

(4)任一个Pi必须属于K个Rj(1≤i,j≤n )

其中K是一个整型常数,如果系统中有n个进程,则K= 根号K   +1

根据条件1,在任意两个申请集合之间必然至少存在一个共同的进程;

根据条件3,每个申请互斥的进程都具有相同的工作量(即发出相同数量的申请报文)

根据条件4,任一个进程都要有相同的责任来保证互斥。

考虑一个7个进程的例子,每个进程的请求子集如下:

R1:{P1,P3,P4};

R2:{P2,P4,P5};

R3:{P3,P5,P6};

R4:{P4,P6,P7};

R5:{P5,P7,P1};

R6:{P6,P1,P2};

R7:{P7,P2,P3};

在以上请求子集中,任何两个请求子集恰好有一个公共的进程。每个进程只能发出一个回答报文从而使互斥得以保证。如果请求子集的大小为K并且每个请求子集大小都一样,进程数为n,则n的最小值为k(k-1)+1。显然,对每次临界区的访问,发出的请求报文的个数是k=O(根号K  ).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值