当前位置:文档之家› 分布式操作系统的互斥算法

分布式操作系统的互斥算法

[摘要]本文主要介绍了分布式操作系统中的分布式互斥算法和令牌环互斥算法,并着重针对几种不同的令牌环算法分析了它们算法的正确性,最后还讨论了各个算法的性能并加以比较。

[关键词]分布式操作系统令牌环互斥算法引言分布式互斥是随着分布式系统的出现而出现的,并随着分布式系统理论发展而发展。

因此,和分布式系统的体系结构发展史类似,分布式互斥的发展经历了如下几个发展阶段。

(1)完全中心式算法。

在该类算法中,一个节点被指定为控制(裁决)节点,它控制对所有共享对象的访问。

当任何进程请求对一个临界资源进行访问时,就向本地资源控制进程发送一个请求消息,该进程接着向控制节点发送一个请求消息。

当共享对象可用时,将返回一个应答消息。

当进程结束使用资源后,向控制节点发送一个释放消息。

这类算法有两个共同点,其一是只有控制节点能控制资源的分配,其二是所有需要的信息都集中在控制节点中,包括所有资源的实体和位置以及每个资源的分配状态。

完全中心式算法实现简单,控制也很方便,但存在以下缺点:如果控制节点崩溃,则互斥机制终止,同时由于所有请求资源的进程都需与控制节点交换消息,因此,控制节点可能存在通信瓶颈。

,(2)局部中心式算法。

由于完全中心式算法可能出现的控制节点容错问题与通信瓶颈问题,人们采取了相应措旌以期解决或缓解这些问题给整个系统带来的影响。

因此出现了局部中心式算法。

局部中心式算法是将各临界资源按一定规则分为几个区域,每个区域包含一定数量的临界资源和一个中心控制点。

任何需要请求某临界资源的进程都需向该l晦界资源所在区域的中心控制节点发送请求消息并由该控制节点安排进程访问临界资源的次序。

该类算法具有多个控制点,各控制点间互不干涉,每一个控制节点故障只影响系统内节点对该控制节点管理区域内的临界资源访问,不会对非该区域内资源的访问造成影响。

因此可以缓解完全中心式算法的控制节点容错问题与通信瓶颈问题。

(3)局部分布式算法。

局部中心式算法虽然缓解了其完全中心式算法的控制节点容错及通信瓶颈问题,但并未使这些问题得到解决。

特别是随着通信技术的发展,节点间的通信带宽已经能够较大程度满足互斥的消息通信要求,因此使中心式算法的控制节点容错变得更加重要。

因此,人们将局部中心式算法中互不干涉的控制节点改为互相备份的方式。

当一个控制节点失效时,其控制的资源将转向其备份的控制节点,使得互斥能够继续进行。

该类算法继续发展,出现了多点共同决策的资源访问模式,即任何一次的关键资源访问,不再是由唯一的一个控制节点决定,而是由所有控制节点共同决定。

因此申请访问临界资源的节点不再只是向唯一的资源控制节点发送请求消息,而是需要向所有控制节点发送请求消息。

当所有控制节点都同意申请节点的请求时,申请节点获得临界资源访问机会。

因为多点控制使得节点间需要交换的消息数量增加,同样可能出现通信瓶颈,因此该类算法是在通信技术发展到一定阶段的产物。

该类算法在解决控制节点容错方面具有较好的性质。

(4)完全分布式算法。

局部分布式互斥算法虽然使得分布式互斥的控制节点容错问题得到了一定解决,但其容错能力不高,并增加了互斥所需的消息量。

因此,LamportⅢ提出了完全分布式互斥的概念,并对分布式系统的消息排序进行了深入研究。

Maekawa”3对完全分布式算法的对称性特性作出了如下刻画。

1)所有节点具有相同的信息量;2)所有节点只能掌握完整系统的部分情况,且必须基于这一信息作出决定;3)所有节点对最终决定承担相同责任;4)所有节点在对最终决定的影响上付出相同的努力;5)一个节点的故障从整体上不会导致整个系统的崩溃:6)不存在系统范围的共同时钟来规范时间的定位与排序。

其中第2)点是属于可选项,因为有些分布式互斥算法要求任何节点都要将自己所知道的所有信息通告系统内其他节点,这样,如果忽略通信延迟,则任何节点都将知道系统的全局信息。

当然,由于通信延迟的影响,节点不可能知道全局最新信息,因此,也可以说任何节点只能掌握系统的局部信息。

完全分布式互斥算法在节点的容错能力上比前面三种算法提高了很多,但同样提高了决策所需交换的信息量。

当然,随着通信技术的发展,节点间的通信带宽将大大增加,虽然节点的通信瓶颈仍可能在一定条件下存在,但其几率已有很大程度下降。

因此,研究如何降低消息复杂度,如何降低同步延迟以及提高节点与通信容错能力,成为完全分布式互斥研究的三个重要方向。

完全分布式互斥的算法发展又可以分成如下三个阶段。

1) 起步阶段。

该阶段以LamportⅢ算法为基础,以Ricart&Agrawala”。

算法与Maekawa乜1算法为标志,将分布式互斥算法从集中控制或非完全分布式互斥阶段推进到完全分布式互斥阶段。

2) 特殊发展阶段。

在以上三类算法的基础上,在二十世纪八十年代后期到九十年代初,随着分布式系统的发展,出现了几种完全分布式互斥算法。

它们改进了Maekawa乜1算法的各项性能指标,对分布式互斥算法的发展起到一定推动作用。

这一时期的分布式互斥算法与Maekawa。

1算法类似,都以研究特定系统规模条件下请求集的生成算法为主。

3) 全分布式互斥阶段。

从二十世纪九十年代后期开始,分布式互斥算法不再仅仅是实验室中学术讨论的课题和纸上谈兵的目的,而是存在了实际需要。

如何在上述全分布式互斥特性条件下,设计完全保证这些特性的分布式互斥算法,成为这一时期的主要课题。

四类算法都是在一定历史条件下出现的,并没有哪类算法在性能上占绝对优势,都在一定条件下具有相对优势。

因此,在合适的条件下选择合适的算法,是分布式互斥应用的一个重要研究课题。

1~互斥算法概述(1)分布式算法分布式互斥算法的讨论最早始于1978年Lamport关于时钟同步的论文中,后来有人对它做了进一步的改进,本文所描述的算法即是改进后的算法首先我们介绍该算法正确应用的假设前提:a)不限定逻辑结构的同构或异构计算机集合,其中每台计算机上有一个竞争使用临界资源的进程;b)完全无错网,即消息不会丢失和传输无延迟,并且消息按发送的先后顺序到达,算法的核心思想如下:a)当进程想进入临界区时,要建立一个包括进入的临界区名字~处理器号和当前时间的消息,并把消息发送给所有其它进程b)当进程接收到另一个进程的请求消息时,将分下面三种情况来区别对待:1)若接收者不在临界区中,也不想进入临界区,就向发送者发送OK消息;2)若接收者已经在临界区内就不必回答,而是负责对请求消息排队;3)若接收者要进入临界区但还没进入,它就会把接收的消息和它发送的消息的时间戳进行对比,取小的那个,如果接收的消息时间戳小,就发OK消息,如果发送的消息时间戳小,那么接收者负责排列请求队列而不发送任何消息G)当进程接收到允许消息时,它就进入临界区,从临界区退出时,向队列中的所有进程发送OK消息并将自己从队列中删除该算法可以保证访问临界区的互斥性以及无死锁进程~无饥饿程,但是这种算法有个严重的缺点是算法太复杂并且不健壮,任何一个进程崩溃都会影响到算法的正确性(2)令牌环算法令牌环算法是一种完全不同于分布式算法的互斥算法。

该算法的实现不仅需要分布式算法中所介绍的假设性前提外,还需要用软件的方法把所有竞争访问同一临界区的进程构造成一个逻辑环,环中的每个进程都有一个逻辑地址,这样进程就会知道它的下一个进程是谁。

算法的核心思想如下:a)令牌绕环运动,它从进程k传递到进程k+1 传递方式以点到点的方式;b)当进程从它的前一个邻居手中得到令牌时,将分以下两种情况处理自己的操作:1)该进程正打算访问临界区,于是它就进入做它自己的工作;退出临界区时,再将令牌传递给它的下一个邻居2)该进程并不想进入临界区,于是它将令牌传递给下一个进程该算法的正确性是显而易见的,但是这种算法也存在一些问题,比如说当令牌丢失时,需要重新生成,可是如何检测令牌丢失又是一个困难的问题,还有,如果环中的一个进程崩溃,那么环的连贯性就遭到破坏,算法也就会出现麻烦。

2~几种分布式令牌环算法以上我们分别介绍了分布式算法和令牌环算法的基本思想,由于这两种算法各有优缺点,于是出现了一种的互斥算法:分布式令牌环法分布式令牌环算法把上述两种互斥算法的优点集于一身,大大提高了算法性能上的优势,下面我们将集中讨论几种分布式的令牌环算法(1)基于优先级排序的分布式令牌环算法基于优先级排序的分布式令牌环算法要求访问临界区的请求消息按进程的既定优先级进行排序优先级高的请求先得到服务[26]它对运行环境做了如下假设: a)不限定分布式系统的拓扑结构,其中每台计算机上要有一个竞争使用临界资源的进程;b)消息在传输过程中不会丢失,并且消息按发送的先后顺序到达。

算法的核心思想如下几点:1)请求采用广播方式传给集合中的每个进程并同时告知请求进程的优先级别;2)系统中只有一个节点拥有令牌只有获得令牌的进程才允许进入临界区;3)持有令牌的进程只在运行于临界区时才处理到达的请求将其置于请求队列C 中 C按优先级排序;4)运行在临界区的进程在退出临界区时将C队列中的内容直接附接在令牌持有队列P之后删除P队列的头记录再将P队列随令牌一起发往P中所记录的下一个节点通过这种方式该算法保证了互斥~无死锁~无饥饿的特性下面我们就来详细介绍该算法的以上特性是如何得到保证的首先因为系统在任何时刻都只有一个节点拥有令牌并且只有获得令牌的进程才允许进入临界区这样就保证了对临界区访问的互斥性其次由于只有持有令牌的进程才能处理到达的请求并把它们置于请求队列中这样能保证进程申请资源的有序性即按照在队列中的先后顺序访问临界区满足了无死锁的条件最后9由于退出临界区的进程是将队列的内容直接附接在令牌持有队列p之后9而不是按优先级重新排序并合并起来9所以p队列中的低优先级进程一定会在队列中的高优先级进程访问临界区之前先得到执行9有效的避免了进程的饥饿0(2)两层结构的分布式令牌环算法两层结构的分布式令牌环算法是适用于多个节点网络的互斥算法,下图1给出了系统逻辑结构的一个简单图示,本算法把整个广域网系统组织成如下的两层逻辑结构:局域网是低一个层次,每个局域网中包含若干个局部进程和一个协调进程,局部进程在逻辑上组成一个环形结构,在每个环形结构上有且只有一个局部令牌 i按顺时针方向不断从一个局部进程传递到另一个局部进程每个局域网中的协调进程通过远程网络互相通讯,也按同样的方式组织成全局的逻辑环形结构,这个全局环是第二个层次,在这个全局环上也有且仅有一个全局令牌按顺时针方向不断传递相应于这种两层的逻辑结构,本算法包括局部进程的算法和协调进程的算法,局部算法的核心思想是:1)若局部进程p收到局部令牌 i并且它不要求进入临界区,这时就把 i直接传递给后续局部进程2)若局部进程p收到局部令牌 i并且它要求进入临界区,这时就向本地的协调进程Ci发送一个请求全局令牌的消息3)本地协调进程Ci在收到该请求消息后,一旦获得全局令牌就把发送给p4)p在获得局部令牌 i和全局令牌后,才能进入临界区,并在完成临界区操作后,将局部令牌 i传递给下一个局部进程,将全局令牌返回给Ci;协调进程的算法核心思想是:当协调进程收到全局令牌时,它会分以下3种情况处理:1)如果全局令牌来自协调进程且没有本地的局部进程请求进入临界区,那么就直接将全局令牌传递给下一个协调进程2)如果全局令牌来自协调进程且有本地的局部进程请求进入临界区,那么就将全局令牌传递给该请求进程3)如果全局令牌由本地的局部进程返回,那么就将全局令牌传递给下一个协调进程由上述描述我们清楚的发现局域网内和全局环上都采用的是令牌环的互斥算法,下面我们就利用令牌环算法的性质来证明本算法的正确性:首先,由于只有一个全局令牌,而只有获得全局令牌的进程才能进入临界区,这就保证了任何时刻都只有一个进程才能进入临界区,即在整个系统中保证了对临界区的互斥操作。

相关主题