分布式系统时钟同步(未完)
来源:互联网 发布:与淘宝相似的软件 编辑:程序博客网 时间:2024/05/16 12:01
先说说make的工作原理。其实很简单,程序员修改完所有的源文件后启动make程序,make程序检查所有源文件和目标文件最后被修改的时间。如果源文件input.c的时间是2151,而相应的目标文件input.o的时间是2150,那么make程序知道在input.o创建之后曾经对input.c进行修改过,因此必须对input.o重新编译。在没有全局时钟的情况下可能出现这种情况
物理时钟:
物理时钟大致上就是有两个寄存器与每个石英晶体相关联,一个是计数器,另一个是保持寄存器。石英晶体每次震荡使计数器减1。当计数器减为0时,产生一个中断,计数器从保持计数器中重新装入初始值。每次中断成为一个时钟滴答。
在单机单时钟情况下,如果这个时钟有少许偏差是不会有太大问题的。一旦引入多CPU系统,每个CPU都有自己的时钟,情况将发生变化。实际上,当一个系统有n台计算机时,所有n个晶体都将以略微不同的速度震荡,导致时钟逐渐不同步。
时钟同步算法:
假设每台机器都有一个每秒产生H次中断的计时器。当计时器产生中断时,中断处理程序将软件的时钟值加1,软件时钟记录从过去某一约定时间开始的滴答(中断)数。我们将这个值成为C。更具体的说,当UTC时间为T时,机器P上的时钟值为Cp(t)。最理想的情况是对所有的p和t,都有Cp(t)=t,换言之dC/dt的理想值为1
(1)Cristian算法
这种算法适合于只有一台机器上有WWV接收器,其他所有机器都要与那台机器同步。
这种方法有两种问题,一个主要,一个次要。主要问题是时间不能倒退,所以要逐步的调整。次要问题是发送时间的过程有延迟,解决办法是检测延迟。
(2)Berkeley算法
这种算法适合没有一台机器有WWV接收器的。该系统中的服务器是主动的,它定期的询问每台机器的时间,基于这些回答,它计算出一个平均时间值,并告诉所有其他机器将它们的时钟拨快到一个新的时间,或者拨慢。
逻辑时钟
对于某类算法而言重要的是时钟的内部一致性,而不是它们是否与真实时间接近,这类算法通常将时钟称为逻辑时钟。
(1)Lamport时间戳
Lamport定义了一个“先发生”的时间关系,a->b表示所有进程一致认为a先发生,然后b才发生。这种先发生关系有两种情况:
如果a和b是同一个进程中的两个事件,且a在b发生之前,则a->b为真
如果a是一个进程发送消息的事件,b是一个进程接收消息的事件,则a->b也为真。
先发生关系满足传递性。
一个例子
a图由于三台机器以不同的时钟频率运行,可能出现奇怪的问题C从进程2传递到进程1发生了时间倒退,消息D从进程1到进程0也发生了。
Lamport解决方法是遵循先发生关系。既然C在60是可离开那么它只能在61或更晚的时刻到达,每个消息都应该携带依据发送者时钟的发送时间,当消息到达并且接受者时钟显示的时间值比发送时间早,接受者就将它调到比发送时间大1的时刻。
总结一下:每两个事件之间,时钟必须至少滴答一次。
一个例子:全序多播
为了提高查询效率,银行可能在两个不同的城市都保存了一个账户数据库的拷贝,比如纽约和旧金山,一个查询总是被发送到最近的那个拷贝。假设一位旧金山客户想在他的账户中村$100,且他当前账户中有$1000,与此同时纽约的银行职员要向该账户加进1%的利息,但是由于网络延迟(一个在东海岸,一个在西海岸),两个操作的顺序不同了。
像这种情况需要进行一次全序多播。
每个消息都以它的发送者的当前逻辑时间作为时间戳。进程收到一个消息后,将他放进一个本地队列中,并根据他的时间戳进行排序,最终所有的进程都将有相同的本地队列拷贝,只有当队列中的一个消息处于队头,并且已经被所有其他的进程确认时,进程才可以将他交付给运行这种的应用程序,此时把消息从队列中删除。
(2)向量时间戳
一个例子:
Four locations: pitcher’s mound, first base, home plate, and third base
Ten events:
e2: ball arrives at home
e3: batter hits ball to pitcher
e4: batter runs to first base
e5: runner runs to home
e6: ball arrives at pitcher
e7: pitcher throws ball to first base
e8: runner arrives at home
e9: ball arrives at first base
e10: batter arrives at first base
pitcher知道e1->e6->e7
home plate知道e2->e3->e4->e8
e8 e9之间的关系不清楚
使用Lamport得到
L(e1) = 1 (pitcher throws ball to home)
L(e2) = 2 (ball arrives at home)
L(e3) = 3 (batter hits ball to pitcher)
L(e4) = 4 (batter runs to first base)
L(e5) = 1 (runner runs to home)
L(e6) = 4 (ball arrives at pitcher)
L(e7) = 5 (pitcher throws ball to first base)
L(e8) = 5 (runner arrives at home)
L(e9) = 6 (ball arrives at first base)
L(e10) = 7 (batter arrives at first base)
使用向量时间戳
- 分布式系统时钟同步(未完)
- 分布式系统时钟同步
- 分布式系统时钟同步方案
- 分布式数据采集系统中的时钟同步
- 分布式系统阅读笔记(二十二)-----时钟和时钟同步
- 分布式系统时钟同步技术的研究与应用
- 分布式文件系统(未完)
- GPS时钟系统,GPS同步时钟系统
- 系统时钟和硬件时钟同步
- 分布式系统阅读笔记(十四)-----时钟和全局状态
- 分布式系统session同步
- 分布式系统数据同步解决方案
- 分布式系统中的数据同步
- 分布式系统里session同步
- 网络时间同步系统(标准时间时钟显示屏)在医院网络系统的应用
- 虚拟机时钟同步(2)
- 线程通信 线程同步(未完待续)
- 学生管理系统(未完)
- GDI+学习笔记(三)绘制一张简单的图片
- 分享一下个人的Vim配置文件
- 安卓基础学习2
- ant笔记-6.项目构建之清理,初始化,编译
- DAT_copy 产生的问题
- 分布式系统时钟同步(未完)
- C++ class实例的内存结构
- 般若波多密心经读书心得(一)
- 在win7上安装 SQL serve 2000
- POJ - 2362 Square
- BOW和LSH的一点理解
- 7 lessons I wish I learned before starting my first game internship
- C语言--关于二维数组
- 友元函数的使用