操做系統之死鎖

死鎖(DeadLock算法


死鎖的概念安全

    所謂死鎖是指兩個或兩個以上的進程在執行過程當中,因爭奪資源而形成的一種互相等待的現象,若無外力做用,它們都將沒法推動下去,此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程。
ide

    例如,若是線程A鎖住了記錄1並等待記錄2,而線程B鎖住了記錄2並等待記錄1,這樣兩個線程就發生了死鎖現象。
spa

產生死鎖的緣由線程

    1. 由於系統資源不足。
    2. 進程運行推動的順序不合適。
    3. 資源分配不當等。

 若是系統資源充足,進程的資源請求都可以獲得知足,死鎖出現的可能性就很低,不然就會因爭奪有限的資源而陷入死鎖。其次,進程運行推動順序與速度不一樣,也可能產生死鎖。 
排序

死鎖產生的必要條件進程

    1. 互斥條件: 一個資源每次只能被一個進程使用。
    2. 
請求與保持: 一個進程因請求資源而阻塞時,對已得到的資源保持不放。
    3. 
不可剝奪(非搶佔): 進程已得到的資源,在末使用完以前,不能強行剝奪。
    4. 
循環等待: 若干進程之間造成一種頭尾相接的循環等待資源關係。
 這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不知足,就不會發生死鎖。 
資源

死鎖的處理方法it

預防死鎖class

事先預防,破壞產生死鎖的四個必要條件之一。

  • 摒棄「請求和保持」條件:進程在申請資源時,是一次性的。

    摒棄「請求「:當進程來時,一次性分配全部的資源(若是系統知足),這樣就不會再有」請求「了。

    摒棄「保持「:只要有一個資源得不到分配,也不給這個進程分配其餘的資源。

  • 摒棄「不剝奪」條件:在這種方法中,進程是逐個提出對資源的要求的。若是一個進程,得到了部分資源,但得不到其它資源,這時,它釋放本身所佔用的資源。

  • 摒棄「環路等待」條件:把資源排序,當進程申請資源時,按序申請。

避免死鎖

事先預防,並非破壞產生死鎖的四個必要條件,而是用某種方法去防止系統進入不安全狀態,目前在較完善的系統中,經常使用此方法。銀行家算法

安全狀態:是指系統能按照某種進程順序(P1,P2,…Pn),來爲每個進程Pi分配其所須要的資源,直到知足每一個進程對資源的最大需求,使每一個進程均可順利地完成。若是系統沒法找到這樣一個安全序列,則稱系統處於不安全狀態。

檢測死鎖

並不事先採起任何限制性的措施,也沒必要檢查系統是否已經進入不安全區,此方法容許發生死鎖,關鍵是,發生死鎖了,系統能夠經過檢測機構發現死鎖,並精確肯定與死鎖有關的進程和資源,而後,採起適當措施,從系統中將已經發生的死鎖清除

解除死鎖

這是與檢測死鎖配套使用。當檢測到系統已經發生了死鎖,要將進程從死鎖狀態中解脫出來。經常使用的方法是撤銷或掛起一些進程,以便回收一些資源,再將這些資源分配給已經處於阻塞狀態的進程,使之轉爲就緒狀態,以繼續運行。

相關文章
相關標籤/搜索