操作系統2.4.3 避免死鎖(銀行家算法)

一、什麼是安全序列

所謂的安全序列,就是指系統如果按照這種序列分配資源,則每個進程都能順利完成。只要能找出一個安全序列,系統就處於安全狀態。當然,安全序列可以有多個

 

二、安全序列、不安全狀態、死鎖的聯繫

如果分配資源後,系統中找不出任何一個安全序列,系統就進入了不安全狀態。這就意味着之後可能所有的進程都無法順利執行下去。

當然,如果有進程提前歸還了一些資源,那麼系統也有可能重新回到安全狀態,不過我們在分配資源之前總是要考慮到最壞的情況。

如果系統處於安全狀態,就一定不會發生死鎖

如果系統進入不安全狀態,就可能發生死鎖(處於不安全狀態未必發生死鎖,但發生死鎖一定是不安全狀態

因此,在資源分配之前先判斷這次分配是否會導致系統進入不安全狀態,以此來決定是否答應資源分配請求。這也就是銀行家算法的核心。

 

三、避免死鎖——銀行家算法

數據結構:

長度爲m的一位數組Available表示系統還有多少可用資源

n*m的矩陣Max表示各個進程對資源的最大需求數

n*m的矩陣Allocation表示對所有進程的資源分配情況

Max-Allocation=Need矩陣表示各個進程最多還需要多少資源

用長度爲m的一位數組Request表示進程此次申請的各種資源數

 

銀行家算法的步驟:

1)檢查此次申請是否超過之前聲明的最大需求數

2)檢查此時系統剩餘可用資源是否還能滿足此次請求

3)試探分配,更各個改數據結構

4)用安全型算法檢查此次分配是否會導致系統進入不安全狀態

 

安全性算法的步驟:

1)檢查當前剩餘可用資源是否能滿足某個資源的最大需求,如果可以,就將該進程加入安全序列

2)等到這個進程執行完畢就將它佔有的全部資源回收

3)不斷重複上述過程,看看最終是否能讓所有進程都加入安全序列

 

系統處於不安全狀態未必死鎖,但是死鎖一定處於不安全狀態。

系統處於安全狀態一定不會死鎖。

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