1. 程式人生 > >作業系統:銀行家演算法避免死鎖

作業系統:銀行家演算法避免死鎖

銀行家演算法是用來避免死鎖的,該方法將系統的狀態分為安全和不安全,只要系統處於安全狀態,便可避免死鎖的發生。之所以成為銀行家演算法,是由於該演算法能用於銀行系統現金貸款的發放而得名。

安全狀態的定義為:系統按照某種程序順序,如,來為程序分配資源,直到最大需求,使每個程序都能順序完成,此時稱系統處於安全狀態。

銀行家演算法是由大牛Dijkstra提出的,為實現銀行家演算法,系統中應該設定若干資料結構:

1)可用資源向量Available

2)最大需求矩陣Max

3)分配矩陣Allocation

4)需求矩陣Need

其中Need=Max-Allocation

當程序pi發出資源請求Requesti後,系統將按銀行家演算法執行檢測,並決定是否將資源分配給pi程序,具體如:

1)如果Requesti<=need,執行2),否則認為出錯

2)如果Requesti<=Available,執行3),否則程序必須等待

3)試探分配

Available[j]=Available[j]- Requesti[j];

Allocation[i,j]=Allocation[i,j]+Requesti[j];

Nedd[i,j]=Nedd[i,j]-Requesti[j];

4)系統執行安全檢測演算法,檢測此次資源分配後系統是否處於安全狀態,若安全則分配該程序資源,否則本次試探資料作廢,程序pi等待

安全檢測演算法如下:

1)設定兩個工作向量:工作向量work其初值為Available表示系統可提供給程序繼續執行的各類資源數,工作向量finish其初值為false表示是否有足夠的資源分配給各程序,以使其順利完成。

2)從程序中找到一個序列使其順序執行時,能滿足如下條件:

finish[i]=false;

need<=work;

3)當程序獲得資源順序執行,直至完成,並釋放出分配給它的資源,故應執行

work[j]=work[j]-allocation[i,j];

finish[i]=true;

4)若找到一個序列滿足finish=true,則表示系統處於安全狀態,否則處於不安全狀態。