三、請解釋在作業系統行程(process)管理中的死結(deadlock)現象,又發生死結的 條件為何?(10 分)
詳解 (共 2 筆)
詳解
死結(Deadlock)現象的解釋
在作業系統中,死結(Deadlock)是一種現象,指的是一組進程在等待某些資源,而這些資源正被其他進程佔用,且這些進程彼此之間形成了一個循環等待的關係,導致所有進程都無法繼續執行。
簡單地說,死結是一種資源分配的僵局,涉及多個進程彼此等待而無法前進的情況。
死結發生的四個必要條件
發生死結需要同時滿足以下四個條件,這些條件通常稱為「Coffman條件」:
-
互斥條件(Mutual Exclusion):
- 資源一次只能被一個進程使用。如果另一個進程請求資源,則必須等待直至資源被釋放。
-
持有並等待條件(Hold and Wait):
- 一個進程已經持有至少一個資源,並且正在等待獲得另外一個資源,而該資源正被其他進程持有。
-
不剝奪條件(No Preemption):
- 資源不能被強制從進程中剝奪,只能由持有它的進程自己釋放。
-
循環等待條件(Circular Wait):
- 存在一個進程集 {P1,P2,...,Pn},其中 P1 正在等待 P2 持有的資源,P22 正在等待 P3 持有的資源,…,而 Pn 則正在等待 P1持有的資源,形成一個循環等待的環路。
死結的例子
考慮兩個進程 P1和 P2,以及兩個資源 R1 和 R2:
- 進程 P1 持有資源 R1並請求資源 R2。
- 進程 P2持有資源 R2 並請求資源 R1。
在這種情況下:
- P1 等待 P2 釋放資源 R2。
- P2 等待 P1 釋放資源 R1。
這樣就形成了一個循環等待,導致死結。
死結的預防與避免
為了避免或預防死結,作業系統可以採取以下幾種策略:
-
預防策略(Deadlock Prevention):
- 設計系統以避免四個必要條件之一的發生,例如:不允許持有並等待或允許資源剝奪等。
-
避免策略(Deadlock Avoidance):
- 使用某種算法(如銀行家算法)來確保系統永遠不會進入死結狀態。
-
檢測與恢復(Deadlock Detection and Recovery):
- 系統定期檢測死結並在發現死結時進行處理,例如:強制撤銷某些進程以打破死結。
-
資源分配圖(Resource Allocation Graph):
- 使用資源分配圖來動態地檢測和避免死結。
總結來說,死結是一種需要小心管理的資源分配問題,作業系統設計中必須考慮並採取適當的策略來防止或解決死結。
詳解
兩個執行緒分別取得了鎖定,互相等待另外一個執行緒解除鎖定的現象,發生死結的時候,哪個執行緒都無法繼續執行下去,這時候程式就會不斷等待。
條件為互斥現象、握有並等待、不可搶先、循環等待