計算機操作系統之死鎖的原因和必要條件


死鎖的原因和必要條件

什么是死鎖

所謂死鎖:是指多個進程在運行過程中因爭奪資源而造成的一種僵局。

產生死鎖的原因

l  競爭資源:當系統中多個進程使用共享資源,並且資源不足以滿足需要,會引起進程對資源的競爭而產生死鎖。

l  進程間推進的順序非法:請求和釋放資源的順序不當,也同樣會導致產生進程死鎖

 

產生死鎖的必要條件

  1. 互斥條件:進程對所分配到的資源進行排它性使用,在一段時間內某資源只由一個進程占用。
  2. 請求和保持條件:指一個進程已經保持了至少一個資源,但又提出新的資源請求,而此資源被其他占用,此時請求進程阻塞,但又對自己已經占用的資源保持不放。
  3. 不剝奪條件:進程已經獲得資源,在未使用完之前,不能被剝奪,只能在使用完時,由進程自己釋放。
  4. 環路等待條件:發生死鎖時,必然存在一個進程-資源的環形鏈。

 

處理死鎖的方法

預防死鎖

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

  1. 摒棄“請求和保持”條件:

進程在申請資源時,是一次性的。

如何摒棄“請求“:當進程來時,一次性分配所有的資源(如果系統滿足),這樣就不會再有”請求“了。

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

  1. 摒棄“不剝奪”條件:在這種方法中,進程是逐個提出對資源的要求的。如果一個進程,獲得了部分資源,但得不到其它資源,這時,它釋放自己所占用的資源。
  2. 摒棄“環路等待”條件:把資源排序,當進程申請資源時,按序申請。

避免死鎖

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

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

檢測死鎖

並不事先采取任何限制性的措施,也不必檢查系統是否已經進入不安全區,此方法允許發生死鎖,關鍵是,發生死鎖了,系統可以通過檢測機構發現死鎖,並精確確定與死鎖有關的進程和資源,然后,采取適當措施,從系統中將已經發生的死鎖清除

解除死鎖

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM