標題 [筆記] 請簡單說明(或舉例)Deadlock發生的條件
時間 2012/05/13 Sun 21:26:52
───────────────────────────────────────
1. 互斥(mutual exclusion):
每次只能有一個process 可以使用該資源(該資源不允許共享),
如果另一process 對該資源提出申請,則此提出申請的process 必須等待,
直到該資源被釋放為止。
eg. printer、Disk、CPU etc.
eg. 不具mutual exclusion→Read-only File
1. 佔用及等待(hold and wait):
系統中至少存在一個process持有某項資源,
並正在等待獲取別項正被其它process所持有之資源。
EX:
(□a)←--╮
process A process B
╰--→(□b)
如果 process A, B 已經各自拿到 a 和 b 的資源,
但 A 還要需要 b資源,且 B也需要 a 資源,但是這些資源都已經被佔住了,
所以就形成 deadlock。
那麼如何在程式中避免掉這個問題呢?
ANS:資源 lock 的順序需相同。
也就是兩個 process 在 lock 住資源的順序需相同,
都必須先 lock 住 A 或 B,才能再 lock 另一個資源。
如此可避免掉 deadlock 的情況。
3. 禁止搶先(不可強取)(no preemption):
一個資源只能由持有它的process 在該process完成其工作之後自願釋放才行。
4. 循環等待(circular wait):
必須存在一組正在等待的process{ P0,P1,…,Pn},
其中P0 正在必須等待P1 持有的某個資源,P1 又等待被P2持有的某個資源,
最後Pn 也正等待被P0 持有的某個資源。
process各自佔用一些資源,而彼此互相在等待對方的資源,而形成一個迴圈。
所以為了預防死結的發生,必須針對這四個條件下功夫,
只要一個條件不成立,死結就會不成立。
--
接球會"噴"
我 舉球會"歪" 但是! 我算分超強 o(一︿一+)o
攻擊會"OUT"
--
▅◣ Origin: 謠 言 報 bbs.csie.fju.edu.tw
▋◤ Author: ie945167 從 219-85-42-130-adsl-TPE.dynamic.so-net.net.tw 發表
▋※ Modify: 2012/05/13 Sun 21:27:13
沒有留言:
張貼留言