死鎖的條件及解決的辦法


 

  • 死鎖的條件
    必須同時存在以下的四個條件才能發生死鎖。

    1. 互斥條件
      即某個資源在一段時間內只能由一個進程占有,不能同時被兩個或兩個以上的進程占有。這種獨占資源如CD-ROM驅動器,打印機等等,必須在占有該資源的進程主動釋放它之后,其它進程才能占有該資源。這是由資源本身的屬性所決定的。
    2. 不可搶占條件。
      進程所獲得的資源在未使用完畢之前,資源申請者不能強行地從資源占有者手中奪取資源,而只能由該資源的占有者進程自行釋放。
    3. 占有且申請條件。
      進程至少已經占有一個資源,但又申請新的資源;由於該資源已被另外進程占有,此時該進程阻塞;但是,它在等待新資源之時,仍繼續占用已占有的資源。
    4. 循環等待條件
      存在一個進程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的某一資源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一資源,形成一個進程循環等待環。
  • 死鎖的預防
    死鎖的預防是保證系統不進入死鎖狀態的一種策略。

  1. 破壞互斥條件
    有些資源不能被共享。--沒用
    2. 破壞不可搶占條件。
    可搶占式,即要求申請失敗的進程釋放自己占有的資源給別人用,降低系統性能。
    3. 破壞占有且申請條件。
    直接申請自己所需要的所有資源。--1.不可預知自己需要什么資源 2.資源利用率低,長期占有自己可能不用的資源。
    4. 破壞循環等待條件
    資源分類、編號,按序申請。 --·1.編號可能是困難的,維護相應的序列是困難的
  • 死鎖的避免
    死鎖的避免指的是不限制進程有關申請資源的命令,而是對進程所發出的每一個申請資源命令加以動態地檢查,並根據檢查結果決定是否進行資源分配。
    銀行家算法。當一個進程申請使用資源的時候,銀行家算法通過先 試探 分配給該進程資源,然后通過安全性算法判斷分配后的系統是否處於安全狀態,若不安全則試探分配作廢,讓該進程繼續等待。

判定安全狀態需要已分配資源、還需要的資源、可用資源、finish判定符


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM