死鎖

計算機程序運行時需要調度和使用各種資源,其包括軟的資源(如程序代碼)和硬的資源(如掃描儀、打印機等)。資源一般可以分兩種:可剝奪資源(Preemptable)和不可剝奪資源(Nonpreemptable)。一般來說對於由可剝奪資源引起的死鎖可以由系統的重新分配資源來解決,所以一般來說大家說的死鎖都是由於不可剝奪資源所引起的。


死鎖是指兩個或兩個以上的進程在執行過程中,因競爭不可剝奪資源而形成的一種互相等待的現象,若無外力作用它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖。


死鎖的四個必要條件

1.互斥條件(Mutual exclusion):資源不能被共享,只能由一個進程使用。

2.請求與保持條件(Hold and wait):已經得到資源的進程可以再次申請新的資源。

3.非剝奪條件(No pre-emption):已經分配的資源不能從相應的進程中被強制地剝奪。

4.循環等待條件(Circular wait):系統中若干進程組成環路,改環路中每個進程都在等待相鄰進程正佔用的資源。


處理死鎖的策略

在系統設計、進程調度等方面注意如何不讓這四個必要條件成立,如何確定資源的合理分配算法,避免進程永久佔據系統資源。此外,也要防止進程在處於等待狀態的情況下佔用資源,在系統運行過程中,對進程發出的每一個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,若分配後系統可能發生死鎖,則不予分配,否則予以分配。因此,對資源的分配要給予合理的規劃。

在發生死鎖後:

1. 撤消陷於死鎖的全部進程;
2. 逐個撤消陷於死鎖的進程,直到死鎖不存在;
3. 從陷於死鎖的進程中逐個強迫放棄所佔用的資源,直至死鎖消失。
4. 從另外一些進程那裏強行剝奪足夠數量的資源分配給死鎖進程,以解除死鎖狀態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章