銀行家算法

銀行家算法:

當一個進程申請使用資源的時候,銀行家算法通過先 試探 分配給該進程資源,然後通過安全性算法判斷分配後的系統是否處於安全狀態,若不安全則試探分配作廢,讓該進程繼續等待。

判斷是否安全狀態

在這裏插入圖片描述

  1. 可利用資源向量Available。這是一個含有m個元素的數組,其中的而每一個元素代表一類可利用資源數目,其初始值是系統中所配置的該類全部可用資源的數目,其數值隨該類資源的分配和回收而動態的改變。如果Available[j]=K,則表示系統中現有Rj類資源K個。
  2. 最大需求矩陣Max。這是一個n*m的矩陣,它定義了系統中n個進程中的每一個進程對m類資源的最大需求。如果Max[i,j]=K;則表示進程i需要Rj類資源的最大數目爲K。
  3. 分配矩陣Allocation。這也是一個n*m的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。如果Allocation[i,j]=K,則表示進程i當前已分得Rj類資源的數目爲K。
  4. 需求矩陣Need。這也是一個n*m的矩陣,用以表示每一個進程尚需的各類資源數。如果Need[i,j]=K,則表示進程i還需要Rj類資源K個,方能完成任務。
詳細過程:
  1. 假設資源P1申請資源,銀行家算法先試探的分配給它(當然先要看看當前資源池中的資源數量夠不夠)

  2. 若申請的資源數量小於等於Available,然後接着判斷分配給P1後剩餘的資源,能不能使進程隊列的某個進程執行完畢

  3. 若沒有進程可執行完畢,則系統處於不安全狀態(即此時沒有一個進程能夠完成並釋放資源,隨時間推移,系統終將處於死鎖狀態)。

  4. 若有進程可執行完畢,則假設回收已分配給它的資源(剩餘資源數量增加),把這個進程標記爲可完成,並繼續判斷隊列中的其它進程,

  5. 若所有進程都可執行完畢,則系統處於安全狀態,並根據可完成進程的分配順序生成安全序列(如{P0,P3,P2,P1}表示將申請後的剩餘資源Work先分配給P0–>回收(Work+已分配給P0的A0=Work)–>分配給P3–>回收(Work+A3=Work)–>分配給P2–>······滿足所有進程)。

如此就可避免系統存在潛在死鎖的風險。

發佈了75 篇原創文章 · 獲贊 38 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章