天天看點

作業系統中不安全狀态為何并非一定轉為死鎖?

​ 這個問題出自與避免死鎖中的安全狀态和非安全狀态,在讨論之前,先來解釋下安全狀态和非安全狀态。

1.系統安全狀态

​ 所謂安全狀态,是指系統能夠按某種程序推進順序(P1,P2,…,Pn)為每個程序配置設定其所需資源,直至滿足每個程序對資源的最大需求,使每個程序都可順利的執行完成。其中程序的推進順序(P1,P2,…,Pn)被稱為安全序列。如果系統中能找到這樣一個安全序列,則稱系統處于安全狀态。

​ 如果系統中無法找到一個安全序列,則稱系統處于不安全狀态。

​ 我們通過一個例子來說明安全性。假定系統中有三個程序P1、P2和P3,共有12台錄音帶機。程序P1總共要求10台錄音帶機,P2和P3分别要求4台和9台。假設在T0時刻,程序P1、P2和P3已分别獲得5台、2台和2台錄音帶機,尚有3台空閑未配置設定,如下表所示:

作業系統中不安全狀态為何并非一定轉為死鎖?

​ 對于上題,我們可以知道T0時刻系統是安全的,因為這是存在一個安全序列(P2,P1,P3)。

​ 如果不按照安全序列配置設定資源,則系統可能會有安全狀态進入不安全狀态。例如在T0時刻後T1時刻,P3又請求一台錄音帶機,如果此時配置設定資源給程序P3,此時的資源配置設定如下表所示:

作業系統中不安全狀态為何并非一定轉為死鎖?

​ 我們可以看到,在T1時刻,無法找到一個安全序列,是以在T1時刻系統處于不安全狀态。

2.不安全狀态和死鎖的關系

​ 由上述描述,我們可以得出一個結論,隻要系統處于安全狀态,系統便不會進入死鎖狀态;但是另一句話:當系統處于不安全狀态時,并非所有不安全狀态都必然轉換為死鎖,就有點懵了。

作業系統中不安全狀态為何并非一定轉為死鎖?

​ 對于系統處于不安全狀态,為什麼不是一定會轉為死鎖狀态?按照死鎖的發生的四個必要條件:互斥條件、請求和保持條件、不可搶占條件、循環等待條件,隻要其中的一個條件不滿足就不會發生死鎖,這也是預防死鎖的理論依據。如果系統中已經設定了預防死鎖的政策,那麼死鎖就不會産生,也就不需要避免死鎖算法了,是以,設定了避免死鎖政策(或者說是銀行家算法)的OS,應當不會破壞四個必要條件中的任一個,這樣所施加的限制條件較弱,以期望獲得更好的系統性能。

​ 由上面的描述,我就在想,如果系統處于安全狀态,因為臨界資源的不可搶占性,高優先級程序也無法剝奪已經配置設定出去的程序,那麼系統是怎麼樣才可以讓如何推進都無法順利執行完畢的“死局”得到“一線生機”呢?

​ 經過自己的思考(通過結論推過程----’囧‘),和翻看了網上的許多讨論後,覺得以下幾點是比較靠譜的:

​ 可能一:程序在執行過程中,可能會提前終止。當程序處于不安全狀态的時候,因為OS目前資源緊缺或者程序執行過程發生異常,導緻某些程序沒有繼續申請資源而被終止(被kill或異常終止),這樣被終止的程序就會釋放資源,讓OS避開這次死鎖。

​ 可能二:程序在正常運作過程中,可能會提前釋放部分資源。這一點,可能有些同學會疑惑,是不是破壞了請求和保持條件?其實并沒有破壞了請求和保持條件,因為破壞請求和保持條件,需要OS必須保證做到:當一個程序在申請資源時,不得持有任何不可搶占資源,是以程序釋放掉自己持有的部分資源是沒有破壞請求和保持條件的。

​ 可能三:程序實際需要的最大資源小于聲明的最大需求資源。在安全性檢查算法中,使用的資料結構是需求矩陣Need和目前資源數Available,Need由最大需求矩陣Max減去已經配置設定的Allocation求得,Max是程序事先對自身所需資源的一個最壞情況下的預估(因為要滿足運作,必定是>=實際需要的),但是在實際執行的情況中,可能程序實際上用不到這麼多的資源,是以有可能就是這相差的資源數可以保證系統并非必然轉換為死鎖。

​ 可能四:程序申請的資源為可消耗性資源。這一點可能許多同學會懵,怎麼還跑出了這麼一個可消耗性資源的事,我們在資源分類的時候就講過,資源分為​​可重用性資源和可消耗性資源​​,對于可消耗性資源,是可以在程序運作過程中産生的(比如消息),是以對于某些阻塞的程序,雖然目前資源不足,但有可能在有限的時間内可以申請到得以運作完成的資源(可消耗性資源,由别的程序執行過程中産生),是以可以釋放掉自己持有的資源,讓其他程序是以也可以執行完畢。

​ 以上四點是我個人總結的幾點原因,個人感覺每種可能都對,檢視外文文檔,解釋偏向于可能三,不過部落客自己覺得一、二、四也是對的,畢竟答案不唯一,理論上可行就可以是答案。

3.總結

​ 以上所有觀點都是自己的個人觀點,如果有哪位大佬有不同的看法或者還有可能五、六、七,都歡迎評論區留言讨論,還請不吝賜教。

​ 又到了分隔線以下,本文到此就結束了,本文内容全部都是由部落客自己進行整理并結合自身的了解進行總結,如果有什麼錯誤,還請批評指正。

​ 本文純屬探讨理論上的可能,另,原創不易,如果能解答你的疑惑,還請點贊支援。

​ 如有興趣,還可以檢視我的其他幾篇部落格,都是OS的幹貨,喜歡的話還請點贊、評論加關注^_^。

繼續閱讀