出現(xiàn)死鎖的必要條件
- 互斥:任何時刻只能有一個進(jìn)程使用一個資源實例
- 持有并等待:進(jìn)程保持至少一個資源,并正在等等獲取其他進(jìn)程持有的資源
- 非搶占:資源只能在進(jìn)程使用后自愿釋放
- 循環(huán)等待:出現(xiàn)環(huán)形等待
死鎖的處理方法
- ** 死鎖預(yù)防:確保系統(tǒng)永遠(yuǎn)不會進(jìn)入死鎖狀態(tài)**
預(yù)防是采用某種策略,限制并發(fā)進(jìn)程對資源的請求,使系統(tǒng)在任何時刻都不滿足死鎖的必要條件
a. 互斥:
- 把互斥的共享資源封裝為可同時訪問
b. 持有并等待:
- 進(jìn)程請求資源時,要求它不持有任何其他資源
- 僅允許進(jìn)程在開始執(zhí)行時,一次請求所有需要的資源
- 資源利用率低
c. 非搶占
- 如進(jìn)程請求不能立即分配的資源,則釋放已占有資源
- 只在能夠同時獲得所有需要資源時,才執(zhí)行分配操作
d. 循環(huán)等待
對資源排序,要求進(jìn)程按順序請求資源
死鎖避免:在使用前進(jìn)行判斷,只允許不會出現(xiàn)死鎖的進(jìn)程請求資源
利用額外的先驗信息,在分配資源時判斷是否會出現(xiàn)死鎖,只在不會死鎖時分配資源
a.要求進(jìn)程聲明需要資源的最大數(shù)目
b. 限定提供與分配的資源數(shù)量,確保滿足進(jìn)程的最大需求
c. 動態(tài)檢查資源分配狀態(tài),確保不會出現(xiàn)環(huán)形等待
死鎖檢測和恢復(fù):在檢測到運(yùn)行系統(tǒng)進(jìn)入死鎖狀態(tài)后,進(jìn)行恢復(fù)
通常操作系統(tǒng)會忽略死鎖