#61.死锁
概念:
死鎖是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。
通俗的說:死鎖是一種兩個或者兩個以上進程阻塞的現象,而且這種現象如果沒有外力作用,進程就永遠無法推進下去。
導致死鎖的原因:
競爭的資源有限+進程推進順序不當
死鎖的4個必要條件:
1.互斥條件
資源的排他性
一個碗只能讓一個人擁有
2.請求和持續條件
進程保持著資源的同時,又申請新的資源,而且申請的資源被占用時,它在等待的時候不放棄自己的其他資源。
典型的**吃著碗里的看著鍋(別人碗里)**里的。
3.不剝奪條件
進程已經獲得的資源,只能自己釋放,不能被剝奪。
碗里的只能我自己不吃給你們,不然你們不能搶。
4.環路等待條件
進程-資源環形鏈。
我自己碗里有,但是我申請你的碗,你申請第三個人的碗,第三個人申請第四個……最后一個人要申請我碗里的。
1.一個碗只能讓一個人用。
2.我申請吃你碗里的,我自己碗里的不能給別人,然后等著吃你碗里的。
3.你不給我吃我不能搶。
4.人碗鏈。
處理死鎖的四種基本辦法:
1.預防死鎖
通過設置某些限制條件,去破壞死鎖的必要條件的一個或者多個條件,來預防。
優點:容易實現
缺點:但是限制條件嚴格,會降低系統的資源利用率和吞吐量。
2**.避免**死鎖
不采取事前的限制條件,而是在資源的動態分配中,用某種方法去阻止系統進入不安全狀態
優點:較弱的限制,較高資源利用率
缺點:較難實現,難度在于計算資源分配的安全性
打個比方:預防和避免死鎖 預防就像是說 最近股市不太好,我直接賣了,沒啥風險。好處就是容易實現,壞處就是我最近可能賺不到錢。
避免就高級了,我知道股市不好,但是我覺得還不到時間,所以我采取了邊走邊看。 這個方法好處就是:我可能還能賺到錢,壞處就是難度太大了。
3.檢測死鎖
允許發生死鎖,檢測出死鎖,然后確定相關進程和資源。
4.解除死鎖
把進程從死鎖狀態解脫出來。
撤銷或掛起進程。
總結
- 上一篇: 59.进程的三种状态,以及之间转换的过程
- 下一篇: 60.进程调度算法