在多道程式系統中,由於多個程序的併發執行,改善了系統資源的利用率並提高了系統 的處理能力。然而,多個程序的併發執行也帶來了新的問題——死鎖。所謂死鎖是指多個進 程因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些程序都將無法向前推進。
下面我們通過一些例項來說明死鎖現象。
先看生活中的乙個例項,在一條河上有一座橋,橋面很窄,只能容納一輛汽車通行。如 果有兩輛汽車分別從橋的左右兩端駛上該橋,則會出現下述的衝突情況。此時,左邊的汽車 占有了橋面左邊的一段,要想過橋還需等待右邊的汽車讓出橋面右邊的一段;右邊的汽車佔 有了橋面右邊的一段,要想過橋還需等待左邊的汽車讓出橋面左邊的一段。此時,若左右兩 邊的汽車都只能向前行駛,則兩輛汽車都無法過橋。
在計算機系統中也存在類似的情況。例如,某計算機系統中只有一台印表機和一台輸入 裝置,程序p1正占用輸入裝置,同時又提出使用印表機的請求,但此時印表機正被程序p2 所占用,而p2在未釋放印表機之前,又提出請求使用正被p1占用著的輸入裝置。這樣兩個程序相互無休止地等待下去,均無法繼續執行,此時兩個程序陷入死鎖狀態。
1) 系統資源的競爭
通常系統中擁有的不可剝奪資源,其數量不足以滿足多個程序執行的需要,使得程序在 執行過程中,會因爭奪資源而陷入僵局,如磁帶機、印表機等。只有對不可剝奪資源的競爭 才可能產生死鎖,對可剝奪資源的競爭是不會引起死鎖的。
2) 程序推進順序非法
程序在執行過程中,請求和釋放資源的順序不當,也同樣會導致死鎖。例如,併發程序 p1、p2分別保持了資源r1、r2,而程序p1申請資源r2,程序p2申請資源r1時,兩者都 會因為所需資源被占用而阻塞。
訊號量使用不當也會造成死鎖。程序間彼此相互等待對方發來的訊息,結果也會使得這 些程序間無法繼續向前推進。例如,程序a等待程序b發的訊息,程序b又在等待程序a 發的訊息,可以看出程序a和b不是因為競爭同一資源,而是在等待對方的資源導致死鎖。
3) 死鎖產生的必要條件
產生死鎖必須同時滿足以下四個條件,只要其中任一條件不成立,死鎖就不會發生。
直觀上看,迴圈等待條件似乎和死鎖的定義一樣,其實不然。按死鎖定義構成等待環所 要求的條件更嚴,它要求pi等待的資源必須由p(i+1)來滿足,而迴圈等待條件則無此限制。 例如,系統中有兩台輸出裝置,p0占有一台,pk占有另一台,且k不屬於集合。
pn等待一台輸出裝置,它可以從p0獲得,也可能從pk獲得。因此,雖然pn、p0和其他 一些程序形成了迴圈等待圈,但pk不在圈內,若pk釋放了輸出裝置,則可打破迴圈等待, 如圖2-16所示。因此迴圈等待只是死鎖的必要條件。
資源分配圖含圈而系統又不一定有死鎖的原因是同類資源數大於1。但若系統中每類資 源都只有乙個資源,則資源分配圖含圈就變成了系統出現死鎖的充分必要條件。
產生死鎖的原因
產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則 就會因爭奪有限的資源而陷入死鎖。其次,程序執行推進順序與速度不同,也可能產生死鎖。產生死鎖的四個必要條件 1 互斥條件 乙個資源...
程序產生死鎖的原因
因為系統資源不足 資源分配不當 程序執行推進的順序不合適等。如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則就會因爭奪有限的資源而陷入死鎖。其次,程序執行推進順序與速度不同,也可能產生死鎖。只要系統發生死鎖,以下四個條件必然成立 互斥條件 乙個資源每次只能被乙個程序使用 ...
死鎖概念?產生死鎖必要條件?如何防止死鎖?
死鎖概念 所謂死鎖,是指兩個或者兩個以上執行緒在執行過程中,因爭奪資源而產生互相等待的現象,若無外力作用,他們都將無法推進下去,此時,稱系統處於死鎖。死鎖產生的四個必要條件 1 互斥條件 程序對所分配的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時,還有其它的程序請求該資源,則請...