-
死鎖的條件
必須同時存在以下的四個條件才能發生死鎖。- 互斥條件
即某個資源在一段時間內只能由一個進程占有,不能同時被兩個或兩個以上的進程占有。這種獨占資源如CD-ROM驅動器,打印機等等,必須在占有該資源的進程主動釋放它之后,其它進程才能占有該資源。這是由資源本身的屬性所決定的。 - 不可搶占條件。
進程所獲得的資源在未使用完畢之前,資源申請者不能強行地從資源占有者手中奪取資源,而只能由該資源的占有者進程自行釋放。 - 占有且申請條件。
進程至少已經占有一個資源,但又申請新的資源;由於該資源已被另外進程占有,此時該進程阻塞;但是,它在等待新資源之時,仍繼續占用已占有的資源。 - 循環等待條件
存在一個進程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的某一資源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一資源,形成一個進程循環等待環。
- 互斥條件
-
死鎖的預防
死鎖的預防是保證系統不進入死鎖狀態的一種策略。
- 破壞互斥條件
有些資源不能被共享。--沒用
2. 破壞不可搶占條件。
可搶占式,即要求申請失敗的進程釋放自己占有的資源給別人用,降低系統性能。
3. 破壞占有且申請條件。
直接申請自己所需要的所有資源。--1.不可預知自己需要什么資源 2.資源利用率低,長期占有自己可能不用的資源。
4. 破壞循環等待條件
資源分類、編號,按序申請。 --·1.編號可能是困難的,維護相應的序列是困難的
- 死鎖的避免
死鎖的避免指的是不限制進程有關申請資源的命令,而是對進程所發出的每一個申請資源命令加以動態地檢查,並根據檢查結果決定是否進行資源分配。
銀行家算法。當一個進程申請使用資源的時候,銀行家算法通過先 試探 分配給該進程資源,然后通過安全性算法判斷分配后的系統是否處於安全狀態,若不安全則試探分配作廢,讓該進程繼續等待。
判定安全狀態需要已分配資源、還需要的資源、可用資源、finish判定符
