1 產生死鎖的原因
(1)競爭資源。程序競爭數量不足的資源。
(2)程序間推進順序非法。程序請求和釋放資源的順序不當。
2 產生死鎖的必要條件
(1)互斥條件
程序對分配到的資源進行排他性使用,即在一段時間內某資源只由乙個程序占用。
(2)請求和保持條件
程序在保持了至少乙個資源的時候提出了新的資源請求,但該資源已被其它程序占有,而自己又對已經獲得的資源不釋放。
(3)不剝奪條件
程序已獲得的資源,在未使用完之前,不能被剝奪。
(4)環路等待條件
發生死鎖時存在乙個程序—資源的環形鏈。程序集合中,p0等待p1占用的資源,p1等待p2占用的資源,......,pn等待p0占用的資源。
3 處理死鎖的方法
3.1 預防死鎖
設定某些限制條件,破壞產生死鎖的四個必要條件中的乙個或幾個條件。
(1)摒棄「請求和保持條件」條件
系統規定所有程序在開始執行之前,都必須一次性地申請其在整個執行過程所需的全部資源。
缺點:嚴重浪費資源,使程序延遲執行。
(2)摒棄「不剝奪」條件
當乙個已經保持了某些資源的程序,再提出新的資源請求而不能立即得到滿足時,必須釋放它保持了的所有資源,待以後需要時再重新申請。
缺點:實現複雜,要付出很大代價。資源的釋放會造成前段工作實效。
(3)摒棄「環路等待」條件
系統將所有資源按型別進行線性排隊,並賦予不同的序號。如:輸入機1,印表機2,磁帶機3,磁碟4。所有程序對資源的請求必須嚴格按照資源序號遞增的次序提出。
缺點:系統中資源的序號必須相對穩定,這就限制了新型別裝置的增加。另外,程序使用各類資源的順序可能和系統規定的申請順序不同,造成對資源的浪費。
3.2 避免死鎖
防止系統進入不安全狀態,從而避免發生死鎖。
安全狀態:
存在一種程序順序 ,系統能按照此順序(安全序列)來為每個程序pi分配其所需要的資源,直至滿足每個程序對資源的最大需求,使每個程序都可以順利完成。
不安全狀態:
不存在這樣的安全序列。
銀行家演算法:
當程序pi發出資源請求後,系統試探著把資源分配給pi,並判斷分配後的狀態是否為安全狀態。如果安全,才正式將資源分配給pi,如果不安全,則恢復原來的資源分配狀態,讓程序pi等待。
判斷安全狀態的方法:
從程序集合中找到乙個能滿足其資源需求的程序,給它分配資源,等其完成後可**其擁有的資源。然後再不斷迴圈。若最後所有程序都可以順利執行完成,則當前狀態為安全狀態,否則為不安全狀態。
3.3 檢測死鎖
允許系統發生死鎖,但可以檢測出死鎖的發生。
資源分配圖
e=是資源請求邊,由程序pi指向資源rj,它表示程序pi請求乙個單位的資源rj。e=是資源占有邊,由資源rj指向程序pi,它表示程序pi占有乙個單位的資源rj。
每次找出在占有和請求的約束下,能順利完成的程序pi,消去其所有的請求和占有資源的邊。若最後所有的程序都成為孤立點,則當前狀態為安全狀態;否則為不安全狀態。
3.4 解除死鎖
當檢測到系統發生死鎖時,撤銷或掛起一些程序,以便**一些資源,再將這些資源分配給處於阻塞狀態的程序,使之轉為就緒狀態,繼續執行。
程序死鎖的概念,必要條件,處理方法
概念 1 多個併發程序因爭奪系統資源而產生相互等待的現象。2 是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當程序處於這種僵持狀態時,若無外力作用,它們都將無法 再向前推進 原理 當一組程序中的每個程序都在等待某個事件發生,而只有這組程序中的其他程序才能觸發該事件,這就稱這組程序發生了死鎖。產...
處理死鎖和預防死鎖的方法
目前,處理死鎖的方法可歸結為以下四種 1 預防死鎖。這是一種較為簡單和直觀的事先預防的方法。該方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或幾個條件,來預防發生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。但由於所施加的限制條件往往太嚴格,因而可能導致系統資源利用率和系統吞吐...
OS 死鎖的處理方法
將死鎖比喻成火災,處理死鎖的方法同樣可以模擬處理火災,從而將處理死鎖分為預防 避免 檢測與恢復四個方面。預防的目的就是從源頭杜絕死鎖的發生,確保系統永遠都不會進入死鎖狀態。針對coffman的死鎖發生的4個必要條件,從這4個必要條件入手,可以得出預防死鎖的具體方法。1.破壞互斥條件 如果乙個資源不會...