(內容來自《現代作業系統》)
《現代作業系統》裡敘述了程序死鎖發生的四個必要條件:
1.互斥條件、每個資源要麼已經分配給了乙個程序,要麼就是可用的
2.占有和等到條件、已經得到了某個資源的程序可以再請求新的資源。
3.不可搶占條件。已經分配給乙個程序的資源不能強制性地被搶占,它只能被占有它的程序顯示地釋放。
4、環路等待條件。死鎖發生時,系統中一定有兩個或兩個以上的程序組成的一條環路,該環路中的每個程序都在等待著下乙個程序所占有的資源、
也就是說,當程序發生死鎖時,上面所說的四個條件移動同時滿足,那麼我們可以這樣說,當上面四個條件任意乙個不成立時,死鎖一定不會發生。那麼給我們的啟示是,我們可以通過破壞上述條件的方式來防止系統發生死鎖的事件。
其中乙個防止死鎖發生的辦法是"鴕鳥演算法"。該演算法的主要思想是,系統預設死鎖存在,並且允許死鎖的發生。但是當死鎖發生的時候,系統採取對策來破壞死鎖四個條件中的乙個來破壞死鎖,從而使程序繼續執行。
另乙個防止死鎖發生的演算法是有dijkstra提出的"銀行家演算法"。該演算法主要思想是讓系統預先收集程序執行過程中所需要的全部資源的資訊,然後通過一些優化演算法使能夠執行完成的程序繼續執行,讓其他程序因為資源不足進入等待狀態。然後已經執行完成了的程序會釋放它占有的資源,系統再把這些資源收集分配給下乙個可能執行完成的程序。"銀行家演算法"涉及到了系統對資源分配的兩種狀態,「安全狀態」和「不安全狀態」。「銀行家演算法」每次能夠為程序分配資源的前提是「分配完資源後這些程序進入安全狀態」,否則就不會為此程序分配資源,而是尋找其他合適的程序進行分配。
但是「銀行家演算法」應用很少,因為系統很少能夠提前得知所有程序所需要的全部資源有多少,並且程序數也不是固定的,所以該演算法實際應用不樂觀。
什麼情況會發生死鎖,死鎖的處理方法
如兩個程序分別等待對方占有的資源,於是兩個程序都不能執行而處於等待狀態,此執行緒稱為死鎖。程序的三態模型 就緒態 leftrightarrow 執行態 to 等待態 to 就緒態 程序的五態模型 建立程序 to 就緒態 leftrightarrow 執行態 to 等待態 to 就緒態 執行態 to ...
死鎖發生的條件
作業系統中關於競爭和死鎖的關係下面描述正確的是?競爭一定會導致死鎖 死鎖一定由競爭引起 競爭可能引起死鎖 預防死鎖可以防止競爭 產生死鎖的原因主要是 1 因為系統資源不足。2 程序執行推進的順序不合適。3 資源分配不當等。如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則 ...
死鎖的產生與處理
三.死鎖處理 在生產者 消費者模型中可能出現的問題 在該模型中,我們設定了兩組訊號量,一組用來表示可呼叫資源的個數,另一組用來保證程序互斥。如果我們將互斥訊號量mutex和資源訊號量empty,full按照圖示順序編寫,就可能導致死鎖的產生。我們不妨設當前資源訊號量為0,那麼我就說執行生產者程序時,...