1. 程式人生 > >作業系統知識整理 - 死鎖

作業系統知識整理 - 死鎖

定義死鎖是指各併發程序互相等待對方所擁有的資源,且這些併發程序在得到對方的資源之前不會釋放自己佔有的資源,從而造成了各併發程序不能繼續往前推進的狀態。

起因系統提供的資源個數少於併發程序所要求的該類資源數。

顯然,由於資源的有限性,不可能為所有程序無限制地提供資源。採用適當的資源分配演算法,就可以達到消除死鎖的目的。因此需要先了解產生死鎖的必要條件。

必要條件

(1)互斥條件。併發程序所要求佔有的資源不能同時被兩個以上程序使用,程序對它所需要的資源進行排他性控制

(2)不剝奪條件。程序佔有的資源只能由程序本身釋放,而不能被其他程序強行剝奪。

(3)部分分配。程序每次申請它所需要的一部分資源,在等待新資源的同時,繼續佔用已分配到的資源(即使已經使用完)。

(4)環路條件。存在一種程序迴圈鏈,鏈中的每一個程序已獲得的資源同時被下一個程序所請求。

只要使上述4個必要條件中的某一個不滿足,死鎖就能解除

 

實際上,消除死鎖一般依靠檢測恢復

當程序進行資源請求時,死鎖檢測演算法檢查併發程序是否出現環路,若出現,最簡單的方法是終止各鎖住程序,或按影響級別由低到高的順序中止程序序列,直至釋放的資源足夠完成剩餘程序。