Dead Lock Prevention
- 打破 “Mutual Exclusion”
- ∵ 互斥是某些資源與生倶來的性質 ∴ 無法打破
- 打破 “No Preemptive”
- 允許 Process 可以搶奪其它 Waiting Process 手中的資源。(即:改為
Preemptive
)- 頂多只會有
Starvation
,但 No Dead Lock (可以採用Aging
技術解決)
- 頂多只會有
- 允許 Process 可以搶奪其它 Waiting Process 手中的資源。(即:改為
- 打破 “Hold and Wait”
可採取下列作法之一:
- 規定: 除非 Process 可以一次取得完成工作所需的
全部資源
,才允許 Process 持有資源,否則 Process 不准持有任何資源- 若一次取得全部資源 ⇒
“Wait”不成立
- 若無法取得全部資源,則全都不拿 ⇒
“Hold” 不成立
- 全有全無
- 系統産能
低
- 若一次取得全部資源 ⇒
- Process 在執行之初可持有部份資源,但若要再申請資源之前,必須先釋放手中所有資源,才可以提出申請
- 一開始可取部份資源執行 ⇒
“Wait”不成立
- 再申請時,需放掉手中所有資源 ⇒
“Hold” 不成立
- 系統産能
低
- 一開始可取部份資源執行 ⇒
- 打破 “Circular Waiting”
O.S.需採取下列措施:
- 為毎個
不同類型
的資源賦予一個獨一無二的資源編碼
(Unique ID) - 規定 Process 必須按照資源編號
遞增
(遞減) 的方式提出資源申請
證明( 反證法 ) :
假設在 O.S. 採取前述兩個措施後,系統仍存在一組 Processes 造成 Circular Waiting 如下:
\(r_i: 資源本身 , R_i: 資源編碼\)
- 令一組行程 \(P_0\)~\(P_n\) 分別持有資源 \(r_0, r_1, …, r_n\),且資源類型皆
不相同
(即:編號不同) - 根據遞增申請規則,上述 Circular Waiting 會推出 \(r_0 < r_1 < … < r_n < r_0\) 。其中竟導出 \(r_0 < r_0\) 此一
矛盾
的式子(即:相同的資源,其編號不同
) - ∴ 假設不成立,不會有 Circular Waiting 狀況產生