銀行家算法說明

原有的銀行家算法的說明不太清楚,根據自己的理解進行修訂:

銀行家算法可歸納如下:

(1)當一個用戶對資金的最大需求量不超過銀行家全部資金(可用+已借貸)時,就可以接納該用戶,但需要根據當前需求量繼續判斷是否可立即接納,還是推遲接納。

(2)用戶可以分期貸款,但貸款總數不能超過最大需求量。

(3)當銀行家現有的資金不能滿足用戶當下申請的資金(滿足條件2)時,推遲支付,但應總能使用戶在有限的時間內得到貸款。

(4)當銀行家現有的資金能滿足用戶當下申請的資金時,但不滿足該用戶的全部剩餘需求時,需要判斷銀行家是否能夠找到一個支付序列,保障所有用戶最終在有限時間內得到貸款。

(5)當銀行家現有的資金能滿足用戶當下申請的資金,且能滿足該用戶全部剩餘需求時,需要判斷銀行家是否能夠找到一個支付序列,保障所有用戶最終在有限時間內得到貸款(這一點需要繼續研究需要執行安全檢查的必要性,找到一個反例)。

(6)當用戶得到所需的全部資金後,一定能在有限的時間內歸還所有的資金。


算法設計:

操作系統:銀行家

進程:用戶

操作系統管理的資源:資金

進程請求資源:用戶向銀行借貸資金

數據結構:

可用資源向量 Avaliable[];

最大需求矩陣:Max[][];

已分配資源矩陣:Allocation[][];

剩餘資源需求矩陣:Need[][];

當前請求向量: Request[];

算法描述:

當進程Pi發出資源請求後,系統按照如下步驟進行檢查:

(1)若Request[i]<need[i][],則執行步驟(2),否則系統告知申請資源數已超過進程要求的最大值報錯;

(2)若Request[i]<Avaliable[],則執行步驟(3),否則系統會因爲尚無足夠可用的資源滿足Pi的申請而使進程Pi等待;

(3)系統試探把資源分配給進程Pi,並修改相關數據結構數據:

Avaliable[]=Avaliable[]-Request[];

Allocation[i][]=Allocation[i][]+Request[i];

Need[i][]=Need[i][]-Request[i];

(4) 系統執行安全算法,檢查此次資源分配後,系統是否處於安全狀態。若是,則系統才真正將資源分配給Pi,否則系統將試探分配作廢,恢復原來的資源分配狀態,讓Pi等待。

安全算法:

 work:可用資源向量:

 finish:狀態向量:

 (1)  work[]=Avaliable[];

finish[]={false,false,...,false};

(2)找到一滿足下列條件的進程,finish[i]=false & need[i]<=work[];,若能夠找到,跳轉到步驟(3),找不到符合條件的進程,跳轉到步驟(4);

  (3) work[]=work[]+allocation[i][]; finish[i]= true;跳轉到步驟(2)

  (4) 判斷是否所有的finish[i]=true,若是,則系統處於安全狀態,否則,系統處於不安全狀態。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章