操作系統中不安全狀態爲何並非一定轉爲死鎖?

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

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.關於死鎖定理的討論

​ 另,這裏也討論一下死鎖定理:S爲死鎖狀態的充分條件是:當且僅當S狀態的資源分配圖是不可完全簡化的(其中S爲OS在某一時刻的狀態)。對於這句話,許多同學都理解錯了,死鎖定理實際的推導關係爲:S爲死鎖狀態==>S狀態的資源分配是不可完全簡化。

​ 對於死鎖檢測使用的方法:當資源分配圖不可完全簡化時,就認定系統處於死鎖狀態。其實是不一定對的,即當資源分配不可完全簡化時,系統並非一定轉換爲死鎖狀態。其原因和上面的不安全狀態相似,這也是爲什麼要把這裏不是充要條件放到這裏一起討論。

4.總結

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


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

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

​ 如有興趣,還可以查看我的其他幾篇博客,都是OS的乾貨,喜歡的話還請點贊、評論加關注^_^。

操作系統武功修煉心法

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