Close
技术支持
在线客服
在线客服
在线客服
嵌入式LED点阵显示、LED数显、无线遥控、信息采集系统开发!
引导页 中文版 English

数字LED显示屏

PLC显示屏(集成modbus&profibus协议)

电子看板003

电子看板004

PLC显示屏(自由口RS485通讯)

电子看板006

工业参数LED显示屏

电子看板008

PLC显示屏

电子看板010

 
 
同步时钟与逻辑时钟算法
  • 点击2278
  • 发布:2015-3-25
  • 时钟同步漫谈:
          分布式系统使用分布式算法,它的同步机制比集中式系统的复杂。在分布式系统中,在某一位置上不可能在收集到系统的所有信息后,再做出同步决策,而这在集中式系统中是能做到的。一般地,分布式时钟同步算法有以下特点:首先,相关的信息分布在多台机器上;其次,进程只根据本地可用的信息做出决策;第三,应避免系统中单机失效;第四,系统中不存在公共时钟或其他精确的全局时间源。前三点都是说明,在处理过程中单个点上无法收集到系统的所有信息。理想情况下,分布式系统应该比单机更可靠。如果在分布式系统中有某台机器停止了工作,剩余的机器应该能够继续完成系统的功能。为了在没有集中控制的情况下实现同步,需要采取与传统操作系统不同的工作方式。第四点也很重要。在集中式系统中,时间是很明确的。一个进程如果要知道当前的时间,只要执行一个系统调用,操作系统内核就会返回当前的系统时间给发出询间的进程。如果进程A查询了系统时间,稍后进程B也去查询系统时间,那么进程B得到的时间将在进程A得到的时间值之后(也可能相同),但肯定不会在此之前。然而,分布式系统中,要达到这种时间的一致性却不是件简单的事。举一个简单例子,让我们考虑一下在缺乏全局一致的时间的情况下,对UNIX中make程序的意义。通常make程序检查源文件及与它相应的目标文件的最后修改时间。如果make程序确定在创建input. o后,源文件input. C被修改了,那就要重新编译源文件input. C。make程序遍历所有的源文件,找出需要重新编译的文件,调用编译器编译这些文件。
          现在,想象在没有全局一致时间的分布式系统中执行make程序。假设ouput. o的最后修改时间是2000,并且在创建output.o后随即修改了源文件output. c,但是由于编辑output. c的机器的时钟慢,所以修改后output.o的最后时间被指定为1999。这时,make程序就不会重新编译。utput. c。这样,就出现了在一件事后发生的事反而可能被赋予更早的发生时间这样的怪事,程序的运行就会出现问题。时间是处理问题的基础之一,不同步的时钟会产生不可预计的结果。那么如何解决分布系统中的时钟同步就很重要 了。可见时钟同步对于人们生活、工作以及机器的运转是多么的重要。
    时钟同步算法:
          1978年Lamport在他的一篇经典论文中说明了时钟同步的可能性,并给出了它的同步算法。Lamport指出,系统中的时钟并不需要绝对的同步。如果两个进程间不发生交互,就不必要保持时钟的同步。重要的不是所有进程有完全一致的时间,而是事件发生的先后次序要一致。比如,在上面的make例子中,重要的是,修改文件output.o的时间是在文件output.o的创建时间之前还是在它之后,而不是创建它们的准确时间。某一类同步算法,只关心时钟的内部一致性,而不关心其时钟是否与实际时间一致。在这些算法中,将时钟称为逻辑时钟。使所有的时钟不仅时间一致,而且与实际时间的偏差不超出某个确定的范围时,这样的时钟称为物理时钟。定义一种称为发生之前(happens-before)的关系。表达式a-b读作“a发生在b前”,即所有进程都认为事件a先发生,然后才发生事件b。为事件a指定一个所有进程都能接受的时间值C (a)。这时间值必须满足以下属性:如果a->b,则C(a)<C(b)。
           (1)如果a和b是同一进程中的事件,而且a发生在b前,那么a->b为true, C(a)<C(b)。
           (2)如果a事件是某个进程发送消息,而b事件是另一进程接收该消息,那么a-b为true。为事件a、b所指定的时间值C (a)和C (b)应满足条件C(a)<C(b)。
           Happens-before关系具有传递性,如果a->b和b->c都成立,则a->c也成立。
          如果两个事件x和y发生在不同的进程中,而且这两个进程之间不交换信息(也不通过第三方间接交换信息),那么x->y和y->x都不成立。这两个事件就称为并发事件,并发意味着两个事件发生时,无法确定哪个事件先发生,或者说不需要考虑此事。
     另外,时钟时间C必须向前(不断增加),不能后退(减小)。对时间的更新,只能是在时钟上加一个正数,不能减正数。
          下图中给出的三个进程为例,分析Lamport算法。这三个进程运行在不同的有自己时钟的机器上,每个时钟按自己的速度运行。图中可以看到,进程。中时钟有6次嘀嗒时,进程1已经有了8次,而进程2已经有了10次。(设计时器每秒生成60次中断,每次中断称为一个时钟嘀嗒。)从进程2发送该进程 1的消息C,其发送时刻为60,到达时刻为56。同样,从进程1到进程0的消息D,其发送时刻为64,到达时刻为54。这显然是不可能的,也是必须避免出现的情况。
          Lamport的解决方法直接来自于happens-before关系。由于消息c的发送时间为60,它的到达时间一定在时刻61或61之后。因此让每条消息都携带其发送者的时钟所确定的发送时刻。当消息被接收时,如果接收者的时钟指示值先于发送消息的时间,接受者的时钟值就应快于消息发送时刻加1之后时间值。图中可以看到,C的到达时刻为61,D的到达时刻为70。如果再加一个小的附加条件,上面的算法就可以满足全局时间的要求了。所加的条件就是:两个事件之间,时钟至少应间隔一个嘀嗒。如果一个进程依次快速发送或接收两条消息,它就必须调整时钟,使这两个事件之间(至少)间隔一个时钟嘀嗒。如果进程快速运行,那么两个消息之间也至少得有一个时钟滴嗒。如果把附加条件改成以下条件可能更合适,即没有两个事件是精确地在同一时刻发生的。这样,在分布式系统中,所有事件的时间给定原则就很明确了:
           (1)在同一进程中,如果a在b前面发生,那么C(a)<C(b)。
           (2)如果a与b分别代表消息的发送和接收,那么C(a)<C(b)。
           (3)对于所有的事件a与b而言,C(a)!=C (b)。

    图片

           这一算法给出了在系统中所有事件的一个整体定序方法。由于分布式系统中需要一种机制以避免不确定性,所以该算法在学术界中得到了广泛的认同。

    地址:深圳市福田区上沙村忠合广场A座  电话:0796-7203100 传真:0796-7203100-8005
    版权所有:深圳市立显光电有限公司  技术支持:天地盟网络 [粤ICP09009496]
    本站所有产品资料专属于深圳立显光电,未经许可不得擅自非法转载.