網絡同步時鍾之分布式算法原理


深圳市立顯電子有限公司,專業LED時鍾生產廠家!--------【點擊進入】 

網絡時鍾同步漫談:
  分布式網絡系統使用分布式算法,它的同步機制比集中式系統的復雜。在分布式網絡系統中,在某一位置上不可能在收集到系統的所有信息后,再做出同步決策,而這在集中式系統中是能做到的。一般地,分布式時鍾同步算法有以下特點:首先,相關的信息分布在多台網絡時鍾機器上;其次,進程只根據本地可用的信息做出決策;第三,應避免系統中單個網絡時鍾失效;第四,系統中不存在公共時鍾或其他精確的全局時間源。前三點都是說明,在處理過程中單個點上無法收集到系統的所有信息。理想情況下,分布式系統應該比單機更可靠。如果在分布式系統中有某台時鍾停止了工作,剩余的時鍾應該能夠繼續完成系統的功能。為了在沒有集中控制的情況下實現網絡同步,需要采取與傳統操作系統不同的工作方式。第四點也很重要。在集中式系統中,時間是很明確的。一個進程如果要知道當前的時間,只要執行一個系統調用,時鍾操作系統內核就會返回當前的系統時間給發出詢間的時鍾進程。如時鍾果進程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)。

  這一算法給出了在系統中所有事件的一個整體定序方法。由於分布式系統中需要一種機制以避免不確定性,所以該算法在學術界中得到了廣泛的認同。我們在網絡同步時鍾系統中正是采用了這種算法時行時鍾時間同步。
LED時鍾頻率穩定度:
  頻率穩定度是指在一定時間間隔內,晶體振盪器頻率准確度的變化。 頻率穩定度也是晶體振盪器性能的最重要指標之一,它表征振盪器維持其工作於恆定頻率上的工作能力。還反映頻率的偶然變化和這種變化的波動情況,此變化可以說明外界條件變化和內部參數變化時,振盪器所能達到的最高精度界限。對穩定度的描述應該引入時間概念,因此,有長期、短期和瞬間穩定度之分,但其間沒有嚴格的界限。長期穩定度指年或月范圍內的LED時鍾振盪電路頻率准確度的變化,指長時間的頻移。在晶體振盪器中,長時間的頻移主要是由晶體的老化引起的,其值與頻率的瞬間無規則變化無關,而且,短時間的頻率變化與一天以上的頻移比較,常常可以忽略不計。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM