作業系統學習 14 預防死鎖與死鎖解除

2021-08-14 17:51:29 字數 2232 閱讀 9842

如前所述,詳情見:作業系統學習-13.死鎖的原因與必要條件,預防死鎖和避免死鎖這兩種方法實質上都是通過施加某些限制條件,來預防發生死鎖。兩者的主要差別在於:為預防死鎖所施加的限制條件較嚴格,這往往會影響程序的併發執行;而為避免死鎖所施加的限制條件則較寬鬆,這給程序的執行提供了較寬鬆的環境,有利於程序的併發執行。

預防死鎖的方法是使四個必要條件中的第 2、3、4 個條件之一不能成立,來避免發生死鎖。至於必要條件 1,因為它是由裝置的固有特性所決定的,不僅不能改變,還應加以保證。

採用這種方法時,系統規定所有程序在開始執行之前,都必須一次性地申請其在整個執行過程所需的全部資源。此時,若系統有足夠的資源分配給某程序,便可把其需要的所有資源分配給該程序,這樣,該程序在整個執行期間便不會再提出資源要求,從而摒棄了請求條件。但在分配資源時,只要有一種資源不能滿足某程序的要求,即使其它所需的各資源都空閒,也不分配給該程序,而讓該程序等待。由於在該程序的等待期間,它並未占有任何資源,因而也摒棄了保持條件,從而可以避免發生死鎖。

優點是簡單、易於實現且很安全。缺點是資源被嚴重浪費、使程序延遲執行。

其原因是資源被嚴重浪費是因為乙個程序是一次性地獲得其整個執行過程所需的全部資源的,且獨佔資源,其中可能有些資源很少使用,甚至在整個執行期間都未使用,這就嚴重地惡化了系統資源的利用率;使程序延遲執行是因為僅當程序在獲得了其所需的全部資源後,才能開始執行,但可能因有些資源已長期被其它程序占用而致使等待該資源的程序遲遲不能執行。

採用這種方法時系統規定,程序是逐個地提出對資源的要求的。當乙個已經保持了某些資源的程序,再提出新的資源請求而不能立即得到滿足時,必須釋放它已經保持了的所有資源,待以後需要時再重新申請。這意味著某一程序已經占有的資源,在執行過程中會被暫時地釋放掉,也可認為是被剝奪了,從而摒棄了「不剝奪」條件。

這種預防死鎖的方法實現起來比較複雜且要付出很大的代價。因為乙個資源在使用一段時間後,它的被迫釋放可能會造成前段工作的失效,即使是採取了某些防範措施,也還會使程序前後兩次執行的資訊不連續。此外,這種策略還可能因為反覆地申請和釋放資源,致使程序的執行被無限地推遲,這不僅延長了程序的周轉時間,而且也增加了系統開銷,降低了系統吞吐量。

這種方法中規定,系統將所有資源按型別進行線性排隊,並賦予不同的序號。例如,令輸入機的序號為 1,印表機的序號為 2,磁帶機為 3,磁碟為 4。所有程序對資源的請求必須嚴格按照資源序號遞增的次序提出,這樣,在所形成的資源分配圖中,不可能再出現環路,因而摒棄了「環路等待」條件。事實上,在採用這種策略時,總有乙個程序佔據了較高序號的資源,此後它繼續申請的資源必然是空閒的,因而程序可以一直向前推進。

這種預防死鎖的策略與前兩種策略比較,其資源利用率和系統吞吐量都有較明顯的改善。存在嚴重問題:

(1)系統中各類資源所分配(確定)的序號必須相對穩定,這就限制了新型別裝置的增加。

(2)儘管在為資源的型別分配序號時,已經考慮到大多數作業在實際使用這些資源時的順序,但也經常會發生這種情況:即作業(程序)使用各類資源的順序與系統規定的順序不同,造成對資源的浪費。

(3)為方便使用者,系統對使用者在程式設計時所施加的限制條件應盡量少。然而這種按規定次序申請的方法,必然會限制使用者簡單、自主地程式設計。

在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統效能。在該方法中把系統的狀態分為安全狀態和不安全狀態,只要能使系統始終都處於安全狀態,便可避免發生死鎖。

1.安全狀態

在避免死鎖的方法中,允許程序動態地申請資源,但系統在進行資源分配之前,應先計算此次資源分配的安全性。若此次分配不會導致系統進入不安全狀態,則將資源分配給程序;否則,令程序等待。

所謂安全狀態,是指系統能按某種程序順序(p1,p2,…,pn)(稱〈p1,p2,…,pn〉序列為安全序列),來為每個程序 pi分配其所需資源,直至滿足每個程序對資源的最大需求,使每個程序都可順利地完成。如果系統無法找到這樣乙個安全序列,則稱系統處於不安全狀態。

雖然並非所有的不安全狀態都必然會轉為死鎖狀態,但當系統進入不安全狀態後,便有可能進而進入死鎖狀態;反之,只要系統處於安全狀態,系統便可避免進入死鎖狀態。因此,避免死鎖的實質在於:系統在進行資源分配時,如何使系統不進入不安全狀態。

當發現有程序死鎖時,便應立即把它們從死鎖狀態中解脫出來。常採用解除死鎖的兩種方法是:

(1) 剝奪資源。從其它程序剝奪足夠數量的資源給死鎖程序,以解除死鎖狀態。

(2) 撤消程序。最簡單的撤消程序的方法是使全部死鎖程序都夭折掉;稍微溫和一點的方法是按照某種順序逐個地撤消程序,直至有足夠的資源可用,使死鎖狀態消除為止。

下一節將學習避免死鎖的銀行家演算法,這也算是大名鼎鼎了,可以了解了解。此外,可以在此複習一下之前程序同步問題中的一些著名演算法:作業系統學習-7. 經典的程序同步問題。

作業系統學習 死鎖

記錄一些關於死鎖的知識。在一組程序發生死鎖的情況下,這組程序中的每乙個程序,都在等待另乙個程序所占有的資源。換句話說,每個程序所等待的事件是該組的其它程序釋放所占有的資源。1.互斥條件 程序對所分配的資源進行排它性的使用,即一段時間內,某個資源只能被乙個程序占用。2.請求和保持條件 程序已經保持了至...

作業系統學習筆記 死鎖

參考資料 現代作業系統 3th edtion 原書第六章 死鎖 在 xmind 上記錄 不可搶占資源 每種型別多個資源 如何恢復 利用回滾 殺死程序 本質上不可能 單個資源的銀行家演算法 多個資源的銀行家演算法 占有和等待 不可搶占 環路等待 注1 死鎖的規範定義 如果乙個程序集合中的每個程序都在等...

作業系統(十一) 死鎖的預防

下面我們來介紹,解決死鎖問題的各種方案 首先我們介紹第一種型別,叫做 死鎖預防 我們首先先總體介紹一下 解決死鎖問題的各種方法。不同的設計者 對於死鎖問題的看法是不一樣的 有的設計者很樂觀 有的設計者很悲觀 因此,他用於解決死鎖問題的方法,是不一樣的 我們總體上,有四種方法,來解決死鎖問題 第一種方...