分布式操作系统中进程同步.docx

分布式操作系统中进程同步 在单机条件下,诸进程运行于同一个处理机和内存环境中,进程通信十分 简单。进程之间可以借助于共享存储器进行直接通信。而在多机条件下,相 互合作的进程可能在不同的处理机上运行,进程间的通信涉及处理机的通信问 题。在松散耦合系统中,进程间通信还可能要通过较长的通信信道,甚至网络。 因此,在多机条件下,广泛采用间接通信方式,即进程间是通过消息进行通信 的。在分布式操作系统中,为了实现进程的同步,首先要对系统中发生的事件 进行排序,还要有良好的分布式同步算法。首先,看事件排序问题。在单处理 机系统及紧密耦合的多处理机系统中,由于共有一种时钟又共享存储器,确定 两个事件的先后次序比较容易。而在分布式系统中,既无共用时钟,又无共享 存储器,自然也就难于确定两个事件发生的先后次序了。这里所说的排序,既 包括要确定两个事件的偏序,也要包括所有事件的全序。下面我们简单介绍一 下Lamport于1978年提出的一个算法。该方法建立在以下基础上: (1)事件之 间存在的偏序;(2)为每一个进程设置一个逻辑时钟。所谓逻辑时钟,是指能为 本地启动的所有活动,赋予一个编号的机构,他可以用计数器来实现。在系统 中,每一个进程都拥有自己的逻辑时钟 c。在一个系统的逻辑时钟系统,应满 足条件:对于任何活动a(ini)和b(inj),如果a-b,则相应的逻辑时钟 c(i,a)b(j,b)。其中i,j表示处于不同物理位置的进程。为了满足上述条件, 必须遵循以下规则:第一,根据活动发生的先后,赋予每个活动唯一的逻辑时 钟值。第二,若活动a是进程i发送的一条消息m消息m中应包含一个时间 邮戳T(m)=c(i,a);当接受进程j在收到消息时,如果其逻辑时钟 c(j,b)c(i,a), 则应当重置c(j,b)大于或等于c(j,b)。这里我们对第二个规则 作些说明。由于每个进程都拥有自己的逻辑时钟,这些时钟的运行并非同步, 因此可能出现这种情况:一个进程i发送的消息中所含的逻辑时钟 c(m)=100, 而接收进程j在收到此消息时的逻辑时钟 c(j)=96,这显然违背了全序的要求, 因为发送消息事件A和接收事件B之间存在着A-B的关系。因而提出了第二项 规则,用于实现逻辑时钟的同步。根据这个规则,应该调整进程 j的时钟,使 c(j)=c(m),例如c(j)=c(m)+1=101。其次,看同步算法。在所有的同步算法中, 都包含以下四项假设:(1)每个分布式系统具有N个节点,每个节点有唯一的编 号,可以从1到No每个节点中仅有一个进程提出访问共享资源的请求。 (2)按 序传送信息。即发送进程按序发送消息,接收进程也按相同顺序接收消息。 (3) 每个消息能在有限的时间内被正确地传送到目标进程。 (4)在处理机间能实现直 接通信,即每个进程能把消息直接发送到指定的进程,不需要通过中转处理机。 在同步算法中,比较著名的有 Lamport算法,Ricart and Agrawla 算法, Mackawa(Square-Root)算法等,下面我们就介绍其中的几个。 1、Lamport算法 在该方法中,利用事件排序方法,对要求访问临界资源的全部事件进行排序, 并且按照先来先服务的原则,对事件进行处理。该算法规定,每个进程 Pi,在 发送请求消息Request时,应该为它打上时间邮戳(Ti,i), 其中Ti是进程Pi的 逻辑时钟值,而且在每个进程中都保持一个请求队列,队列中包含了按逻辑时 钟排序的请求消息。Lamport算法用以下五项规则定义:(1)当进程Pi要求访 问某个资源时,该进程将请求消息挂在自己的请求队列中,也发送一个 Request(Ti,i)消息给所有其他进程。 ⑵ 当进程Pj收到Request(Ti,i)消息时, 形成一个打上时间邮戳的Reply(Tjj)消息,将它放在自己的请求队列中。应 该说明,若进程Pj收到Request(Ti,i)消息前,也提出过对同一资源的访问请 求,那么其时间邮戳应该比T(Ti,i)小。(3)若满足以下两个条件,则允许进程 Pi访问该资源:? Pi自身请求访问该资源的消息已经处于请求队列的最前面。 ? Pi已经接收到从其他所有进程发回的响应消息,这些消息上的邮戳时间晚于 T(Ti,i)。⑷ 为了释放该资源,Pi从自己的请求队列中消除请求消息,并发送 一个打上时间邮戳的Release消息给其他所有进程。(5)当进程Pj收到Pi的 Release消息后,从自己的队列中消除 Pi的Request(Ti,i)消息。这样,当每 一个进程要访问一个共享资源时,本算法要求该进程发送 3(N-1)个消息,其中 (N-1)个 Request 消息,(N-1)个 Reply 消息,(N-1)个 Release 消息。2、 Ricart and A

文档评论(0)

1亿VIP精品文档

相关文档