死結的原因和必要條件什麼是死結
所謂死結:是指多個進程在運行過程中因爭奪資源而造成的一種僵局。
產生死結的原因
l 競爭資源:當系統中多個進程使用共用資源,並且資源不足以滿足需要,會引起進程對資源的競爭而產生死結。
l 進程間推進的順序非法:請求和釋放資源的順序不當,也同樣會導致產生進程死結
產生死結的必要條件
- 互斥條件:進程對所分配到的資源進行排它性使用,在一段時間內某資源只由一個進程佔用。
- 請求和保持條件:指一個進程已經保持了至少一個資源,但又提出新的資源請求,而此資源被其他佔用,此時請求進程阻塞,但又對自己已經佔用的資源保持不放。
- 不剝奪條件:進程已經獲得資源,在未使用完之前,不能被剝奪,只能在使用完時,由進程自己釋放。
- 環路等待條件:發生死結時,必然存在一個進程-資源的環形鏈。
處理死結的方法
l 預防死結
事先預防,破壞產生死結的四個必要條件之一。
- 摒棄“請求和保持”條件:
進程在申請資源時,是一次性的。
如何摒棄“請求“:當進程來時,一次性分配所有的資源(如果系統滿足),這樣就不會再有”請求“了。
如何摒棄“保持“:只要有一個資源得不到分配,也不給這個進程分配其他的資源。
- 摒棄“不剝奪”條件:在這種方法中,進程是逐個提出對資源的要求的。如果一個進程,獲得了部分資源,但得不到其它資源,這時,它釋放自己所佔用的資源。
- 摒棄“環路等待”條件:把資源排序,當進程申請資源時,按序申請。
l 避免死結
事先預防,並不是破壞產生死結的四個必要條件,而是用某種方法去防止系統進入不安全狀態,目前在較完善的系統中,常用此方法。銀行家演算法
安全狀態:是指系統能按照某種進程順序(P1,P2,…Pn),來為每一個進程Pi分配其所需要的資源,直到滿足每個進程對資源的最大需求,使每個進程都可順利地完成。如果系統無法找到這樣一個安全序列,則稱系統處於不安全狀態。
l 檢測死結
並不事先採取任何限制性的措施,也不必檢查系統是否已經進入不安全區,此方法允許發生死結,關鍵是,發生死結了,系統可以通過檢測機構發現死結,並精確確定與死結有關的進程和資源,然後,採取適當措施,從系統中將已經發生的死結清除
l 解除死結
這是與檢測死結配套使用。當檢測到系統已經發生了死結,要將進程從死結狀態中解脫出來。常用的方法是撤銷或掛起一些進程,以便回收一些資源,再將這些資源分派給已經處於阻塞狀態的進程,使之轉為就緒狀態,以繼續運行。