作業系統中的死結(Deadlock)
定義: 死結(Deadlock)是指在多任務系統中,一組進程因相互等待而無法繼續執行的狀態。這些進程每個都在等待其他進程釋放它們需要的資源,導致系統無法繼續運行,進而進入僵持狀態。
死結的四個必要條件(Necessary Conditions)
死結的發生需要滿足以下四個必要條件,這些條件同時存在時,系統可能會進入死結狀態:
-
互斥(Mutual Exclusion)
- 定義:至少有一個資源處於非共享模式,即每個資源在同一時間只能被一個進程占用。
- 例子:一個打印機一次只能被一個進程使用。
-
資源佔有和等待(Hold and Wait)
- 定義:至少有一個進程持有了一些資源,同時又在等待其他被別的進程持有的資源。
- 例子:進程A持有資源1並等待資源2,而進程B持有資源2並等待資源1。
-
不剝奪(No Preemption)
- 定義:資源不能被強制剝奪;已分配的資源只能由占有它的進程主動釋放。
- 例子:一個進程不能強制性地從另一個進程手中奪取資源,只能等待其釋放。
-
循環等待(Circular Wait)
- 定義:存在一組進程,每個進程都在等待另一個進程所持有的資源,形成一個閉合的環路。
- 例子:進程A等待進程B的資源,進程B等待進程C的資源,進程C等待進程A的資源,形成一個循環等待。
死結的例子
假設有兩個進程P1和P2,以及兩個資源R1和R2,情況如下:
- 互斥: 資源R1和R2都只能被一個進程占用。
- 資源佔有和等待:
- 進程P1持有資源R1,並且等待資源R2。
- 進程P2持有資源R2,並且等待資源R1。
- 不剝奪: 資源R1和R2不能被強制剝奪,只能由進程P1和P2自行釋放。
- 循環等待:
- 進程P1等待進程P2釋放資源R2。
- 進程P2等待進程P1釋放資源R1。
在這種情況下,P1和P2都無法繼續執行,因為它們都在等待對方釋放資源,導致死結的發生。
總結
死結是一種在多任務系統中常見的問題,會導致一組進程無法繼續執行。死結的發生需要滿足以下四個必要條件:
- 互斥(Mutual Exclusion)
- 資源佔有和等待(Hold and Wait)
- 不剝奪(No Preemption)
- 循環等待(Circular Wait)
理解這些條件有助於設計和實現能夠避免或解決死結問題的系統。