西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)其它知識 → 什么叫死鎖?產(chǎn)生死鎖的條件和預(yù)防死鎖的各種方法

什么叫死鎖?產(chǎn)生死鎖的條件和預(yù)防死鎖的各種方法

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2013/3/3 20:52:02字體大小:A-A+

作者:西西點擊:0次評論:1次標簽: 死鎖

  • 類型:編程工具大。39.6M語言:中文 評分:5.0
  • 標簽:
立即下載

什么叫死鎖?
所謂死鎖: 是指兩個或兩個以上的進程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,它們都將無法推進下去。

那么為什么會產(chǎn)生死鎖呢?
1.因為系統(tǒng)資源不足。
2.進程運行推進的順序不合適。
3.資源分配不當。

1、產(chǎn)生死鎖的四個必要條件并舉個例子說明死鎖的產(chǎn)生

首先我們要明白死鎖的定義,死鎖是兩個或多個進程對資源的需求引起的沖突,可以做個比喻,就像一根獨木橋上有兩個人迎面走,相遇時,都在等著對方讓路,但是誰也不同意退回去讓對方先走,導致誰也到不了對岸。兩個人就是兩個程序,他們都占有橋這個資源不愿放手,于是便一直處于等待狀態(tài)。

死鎖的產(chǎn)生有四個必要條件:

①互斥使用(資源獨占),任意時間內(nèi)進程對其占有的資源有排他控制性,其它申請的進程必須等待

②非剝奪控制,除非是進程自動放棄對資源的占有,否則其他進程無法強制使其釋放,即使它處于阻塞態(tài)

③零散請求,即進程可根據(jù)自己的需求在不同的時間發(fā)出申請,而不必集中在一起申請,當申請不到資源時,也不會改變其原先占有的資源

④循環(huán)等待,等待資源的進程形成了一個封閉的鏈,鏈中進程都在等待下一進程結(jié)束,陷入了無休止的等待當中

四個條件,破壞其一,就不屬于死鎖了

比如說有兩個進程A和B,當前A占有打印機,B占有磁帶,而它們又同時申請對方占有的設(shè)備,結(jié)果兩個進程的申請都得不到滿足,就進入了無休止的等待,形成死鎖。

2、預(yù)防死鎖的各種方法

預(yù)防死鎖方法的得來是源自于它的四個必要條件

①破壞互斥條件:讓資源允許共享,如SPOOLing技術(shù)就可以允許若干個進程同時產(chǎn)生打印數(shù)據(jù),但是類似于SPOOLing的技術(shù)并不適用于所有的資源,如進程表等,所以破壞資源的互斥性是比較困難的,該方法并不是很好

②破壞不可剝奪條件:有兩種方法,一種是當其申請的資源得不到滿足時,也必須放棄其原先占有的資源;另一種方法是只適用于申請資源的進程優(yōu)先級比占有該資源的進程優(yōu)先級高時,如果一個進程申請的資源被其它進程占用,而申請進程的優(yōu)先級較高,那么它可以強迫占有資源的進程放棄。這種方法一般適用于處理機和存儲資源。

③破壞零散請求條件:一般采用靜態(tài)分配策略,靜態(tài)分配是指當一個進程在得到其所需要的所有資源之后才執(zhí)行。采取這種機制,那么進程在執(zhí)行過程中就不再申請資源了,但這種方法的效率極低,資源無法得到充分的利用。

④破壞循環(huán)等待條件:可以按照資源的特性,給資源從小到大編號,進程必須按照從小到大的順序申請資源,且規(guī)定進程占有的資源號必須小于申請的資源號才能提出申請

這里我們可以用這種方法來解決一個哲學家就餐問題:

該問題是Dijkstra在1968年提出的,如圖,在一個圓餐桌上有5份通心粉,間隔放有5把叉子,5個哲學家各自坐在一盤通心粉前。哲學家思考時,他們不作任何動作。當他們饑餓的時候,必須同時手拿兩把叉子才能吃到通心粉,而且只能取得自己左手邊和右手邊的叉子。吃完后,叉子放回。

我們可以把五個哲學家比喻成五個進程,五把叉子就是五種資源。當哲學家們吃東西的時間相繼發(fā)生時,那么每個人都可以吃到通心粉,但是若他們同時感到饑餓,并同時拿起手邊的一把叉子,那么有可能五個人都因無法再取得一把叉子而永遠吃不到通心粉,這就是“死鎖”問題。那么我們?nèi)绾芜\用“破壞循環(huán)等待”法來解決它呢?

我們可以給五把叉子依次編號為0~4,規(guī)定哲學家必須先拿小號叉子,再拿大號叉子,若小號叉子被占用,他就進入阻塞態(tài)。這樣的話,即使五個哲學家同時伸出左手,那么第4號哲學家應(yīng)該先拿0號叉子,但是0號叉子被第一個哲學家所占據(jù),所以,4號哲學家就會因無法占有0號叉子從而無法申請4號叉子,進入了阻塞態(tài)。那么拿3號叉子的哲學家可以申請拿4號叉子,從而先吃完通心粉,釋放其占據(jù)的叉子,喚醒其他哲學家進程,以此類推,大家都可以吃完通心粉。問題得到解決~

3、資源分配圖的化簡

①檢查圖中有無環(huán)路,如果沒有,系統(tǒng)不會發(fā)生死鎖,結(jié)束檢測,如果有環(huán)路,繼續(xù)第②步

②若環(huán)路中設(shè)計的每個資源類只有一個資源,那么系統(tǒng)一定是死鎖,若每個資源類有多個資源,可進行第③步

③在環(huán)路中找到非阻塞非獨立的進程Pi,且滿足|(Pi,Ri)|+∑|(Ri,Pi)|<=M(注:(Pi,Ri)表示進程Pi向資源Ri的申請個數(shù),(Ri,Pi)是 資源Ri給進程Pi分配的資源個數(shù)),即它可以在有限的時間內(nèi)將申請獲得的資源執(zhí)行完畢。找到進程之后,把與該進程相連的有向邊全部去掉,形成孤立結(jié)點。反復執(zhí)行步驟③,知道沒有進程可被簡化。

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)