《雲資料管理:挑戰與機遇》2.1.3 互斥和仲裁集

weixin_33766168發表於2017-05-19
本節書摘來自華章出版社《雲資料管理》一書中的第2章,第1節,作者迪衛艾肯特·阿格拉沃爾,更多章節內容可以訪問雲棲社群“華章計算機”公眾號檢視

互斥和仲裁集

互斥是併發程式訪問共享資源時涉及的一個基本概念。互斥是作業系統中的一個重要操作,後來也被擴充套件到資料庫中。互斥可以按照如下方式進行定義:給定一個程式集合和一個單獨的資源,開發一種協議,該協議可以確保在同一時間,一個資源只能被一個程式進行排他性訪問。針對集中式系統和分散式系統都已經提出了多種解決方案。針對分散式互斥問題的一種簡單的集中式解決方案可以設計如下:指定一個程式為協調者,當程式需要訪問資源時,傳送一個請求訊息給協調者。協調者維護一個等待請求佇列。當協調者接收一個請求訊息時,檢查該佇列是否為空,如果佇列為空,協調者就為請求客戶端傳送一個回覆訊息,請求客戶端就可以訪問共享資源。否則,請求訊息就被新增到等待請求佇列中。程式在共享資源上執行完成以後,向協調者傳送一個釋放訊息。接收到釋放訊息以後,協調者從佇列中移除請求,然後為其他等待的請求檢查佇列。該協議已經被Lamport[1978]擴充套件成分散式協議,很多其他研究人員對該協議進行了優化。

該基本協議的普遍應用需要系統中所有程式的參與。為了克服障礙,Gifford提出了仲裁集的概念。比較重要的發現是任意兩個請求都應該有一個共同的程式來充當仲裁者。假定程式pi(pj)從集合qi(qj)中請求許可,其中qi和qi是仲裁集,也可以是系統中所有程式的子集。qi和qj的交集不能為空。例如,包括系統中大部分程式的集合就可以構成一個仲裁集。使用仲裁集,而非系統中的所有程式,基本協議仍然有效,但是有可能出現死鎖[Maekawa, 1985]。圖2-4a展示了一個包含7個程式的系統,任意一個大於等於4的集合和另外一個大於等於4的集合一定相交,即對於任意兩個仲裁集, 每一個仲裁集都包含大部分站點,它們的交集一定是非空的。

在資料庫中,仲裁集的概念可以理解成基本的讀、寫操作,讀操作不需要互斥。然而,多個讀操作雖然可以併發執行,但是,針對資料的寫操作仍需要互斥訪問。因此,設計了兩種仲裁集:讀仲裁集和寫仲裁集,其中,兩個寫仲裁集之間的交集不能為空,一個讀仲裁集和一個寫仲裁集之間的交集也不能為空,針對兩個讀仲裁集的交集沒有強制性要求。圖2-4b展示了一個包含6個程式的系統,寫仲裁集是大小為4的任意集合,讀仲裁集是大小為3的任意集合。需要注意的是,任意讀仲裁集和寫仲裁集必須相交,任意兩個寫仲裁集也必須相交。但是,讀仲裁集之間不一定相交,因此,多個讀操作可以並行執行。

 

a)互斥仲裁集                                                          b)讀寫仲裁集

相關文章