死鎖產生的條件和處理死鎖的方法

2021-07-30 16:58:06 字數 1899 閱讀 4657

死鎖(deadlock)就是指兩個或兩個以上的程序在執行的過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去,此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。

若可能發生死鎖,則必定要出現三個條件:

1. 互斥條件:指程序對所分配的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直到占有資源的程序用完後釋放資源。

2. 占有且等待條件:指程序已經保持至少乙個資源,但又提出了新的資源請求,而該資源已被其他程序占有,此時請求程序阻塞,但它不會釋放自己已經占有的資源。

3.非搶占條件:指程序已經獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

滿足以上三個條件可能會產生死鎖,但如果只有這三個條件,則不一定產生死鎖。對死鎖的產生,還需要第四個條件。

4.迴圈等待條件存在乙個封閉的程序鏈,使得每個資源至少占有此鏈中下乙個程序所需要的乙個資源。

前三個條件是死鎖存在的必要條件,但不是充分條件。第四個條件實際上是前三個條件的潛在結果,即假設前三個條件存在,可能發生的一系列事情會導致不可解的迴圈等待。這四個條件連在一起構成了死鎖的充分必要條件。

有三種方法可以處理死鎖。

破壞「互斥「條件

就是在系統裡取消互斥。若資源不被乙個程序獨佔使用,那麼死鎖是肯定不會發生的。但一般來說,第乙個條件是不可能被禁止的,比如印表機等臨界資源只能互斥使用。

破壞「占有並等待」條件

就是在系統中不允許程序在已獲得某種資源的情況下,申請其他資源,要求程序一次性地請求所有需要的資源,並且阻塞這個程序直到所有請求都同時滿足。

這樣做有幾個個缺陷,會很低效:

破壞「非搶占「條件

如果占有某些資源的乙個程序進行進一步資源請求被拒絕,則該程序必須釋放它最初占用的資源,如果有必要,可再次請求這些資源和另外的資源。

另一種方法是,要求兩個程序不具有相同的優先順序時才能有效預防死鎖。即如果乙個程序請求當前另外乙個程序占有的乙個資源,則作業系統可以搶占另乙個程序,要求它釋放資源。

上述這兩種方法只有在資源狀態可以很容易地儲存和恢復的情況下(如處理器),比較實用。

破壞「迴圈等待「條件

迴圈等待條件可以通過定義資源型別的線性順序來預防。如果乙個程序已經分配到了r 型別的資源,那麼接下來請求的資源只能是那些排在r 型別之後的資源型別。

死鎖避免是屬於事先預防策略,但並不會事先採取某種措施破壞死鎖的必要條件,而是在資源動態分配過程中,防止系統進入不安全狀態,以避免發生死鎖。這種方法限制條件比較弱,可以獲得較好的系統效能。

最著名的死鎖避免演算法銀行家演算法

死鎖預防和死鎖避免嗾使以犧牲系統效率和浪費資源為代價的,這與作業系統的設計目標相違背。而死鎖檢測策略則完全相反,它不採取任何限制錯誤來保證系統不進入死鎖狀態,即允許死鎖發生,但作業系統不斷地監督程序的程序路徑,判斷死鎖是否真的發生,一旦死鎖發生,則採取專門的措施解除死鎖,並以最小代價使得整個系統恢復正常。

死鎖解除可分為以下兩類:

剝奪資源

撤銷程序

總結:死鎖是指一組爭用系統資源或相互通訊的程序被阻塞的現象。阻塞是永久的,除非作業系統採取某些非常的行動,如殺死乙個或多個程序,或者強迫乙個或多個程序沿原路返回。

處理死鎖通常有三種方法:預防、檢測和避免。死鎖預防通過確保死鎖的乙個必要條件不會滿足,保證不會發生死鎖。如果作業系統總是同一資源請求,則需要死鎖檢測。作業系統必須周期性地檢測死鎖,並採取行動破壞死鎖。

死鎖,死鎖的產生條件,死鎖的處理策略

死鎖 兩個或兩個以上的程序在執行過程中,因爭奪資源而產生互相等待的現象,若無外力作用,它們都將無法推進,此時系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。產生條件 1.互斥條件 乙個資源每次只能被乙個程序使用 2.請求與保持條件 乙個程序因請求資源而阻塞時,對已獲得的資源保...

死鎖產生的條件 排除死鎖的方法

問 請問程序排程中產生死鎖的必要條件是什麼?解決死鎖有幾種辦法 答 產生死鎖的四個必要條件 1 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。3 不剝奪條件 程序已獲得的資源,在末使用完之前,不能強行剝奪。4 迴圈等待條件 若干程序...

死鎖產生的條件 排除死鎖的方法

問 請問程序排程中產生死鎖的必要條件是什麼?解決死鎖有幾種辦法 答 產生死鎖的四個必要條件 1 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。3 不剝奪條件 程序已獲得的資源,在末使用完之前,不能強行剝奪。4 迴圈等待條件 若干程序...