面試題:死鎖的四個必要條件


死鎖產生的四個必要條件

  • 互斥條件:資源是獨占的且排他使用,進程互斥使用資源,即任意時刻一個資源只能給一個進程使用,其他進程若申請一個資源,而該資源被另一進程占有時,則申請者等待直到資源被占有者釋放。
  • 不可剝奪條件:進程所獲得的資源在未使用完畢之前,不被其他進程強行剝奪,而只能由獲得該資源的進程資源釋放
  • 請求和保持條件:進程每次申請它所需要的一部分資源,在申請新的資源的同時,繼續占用已分配到的資源
  • 循環等待條件::若干進程之間形成一種頭尾相接的循環等待資源關系。 
    以上給出了導致死鎖的四個必要條件,只要系統發生死鎖則以上四個條件至少有一個成立。事實上循環等待的成立蘊含了前三個條件的成立,似乎沒有必要列出然而考慮這些條件對死鎖的預防是有利的,因為可以通過破壞四個條件中的任何一個來預防死鎖的發生。

死鎖預防

我們可以通過破壞死鎖產生的4個必要條件來 預防死鎖,由於資源互斥是資源使用的固有特性是無法改變的。

  1. 破壞“不可剝奪”條件:一個進程不能獲得所需要的全部資源時便處於等待狀態,等待期間他占有的資源將被隱式的釋放重新加入到 系統的資源列表中,可以被其他的進程使用,而等待的進程只有重新獲得自己原有的資源以及新申請的資源才可以重新啟動,執行。
  2. 破壞”請求與保持條件“:第一種方法靜態分配即每個進程在開始執行時就申請他所需要的全部資源。第二種是動態分配即每個進程在申請所需要的資源時他本身不占用系統資源。
  3. 破壞“循環等待”條件:采用資源有序分配其基本思想是將系統中的所有資源順序編號,將緊缺的,稀少的采用較大的編號,在申請資源時必須按照編號的順序進行,一個進程只有獲得較小編號的進程才能申請較大編號的進程。

死鎖避免

死鎖避免的基本思想:系統對進程發出的每一個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,如果分配后系統可能發生死鎖,則不予分配,否則予以分配,這是一種保證系統不進入死鎖狀態的動態策略。 
如果操作系統能保證所有進程在有限時間內得到需要的全部資源,則系統處於安全狀態否則系統是不安全的。

  1. 安全狀態是指:如果系統存在 由所有的安全序列{P1,P2,…Pn},則系統處於安全狀態。一個進程序列是安全的,如果對其中每一個進程Pi(i >=1 && i <= n)他以后尚需要的資源不超過系統當前剩余資源量與所有進程Pj(j < i)當前占有資源量之和,系統處於安全狀態則不會發生死鎖。
  2. 不安全狀態:如果不存在任何一個安全序列,則系統處於不安全狀態。他們之間的對對應關系如下圖所示: 
    這里寫圖片描述 
    下面我們來通過一個例子對安全狀態和不安全狀態進行更深的了解 
    安全狀態
    如上圖所示系統處於安全狀態,系統剩余3個資源,可以把其中的2個分配給P3,此時P3已經獲得了所有的資源,執行完畢后還能還給系統4個資源,此時系統剩余5個資源所以滿足(P2所需的資源不超過系統當前剩余量與P3當前占有資源量之和),同理P1也可以在P2執行完畢后獲得自己需要的資源。 
    如果P1提出再申請一個資源的要求,系統從剩余的資源中分配一個給進程P1,此時系統剩余2個資源,新的狀態圖如下:那么是否仍是安全序列呢那我們來分析一下 
    這里寫圖片描述
    系統當前剩余2個資源,分配給P3后P3執行完畢還給系統4個資源,但是P2需要5個資源,P1需要6個資源,他們都無法獲得資源執行完成,因此找不到一個安全序列。此時系統轉到了不安全狀態。
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/jyy305/article/details/70077042


免責聲明!

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



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