銀行家算法是資源和死鎖避免的算法,由艾茲格·迪傑斯特拉(Edsger Dijkstra) 設計的算法用於測已確定總數量的資源分配的安全性,在決定是否該分配應該被允許並進行下去之前,通過“s-state”校驗碼測試資源分配活動期間產生死鎖條件的可能性。
-
每個進程所能獲取的每種資源數量是多少[MAX]
-
每個進程當前所分配到的每種資源的數量是多少[ALLOCATED]
-
系統當前可分配的每種的資源數量是多少[AVAILABLE]
-
request <= max, 也可設置錯誤條件,當進程所請求的資源超過最大的要求
-
request <= available, 或者進程一直等直到資源可分配
-
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,才能完成任務。
安全和不安全狀態
-
[可分配資源:<4 5 4> - <2 1 0> = <2 4 4>
-
系統當前有2 A, 4 B, 4 C資源可分配
-
[可分配資源:<2 4 4> + <3 3 3> = <5 7 7>
-
系統當前有5A, 7 B, 7 C資源可分配
-
[可分配資源:<5 7 7> - <0 0 4> = <5 7 3>
-
系統當前有5 A, 7 B, 3C資源可分配
-
[可分配資源:<5 7 3> + <4 2 6>= <9 9 9>
-
系統當前有9 A, 9 B, 9 C資源可分配
-
[可分配資源:<9 9 9> - <3 2 4> + <4 3 5>= <10 10 10>
-
系統現在用所有的資源10A, 10 B, 10 C