1.1.2.6 銀行家算法

銀行家算法是資源和死鎖避免的算法,由艾茲格·迪傑斯特拉(Edsger Dijkstra) 設計的算法用於測已確定總數量的資源分配的安全性,在決定是否該分配應該被允許並進行下去之前,通過“s-state”校驗碼測試資源分配活動期間產生死鎖條件的可能性。 

該算法是爲爲THE操作系統設計並且最在在EWD108描述。當一個新的進程進入系統時,進程必須聲明所需每個資源實例最大的數量和類型。顯然,資源數量不不能超過系統最大的資源數。與此同時,進程獲得的資源必須在有限的時間內釋放。
對於銀行家算法的實現,需要知道三件事: 
  • 每個進程所能獲取的每種資源數量是多少[MAX] 
  • 每個進程當前所分配到的每種資源的數量是多少[ALLOCATED] 
  • 系統當前可分配的每種的資源數量是多少[AVAILABLE]
只有當資源滿足以下條件,資源纔會被分配:
  1. request <= max, 也可設置錯誤條件,當進程所請求的資源超過最大的要求
  2. request <= available, 或者進 
    程一直等直到資源可分配
一些資源在實際的系統被跟蹤,如:內存,信號量以及接口。
銀行家算法名字源於該算法實際上是用於確保銀行系統不會用盡系統資源,因爲當銀行系統不再滿足所有客戶的需求,系統將不會分配資源給客戶,銀行必須確保對資源的請求不會導致銀行系統處於不安全狀態。如果上述情況不會發生,則該情況下請求是被允許的,否則,客戶必須等到其他客戶往銀行存進足夠銀行分配的資源。
 
基本數據結構用於維護運行銀行家算法: 
用n表示系統資源數量,m表示系統資源類型。則我們需要以下的數據結構: 
  • Available: 長度爲m的向量用來表示每種資源可分配的數量。如果available[j]=k, 資源類型爲Rj可分配數量爲k。 
  • Max: n * m矩陣,定義,每個進程最大的資源需求。如果Max[i,j]=k. 表明Pi對類型爲Rj資源的請求爲k. 
  • Allocation: n * m矩陣定義每個進程已分配到的每種資源的數量。如果Allocation[i,j] = k,進程Pi已分配到類型爲Rj的資源數量爲k。 
  • Need: n * m 矩陣表明每個進程所需的資源數量,如果Need[i,j] = k, 進程Pi需要至少得到k數量的資源Rj,才能完成任務。
公式:Need[i,j] = Max[i,j] - Allocation[i,j]
 

安全和不安全狀態

如果該狀態下所有進程都可以結束運行,則該狀態是安全。因爲系統無法知道什麼時候一個進程結束運行,或有多少資源被進程請求,系統只是假設所有的進程最終會試圖獲取他們所規定的最大資源,並且在獲得資源使用完之後會結束運行。在大多數的情況下,該假設是很合理的,因爲系統不會特別的關心每個進程的運行多久(至少不是從死鎖避免的角度)。
 對於該猜想,算法確定是否一個狀態是安全通過找到一個猜想性的進程請求序列,允許所有進程獲取最大的資源數並順利結束運行。而任何無法達到上訴要求的的狀態都是不安全的狀態。
可以得到例子的安全狀態,只要能使每個進程獲得最大資源並結束運行。
1.P1 請求 2 A,1 B,達到進程需求的最大資源數 
  • [可分配資源:<4 5 4> - <2 1 0> = <2 4 4>
  • 系統當前有2 A, 4 B, 4 C資源可分配
2.P1 結束運行,釋放3 A, 3 B, 3 C資源給系統。 
  • [可分配資源:<2 4 4> + <3 3 3> = <5 7 7>
  • 系統當前有5A, 7 B, 7 C資源可分配
1.P2請求 4C,達到進程需求的最大資源數 
  • [可分配資源:<5 7 7> - <0 0 4> = <5 7 3>
  • 系統當前有5 A, 7 B, 3C資源可分配
3.P2 結束運行,釋放4 A, 2 B, 6 C資源給系統。  
  • [可分配資源:<5 7 3> <4 2 6>= <9 9 9>
  • 系統當前有9 A, 9 B, 9 C資源可分配
4.P3 請求3 A, 2B, 4 C資源,之後運行結束釋放資源給系統 
  • [可分配資源:<9 9 9> - <3 2 4> + <4 3 5>= <10 10 10>
  • 系統現在用所有的資源10A, 10 B, 10 C 
5.由於所有的進程可以結束運行,該狀態是安全的狀態。
 
當系統收到對資源請求信號時,系統運行銀行家算法判斷允許請求是否安全。
1.該請求是否可以運行? 
如果不允許,該請求則是不可行的,必須要麼拒絕請求或插入到等待隊列。 
2.假設請求被允許 
3.是否安全? 
如果安全,請求授予,否則,要麼拒絕或插入到等待隊列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章