死鎖的定義、必要條件和處理方法
死鎖的定義
多個程序在執行過程中,因爭奪同類資源且資源分配不當而造成的一種互相等待的現象,若無外力作用,它們都將永遠無法繼續執行,這種狀態稱為死鎖,這些處於等待狀態的程序稱為死鎖程序。
2、產生死鎖的必要條件
互斥條件:程序對所分配到的資源進行排他性使用,即一段時間內,某資源只能被乙個程序占用。如果此時還有其他程序請求該資源,則程序只能等待,直至占有資源的程序用畢釋放。
請求和保持條件:程序已經保持了至少乙個資源,但又提出了新的資源請求,而該資源已經被其他程序占有,此請求程序被阻塞,但對自己已獲得的資源保持不放。
不可搶占條件:程序已獲得的資源在未使用完成之前不能被搶占,只能在程序使用完成時由自己釋放。
迴圈等待條件:在發生死鎖時,必存在乙個程序——資源的迴圈鏈,即程序的集合中的p0正在等待p1占用的資源,p1正在等待p2占用的資源,……pn正在等待p0占用的資源。
3、處理死鎖的方法
1.預防死鎖:
這是一種較簡單和直觀的實現預防方法。該方法通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或幾個來預防產生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。
2.避免死鎖:
同樣是屬於事先預防策略,但它並不是事先採取各種限制措施,去破壞產生死鎖的四個必要條件,而是在資源的動態分配過程中,用某種方法防治系統進入不安全狀態,從而可以避免發生死鎖。
3.檢測死鎖:
這種方法無需事先採取任何限制性措施,允許程序在執行過程中發生死鎖。但可以通過檢測機構及時檢測出死鎖的發生,然後採取相應的措施,把程序從死鎖中解脫出來。
4.解除死鎖:
當系統檢測到系統中已經發生了死鎖時,就採取相應的措施,將程序從死鎖狀態中解脫出來。常用的方法就是撤消一些程序,**他們的資源,將他們分配給已處於阻塞狀態的程序,使其能繼續執行。
預防死鎖:
(1)破壞互斥條件
方法:允許系統資源都能共享使用,則系統不會進入死鎖狀態。
缺點:有些資源根本就不能被同時使用,如印表機資源,所以,破壞互斥條件而預防死鎖的方法不太可行,而且在有的場合應該保護這種互斥性。
(2)破壞請求保持條件
方法:釆用預先靜態分配方法,即程序在執行前一次申請完它所需要的全部資源,在它的資源未滿足前,不把它投入執行。一旦投入執行後,這些資源就一直歸它所有,也不再提出其他資源請求,這樣就可以保證系統不會發生死鎖。
缺點:系統資源被嚴重浪費,其中有些資源可能僅在執行初期或執行快結束時才使用,甚至根本不使用。而且還會導致「飢餓」現象,當由於個別資源長期被其他程序占用時,將致使等待該資源的程序遲遲不能開始執行。
(3)破壞不可搶占條件
方法:當乙個已保持了某些不可剝奪資源的程序,請求新的資源而得不到滿足時,它必須釋放已經保持的所有資源,待以後需要時再重新申請。這意味著,乙個程序已占有的資源會被暫時釋放,或者說是被剝奪了,或從而破壞了不可剝奪條件。
缺點:該策略實現起來比較複雜,釋放已獲得的資源可能造成前一階段工作的失效,反覆地申請和釋放資源會增加系統開銷,降低系統吞吐量。這種方法常用於狀態易於儲存和恢復的資源,如cpu的暫存器及記憶體資源,一般不能用於印表機之類的資源。
(4)破壞迴圈等待條件
方法:為了破壞迴圈等待條件,可釆用順序資源分配法。首先給系統中的資源編號,規定每個程序,必須按編號遞增的順序請求資源,同類資源一次申請完。也就是說,只要程序提出申請分配資源ri,則該程序在以後的資源申請中,只能申請編號大於ri的資源。
缺點:這種方法存在的問題是,編號必須相對穩定,這就限制了新型別裝置的增加;儘管在為資源編號時已考慮到大多數作業實際使用這些資源的順序,但也經常會發生作業使用資源的順序與系統規定順序不同的情況,造成資源的浪費;此外,這種按規定次序申請資源的方法,也必然會給使用者的程式設計帶來麻煩。
避免死鎖:
判斷系統安全狀態
在該方法中,允許程序動態的申請資源,但系統進行資源分配之前,應先計算此次資源分配的安全性。若此次分配資源不會導致系統進入不安全狀態,才可將資源分配給程序,否則,另程序等待。所謂安全狀態,是指系統能按某種程序推進順序為每個程序pi分配資源,直至滿足每個程序對資源的最大需求,使每個程序都可以順利地完成,此時為安全序列。如果無法找到這樣乙個安全序列,則稱系統處於不安全狀態。雖然並非所有不安全狀態都必然會轉為死鎖狀態,但當系統進入不安全狀態後,就有可能進入死鎖狀態,反之,只要系統處於安全狀態,系統便不會進入死鎖狀態。因此避免死鎖的實質在於,系統在資源分配時,應使系統不進入不安全狀態。
利用銀行家演算法避免死鎖:
1、申請的貸款額度不能超過銀行現有的資金總額
2、分批次向銀行提款,但是貸款額度不能超過一開始最大需求量的總額
3、暫時不能滿足客戶申請的資金額度時,在有限時間內給予貸款
4、客戶要在規定的時間內還款
死鎖的檢測:
資源分配圖
1.1畫出資源分配圖
系統死鎖,可利用資源分配圖來描述。如下圖所示,用長方形代表乙個程序,用框代表一類資源。由於一種型別的資源可能有多個,用框中的乙個點代表一類資源中的乙個資源。從程序到資源的有向邊叫請求邊,表示該程序申請乙個單位的該類資源;從資源到程序的邊叫分配邊,表示該類資源已經有乙個資源被分配給了該程序。
1.2簡化資源分配圖
第一步:
先看a資源,它有三個箭頭是向外的,因此它一共給程序分配了3個資源,此時,a沒有空閒的資源剩餘。
第二步:
再看b資源,它有乙個箭頭是向外的,因此它一共給程序分配了1個資源,此時,b還剩餘1個空閒的資源沒分配。
第三步:
看完資源,再來看程序,先看程序p2,它只申請乙個a資源,但此時a資源已經用光了,所以,程序p2進入阻塞狀態,因此,程序p2暫時不能化成孤立的點。
第四步:
再看程序p1,它只申請乙個b資源,此時,系統還剩餘乙個b資源沒分配,因此,可以滿足p1的申請。這樣,程序p1便得到了它的全部所需資源,所以它不會進入阻塞狀態,可以一直執行,等它執行完後,我們再把它的所有的資源釋放。相當於:可以把p1的所有的邊去掉,變成乙個孤立的點,如下圖所示:
第五步:
程序p1執行完後,釋放其所占有的資源(2個a資源和1個b資源),系統**這些資源後,空閒的資源便變成2個a資源和1個b資源,由於程序p2一直在申請乙個a資源,所以此時,系統能滿足它的申請。這樣,程序p2便得到了它的全部所需資源,所以它不會進入阻塞狀態,可以一直執行,等它執行完後,我們再把它的所有的資源釋放。相當於:可以把p2的所有的邊都去掉,化成乙個孤立的點,變成下圖:
若能消去圖中所有的邊,則稱該圖是可完全簡化的,如上圖
2.死鎖定理
①如果資源分配圖中沒有環路,則系統沒有死鎖;
②如果資源分配圖**現了環路,則系統可能有死鎖。
或者說:
當且僅當s狀態的資源分配圖是不可完全簡化的時候,系統狀態則是死鎖狀態。
死鎖的解除:
1、資源剝奪法
掛起某些死鎖程序,並搶占它的資源,將這些資源分配給其他的死鎖程序。但應防止被掛起的程序長時間得不到資源,而處於資源匱乏的狀態。
2、撤銷程序法
強制撤銷部分、甚至全部死鎖程序並剝奪這些程序的資源。撤銷的原則可以按程序優先順序和撤銷程序代價的高低進行。
3、程序回退法
讓一(多)個程序回退到足以迴避死鎖的地步,程序回退時自願釋放資源而不是被剝奪。要求系統保持程序的歷史資訊,設定還原點。
參考:作業系統第四版(西安電子科技大學出版社)
死鎖的必要條件
假設死鎖是由於程序競爭資源而引起的,我們下面給出死鎖發生的四個必要條件,這四個條件是 coffman首先提出的,所以也稱為coffman條件 1 資源獨佔 mutual exclusion 乙個資源在同一時刻只能分配給乙個程序.如果某一程序申請某一資源,而該資源正被另外某一程序所占有,則申請者需等待...
程序死鎖的概念,必要條件,處理方法
概念 1 多個併發程序因爭奪系統資源而產生相互等待的現象。2 是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當程序處於這種僵持狀態時,若無外力作用,它們都將無法 再向前推進 原理 當一組程序中的每個程序都在等待某個事件發生,而只有這組程序中的其他程序才能觸發該事件,這就稱這組程序發生了死鎖。產...
執行緒死鎖和死鎖的必要條件
如果乙個程序集合裡面的每個程序都在等待這個集合中的其他乙個程序 包括自身 才能繼續往下執行,若無外力他們將無法推進,這種情況就是死鎖,處於死鎖狀態的程序稱為死鎖程序 產生死鎖的四個必要條件?1 互斥條件 程序對所分配到的資源不允許其他程序進行訪問,若其他程序訪問該資源,只能等待,直至占有該資源的程序...