2012年5月13日 星期日

[筆記] 請簡單說明(或舉例)Deadlock發生的條件

 作者  ie945167 (龍蝦)                                      站內  Lobster
 標題  [筆記] 請簡單說明(或舉例)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

沒有留言:

張貼留言