什麼是死鎖
程序死鎖、飢餓、死迴圈的區別
死鎖產生的必要條件
什麼時候會發生死鎖
死鎖的處理策略
在併發環境下,各程序因競爭資源而造成的一種互相等待對方手裡的資源,導致各程序都阻塞,都無法向前推進的現象,就是「死鎖
發生死鎖後若無外力干涉,這些程序都將無法向前推進
死鎖:各程序互相等待對方手裡的資源,導致各程序都阻塞,無法向前推進的現象。
飢餓:由於長期得不到想要的資源,某程序無法向前推進的現象。比如:在短程序優先(spf) 演算法中,若有源源不斷的短程序到來,則長程序將一直 得不到處理機,從而發生長程序「飢餓」。
死迴圈:某程序執行過程中一直跳不出某個迴圈的現象。有時是因為程式邏輯bug導致的,有時是程式設計師故意設計的。
產生死鎖必須同時滿足以下四個條件,只要其中任一條件不成立,死鎖就不會發生。
互斥條件:只有對必須互斥使用的資源的爭搶才會導致死鎖( 如哲學家的筷子、印表機裝置)。像記憶體、揚聲器這樣可以同時讓多個程序使用的資源是不會導致死鎖的(因為程序不用阻塞等待這種資源)。
不剝奪條件:程序所獲得的資源在未使用完之前,不能由
其他程序強行奪走,只能主動釋放。
請求和保持條件:程序已經保持了至少乙個資源,但又提出了新的資源請求,而該資源又被其他程序占有,此時請求程序被阻塞,但又對自己已有的資源保持不放。
迴圈等待條件:存在一種程序資源的迴圈等待鏈,鏈中的每乙個程序已獲得的資源同時被下乙個程序所請求。
注意!發生死鎖時一定有迴圈等待,但是發生迴圈等待時未必死鎖
如果同類資源數大於1,則即使有迴圈等待,也未必發生死鎖。但如果系統中每類資源都只有乙個,那迴圈等待就是死鎖的充分必要條件了。
1.對系統資源的競爭。各程序對不可剝奪的資源( 如印表機)的競爭可能引起死鎖,對可剝奪的資源(cpu)的競爭是不會引起死鎖的。
2.程序推進順序非法。請求和釋放資源的順序不當,也同樣會導致死鎖。例如,併發執行的程序p1、p2分別申請並占有了資源r1、r2,之後程序p1又緊接著申請資源r2,而程序p2又申請資源r1,兩者會因為申請的資源被對方占有而阻塞,從而發生死鎖。
3.訊號量的使用不當也會造成死鎖。如生產者–消費者問題中,如果實現互斥的p操作在實現同步的p操作之前,就有可能導致死鎖。(可以把互斥訊號量、同步訊號量也看做是一種抽象的系統資源)
總之,對不可剝奪資源的不合理分配,可能導致死鎖。
1.預防死鎖。破壞死鎖產生的四個必要條件中的乙個或幾個。
2.避免死鎖。用某種方法防止系統進入不安全狀態,從而避免死鎖( 銀行家演算法)
3.死鎖的檢測和解除。允許死鎖的發生,不過作業系統會負責檢測出死鎖的發生,然後採取某種措施解除死鎖。
死鎖的概念
死鎖產生的必要條件 死鎖的處理策略 總結 死鎖 各程序互相等待對方手裡的資源,導致各程序都阻塞,無法向前推進的現象。飢餓 由於長期得不到想要的資源,某程序無法向前推進的現象。比如 在短程序優先 spf 演算法中,若有源源不斷的短程序到來,則長程序將一直得不到處理機,從而發生長程序 飢餓 死迴圈 某程...
死鎖的相關概念
1.死鎖是指多個程序迴圈等待它方占有的資源而無限期地僵持下去的局面,產生死鎖的根本原因是資源有限並且操作不當 2.產生死鎖的4個必要條件 互斥條件 不可搶占條件 占有並且申請條件和迴圈等待條件 3.死鎖的預防 只要破壞四個必要條件中的任意乙個,死鎖就不會發生,也就是說,打破互斥條件 打破不可搶占條件...
10 死鎖概念
死鎖概念 死鎖 指多個程序因競爭共享資源而造成的一種僵局,若無外力作用,這些程序都將永遠不能再向前推進 example 系統有兩個磁帶裝置 程序p1和p2各占有乙個磁帶裝置並且實際需要兩個磁帶 乙個生動的例子 死鎖的避免 死鎖的避免概述 該方法執行程序動態地申請資源,系統在進行資源分配之前,先計算資...