目前,處理死鎖的方法可歸結為以下四種:
1)預防死鎖。這是一種較為簡單和直觀的事先預防的方法。該方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或幾個條件,來預防發生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。但由於所施加的限制條件往往太嚴格,因而可能導致系統資源利用率和系統吞吐量降低。
2)避免死鎖。該方法同樣是屬於事先預防策略,但它並不需要事先採取各種限制措施去破壞產生死鎖的四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。這種方法只需事先施加較弱的限制條件,便可獲得較高的資源利用率及系統吞吐量,但在實現上有一定的難度。目前在較完善的系統中常用此方法來避免發生死鎖。
3)檢測死鎖。這種方法並不需要事先採取任何限制性措施,也不必檢查系統是否已經進入不安全區,而是允許系統在執行過程中發生死鎖。但可通過系統所設定的檢測機構,及時的檢測出死鎖的發生,並精確的確定與死鎖有關的程序和資源;然後採取適當措施從系統中將已發生的死鎖清除掉。
4)解除死鎖。這是與檢測死鎖相配套的一種措施。當檢測到系統中已經發生死鎖時,將程序從死鎖狀態中解脫出來。常用的方法是撤銷或掛起一些程序,以便**一些資源,再將這些資源分配給已經處於阻塞狀態的程序,使之轉為就緒態,以繼續執行。死鎖的檢測和解除措施有可能使系統獲得較好的資源利用率和吞吐量,但是實現上難度也最大。
預防死鎖和避免死鎖這兩種方法實質上都是通過施加某些限制條件,來預防發生死鎖。兩者的主要差別在於:為預防死鎖所施加的限制條件比較嚴格,這往往會影響程序的併發執行;而為避免死鎖所加的限制條件則比較寬鬆,這給程序的執行提供了較寬鬆的環境,有利於程序的併發。
一、預防死鎖
預防死鎖的方法是使四個必要條件中的第2、3、4個條件之一不能成立,來避免發生死鎖。至於必要條件1,因為它是由裝置的固有特性所決定的,不僅不能改變,還應加以保證。
1)摒棄「請求和保持」條件
在採用這種方法時,系統規定所有程序在開始執行之前,都必須一次性的申請其在整個執行過程所需的全部資源。此時,若系統有足夠的資源分配給某程序,便可把其需要的所有資源分配給程序,這樣,該程序在整個執行期間便不會再提出資源要求,從而摒棄了請求條件。但在分配資源時,只要有一種資源不能滿足某程序的要求,即使其它所需各資源都空閒,也不分配給該程序,而讓該程序等待。由於在該程序的等待期間,它並未占用任何資源,因而也摒棄了保持條件,從而避免發生死鎖。
這種方法的缺點是:首先表現為資源被嚴重浪費,因為乙個程序是一次性地獲得其整個執行過程中所需的全部資源的,且獨佔資源,其中可能有些資源很少用,甚至在整個執行期間都未使用,這就嚴重的惡化了系統資源的利用率;其次是使程序延遲執行,僅當程序在獲得了其所需的全部資源後,才能開始執行,但可能因有些資源已長期被其它程序占用而使等待該資源的程序遲遲不能執行。
2)摒棄「不剝奪」條件
在採用這種方法時系統規定,程序是逐個地提出對資源的要求的。當乙個已經保持了某些資源的程序,再提出新的資源請求而不能立即滿足時,必須釋放它已經保持了的所有資源,待以後需要時再重新申請。這意味著某一程序已經占有的資源,在執行過程中會被佔時釋放掉,也可認為是被剝奪了,從而摒棄了「不剝奪」條件。
3)摒棄「環路等待」條件
這種方法中規定,系統將所有資源按型別進行線性排隊,並賦予不同的序號。例如,令輸入機的序號為1,印表機的序號為2,磁帶機為3,磁碟為4.所有程序對資源的請求必須嚴格按照資源序號遞增的次序提出,這樣,在所形成的資源分配圖中,不可能再出現環路,因而摒棄了「環路等待」條件。
二、系統安全狀態
在該方法中把系統的狀態分為安全狀態和不安全狀態,只要能使系統始終處於安全狀態,便可避免發生死鎖。
1.安全狀態
在避免死鎖的方法中,允許程序動態的申請資源,但系統在進行資源分配之前,應先計算此次資源分配的安全性。若此次分配不會導致系統進入不安全狀態,則將資源分配給程序,否則,令程序等待。
所謂安全狀態,是指系統能按某種程序順序(p1,p2,……,pn)(稱序列為安全序列),來為每個程序pi分配其所需資源,直至滿足每個程序對資源的最大需求,使每個程序都可以順利完成。如果系統無法找到這樣乙個安全序列,則稱系統處於不安全狀態。
雖然並非所有的不安全狀態都必然會轉為死鎖狀態,但當系統進入不安全狀態後,便有可能進而進入死鎖狀態;反之,只要系統處於安全狀態,系統便可避免進入死鎖狀態。因此,避免死鎖的實質在於:系統在進行資源分配時,如何使系統不進入不安全狀態。
2.安全狀態之例
假定系統中有三個程序p1、p2和p3,共有12臺磁帶機。程序p1總共要求10臺磁帶機,p2和p3分別要求4臺和9臺。假設在t0時刻,程序p1、p2和p3已分別獲得5臺、2臺和2臺磁帶機,尚有3臺空閒未分配,如下表所示:
經分析發現,在t0時刻系統是安全的,因為這時存在乙個安全序列《p2,p1,p3》,即只要系統按此程序序列分配資源,就能使每個程序都順利完成。例如,將剩餘的磁帶機取2臺分配給p2,使之繼續執行,待p2完成,便可釋放出4臺磁帶機,於是可用資源增至5臺;以後再將這些全部分配給程序p1,使之執行,待p1完成後,將釋放出10臺磁帶機,p3便能獲得足夠的資源,從而使p1、p2、p3每個程序都能順利完成。
3.由安全狀態向不安全狀態的轉換。
如果不按照安全序列分配資源,則系統可能會由安全狀態進入不安全狀態。例如在t0時刻以後,p3又請求1臺磁帶機,若此時系統把剩餘3台中的1臺分配給p3,則系統便進入不安全狀態。因為此時無法再找到乙個安全序列,例如,把剩餘的2臺分配給p2,這樣,在p2完成後只能釋放出4臺,既不能滿足p1尚需5臺的要求,也不能滿足p3尚需6臺的需求,致使它們都無法推進前行,彼此都在等待對方釋放資源,即陷入僵局,結果導致死鎖。類似地,如果我們將剩餘的兩台磁帶機先分配給p1或p3,也同樣都無法使它們推進完成,因此,從給p3分配了第三台磁帶機開始,系統便又進入了不安全狀態。由此可見,在p3請求資源時,儘管系統中尚有可用的磁帶機,但卻不能分配給它,必須讓p3一直等待到p1和p2完成,釋放出資源後再將足夠的資源分配給p3,它才能順利完成。
三、利用銀行家演算法避免死鎖
死鎖的產生和預防死鎖
1,死鎖的定義 死鎖是指多個進 程因競爭資源而造成的一種僵局 互相等待 若無外力作用,這些程序都將無法向前推進。2,死鎖產生的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。3,死鎖產生的必要條件 1 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 ...
死鎖 死鎖的預防和避免
死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由死鎖的定義可知,死鎖主要是由於競爭資源引起的,那麼這裡的資源指的是哪些資源呢?系統中的資源...
產生死鎖的條件和預防死鎖的方法
產生死鎖的條件 互斥條件 指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。請求和保持條件 指程序已經保持至少乙個資源,但又提出了新的資源請求,而該資源已被其它程序占有,此時請求程序阻塞,但又對自己...