《分布式操作系统》知识点(15~21)三
(4)8 P160:(4)代表該道題屬于第4章的內容,8是題號(第8題),P160是該習題在書中的大體頁碼。
(3)15說明基于時間戳的樂觀并發控制算法的基本原理,并舉例說明。P110
答:所謂的樂觀的并發控制,其核心思想為:盡管放心的去做你想做的,不用在意其他人正在做什么。如果有問題出現,那么以后再考慮。在實際情況中,沖突相對來說非常少,所以這個策略大部分時間都可以正常工作;而基于時間戳的并發控制方法是指在一個事務開始做BEGIN_TRANSACTION的時候給它分配一個時間戳。通過使用Lamport的算法,我們可以確保時間戳是唯一的, 在這里它很重要。系統中的每個文件都擁有一個相關的讀取時間戳,以判斷哪個已經提交的進程最近一次讀取或寫入過該文件。如果事務都很短小而且在時間間隔上比較大,那么一般來說當一個進程試圖訪問某個文件時,該文件的讀寫時間戳將低于當前事務的時間戳。這種詞性意味著事務正在以正確的順序進行處理,一切正常。當次序不正確時,就表明一個晚于當前事務開始的事務試圖插入、訪問文件并提交。
這種情況意味著當前事務開始的過早了,因此需要終止。顯然基于時間戳的并發控制方法就是一種樂觀的并發控制方法,盡管兩者的細節完全不同。在樂觀的并發控制方法中,我們希望并發事務不使用同一個文件,而在基于時間戳的并發控制方法中,我們不介意并發事務是否使用同一個文件,只要編號小的事務總是先執行就可以了。
假設有三個事務a,b,c,它們使用的文件都是同樣的,a很早就開始了,文件的時間戳就是a的時間戳。b和c同時開始,但時間戳不同,b的時間戳小于c的。若b試圖寫文件,則它先將自己的時間戳Tb和文件的寫時間戳Tw對比。除非在b之后的事務c寫了此文件并提交,文件的寫時間戳是基于c的,Tb<Tw,事務b開始早了,終止,否則文件的寫時間戳是基于a的,即Tb>Tw,由此b可以寫文件。
?
(3)16舉例說明RICART和AGRAWALE分布式互斥算法;假定A和B是相互獨立的兩個臨界區,進程0按A、B順序進入,進程1按B、A順序進入,R-A分布式互斥算法會導致死鎖嗎?說明理由。P95
答:RICART和AGRAWALE算法要求系統中所有事件都是全序的,也就是說,對任何事件組消息,哪個先發必須無歧義,算法如下:當一個進程想進入臨界區時,他要建立一個包括他要進入的臨界區的名字、處理機號、當前時間的消息,然后將消息發送給所有其他進程,也包括發送給自身,當一個進程接收另一個進程消息時,它取決于接受方的狀態以及臨界區的名字有三種情況:
(1)接受者不在臨界區,也不想進入臨界區,他就向發送者發送OK消息;
(2)接受者已經在臨界區,它不必回答,而是負責對請求隊列排隊;
(3)接收者要進入臨界區,但是還沒有進入,它要負責將發來的消息和它發送給其他進程的時間戳對比,取小的那個。如果來的消息時間戳小,接收者發送OK消息,否則接收者負責排列請求隊列而不發送任何消息。
?在發送完允許進入臨界區的請求后,進程將不再做任何事,僅等待所有的允許消息,一旦得到允許,它就進入臨界區。它從臨界區退出時,向隊列中所有進程發送OK消息,并將它從隊列中刪除。
?該算法可能導致死鎖。例如:P0、P1在同一時刻分別對臨界區A、B發出請求,都得到滿足,下一時刻它們又同時發出對臨界區B、A的請求。此時由于P0正使用A所以對P1不作回答,只是將其放入隊列。 而此時由于P1正使用B所以對P0不作回答,只是將其放入隊列。P0得不到B不會釋放A,也就不會應答P1,同樣,P1得不到A不會釋放B,也就不會應答P0,結果死鎖。
?
(3)17在分布式系統中,許多算法都需要一個進程充當協調者,因此需要協調者選舉算法。試說明欺負算法的主要思想,并說明在8個進程的情況下號碼為3的進程發現協調者崩潰后的選舉過程。P99
答:欺負算法:當一個進程發現協調者不再相應請求時,它發起選舉。
進程P選舉過程如下:
1.P向所有號碼比它大的進程發送選舉(Election)消息。
2.若無人響應,P獲勝成為協調者。
3.若有號碼比它大的進程響應,響應者接管,P的工作完成。
在某一時刻,一個進程只能從號碼比它小的進程那里得到一個選舉消息,當他到達時,接受者就發送ok消息,表明他的存在并接管,然后接收者主持選舉(除非它正在主持別的選舉)。除了一個進程外的其余進程都得放棄,這一個進程就是新的協調者,它將選舉獲勝的消息發送給所有進程,告知它是新的協調者。
假設有一個進程,該進程剛剛崩潰過,但現在得到了恢復并主持選舉。若它剛好是當前運行進程中號碼最大的,它就會獲得選舉的勝利,從而接管協調者的工作,所以最大的進程總能取勝,故而將該算法命名為欺負算法。
進程3發現協調者崩潰之后,向所有比其進程號大的進程,即4、5、6、7發消息,接收到消息的進程如果不是崩潰的協調者,則向進程3發送OK消息。進程3接到第一個應答時就知道自己的工作已經結束了。然后由進程號大于3的非崩潰協調者都主持選舉,每個進程僅把消息發送給比自己進程號大的進程,最后的勝出者就是新的協調者。新的協調者向所有的進程發送協調者(COORDINATOR)消息,工作得到了繼續。
?
(3)18在分布式系統中獲得互斥的方法之一是采用集中式的算法,如果有四個進程P0,P 1,P2,P3,P0首先申請資源S,之后P 1,P2,P3 隨后申請資源S,試說明采用集中式的算法是如何實現互斥的。P95
答:首先選擇一個進程為協調者(比如在最大網絡地址機器上運行的進程)。無論什么時候進程要進入臨界區,它向協調者發送請求消息,說明它想進入哪個臨界區并希望獲得允許。如果當前該臨界區內沒有其他任何進程,協調者就發出允許進入消息。當P0請求資源S時,當應答到達時,P0就可以進入臨界區。此時若P1請求資源S,協調者知道該臨界區已經有一個進程,所以不能同意P1的請求。此時協調者可以發送“拒絕請求”應答,把進程2的請求臨時排在隊列中。或者協調者回避應答,這樣就阻塞了進程2,使它等待應答。
當進程P1從臨界區退出時,它向協調者發送釋放互斥消息的訪問,此時協調者從推遲請求隊列中取出最前面的進程即P2,向它發送允許進入消息。如果該進程仍然(即,這是第一條發送給它的允許進入消息)它不被阻塞且進入臨界區。如果明確發送一消息拒絕它進入臨界區,此進程應該查詢輸入的消息,或者接著將它阻塞,不管怎么樣,當它發現允許進入時,它還可以進入臨界區。如果進程在阻塞狀態,它就會被喚醒進入臨界區。以此類推,即可實現進程P0、P1、P2和P3對資源S的互斥訪問。
顯而易見該算法保證了互斥的實現,協調者僅能讓某一進程在某一時刻進入臨界區。它也很公平,因為允許請求的順序同他們接受的順序一致,沒有進程永遠等待(沒有饑餓)。這種方案也很容易實現,沒用一次臨界區只需3條消息(請求,允許,釋放),它不僅僅能管理臨界區,也可更普遍的用于資源分配。
?
(3)19有三個進程分別運行在不同的機器上,每個機器都有自己的時鐘并以不同且不變的速率工作(進程1的時鐘嘀嗒了6下時,進程2的時鐘嘀嗒了8下,而進程3的時鐘嘀嗒了10下),舉例說明進程之間消息傳遞中違反先發生關系的情況,并說明如何用Lamport方法解決。
答:
Lamport解決方案直接使用先發生關系,每條消息攜帶發送者的時鐘以指出其發送的時刻,當消息到達時,接收者時鐘若比消息發送時鐘小,就立即將自己的時鐘調到比發送時間大1或更多的值。
如上圖,其中消息C從進程2到進程1是在60時刻離開,56時刻到達。同理,消息D從進程1到進程0是在64時序離開,54時刻到達,這是絕對不可能出現的。
Lamport的解決方案是直接使用先發生關系,因為C在60時刻離開,只能在61時刻或更晚時刻到達,所以每條消息都攜帶發送者的時鐘以指出其發送的時刻,當消息到達時,接收者時鐘惹比消息發送時鐘小,就立即將自己的時鐘調到比發送時間大1或更多的值。在b中,我們看到C現在到達的時間是61,同樣D到達的時間是70。
?
?(3)20在很多分布式系統應用中,需要物理時鐘同步,舉一個例子,并說明物理時鐘同步的三種算法,Cristian 算法、Berkeley算法及平均值算法。P90
答:在銀行系統中,實際時鐘時間很重要,對此要用到外部的物理時鐘并且要求物理時鐘的同步。
Cristian算法:
非常適合于只有一臺機器上有WWV接收器 (時間服務器),其它所有機器與它同步的系統。擁有WWV接受的那臺機器叫時間服務器(time server),每臺機器以小于或等于秒的周期定期地向時間服務器發送消息詢問當前的時間,時間服務器接到消息后就盡快回答含有當前時間CUTC值的消息。
由于時間不能倒退,一種方法是發送者根據時鐘快慢,中斷服務程序調整(增大或減小)每次中斷所加的時間值。精確記錄從向時間服務器發送請求的起始時間于時間T0和接收到應答的結束時間T1。當前服務器時間估計值=CUTC+(T1-T0)/2,如果考慮服務器中斷處理的時間I,那么傳輸的時間間隔為T1-T0-I,單向傳輸時間為它的一半。
Berkeley算法:
平均值算法:
將時間分成固定長度的再同步間隔,第i次間隔開始于T0+iR,結束于T0+(i+1)R,T0是過去某一約定的時間,R是一個系統參數。在每次間隔開始處,每臺機器根據自己的時鐘廣播發送當前的時間。在機器廣播發送時間之后,它啟動本地計時器收集在S時間間隔中到達的其他廣播。當所有廣播到達后,執行一個算法,得到新的時間值。這個算法可以是求這些值得平均值,或者是去掉m個最大值和m個最小值,平均其余值。
?
(2)21組通信系統中,原子性的含義是什么,舉例說明為什么要保證原子性。在保證原子性的同時還要保證消息順序,舉例說明保證消息順序的必要性。P75
答:原子性:要么全有要么全無特性的傳遞稱為原子性(automicity)或原子廣播(automicbroadcast)。
當兩個進程競相訪問LAN時,在網絡中消息傳送的順序是無法確定的,我們看圖一中,進程0先占用網絡向進程1發送了一消息,隨后進程4連續三次占用網絡,先后向進程0, 1和3發送了消息。在圖2中的兩部分以不同方式表示了這6條消息的發送順序。同樣它還可以以其他的順序來發送占用和發送進程。在這出現了消息的順序問題。
??? 我們再看圖2所示的進程l和進程3的情形。進程1先收到了來自進程0的消息,然后收到了來自進程4的消息。進程3開始沒有收到消息,繼而先后收到了來自進程4和進程0的消息。這樣進程4與0的兩條消息以不同的順序到達了進程1和3。如果進程0和4都想去改變數據庫中的同一記錄的值,那么進程1和進程3執行的最終結果是不相同的。可能導致的后果是原子性失敗。這與組內部分成員收到消息而部分成員未收到消息(原子性失敗)的情形是一樣糟糕的。
為了使編程更為合理,系統必須很好地定義一種消息傳遞順序的語義。最好的保證就是立即發送所有消息并讓它們保持發送的順序。這樣所有接受者都以同樣的順序接收到消息。這種消息傳遞的模型編程人員就能理解,而且他們的軟件也可以它為基礎。它能將消息準確地按發送順序傳遞到目的地。
總結
以上是生活随笔為你收集整理的《分布式操作系统》知识点(15~21)三的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《分布式操作系统》知识点(8~14)二
- 下一篇: 《分布式操作系统》知识点(22~28)四