OS學習筆記八:死鎖

衣舞晨風發表於2017-10-11

一、死鎖的基本概念

1、死鎖的定義

  • 一組程式中,每個程式都無限等待被該組程式中另一程式所佔有的資源,因而永遠無法得到的資源,這種現象稱為 程式死鎖 ,這一組程式就稱為死鎖程式

  • 如果死鎖發生,會浪費大量系統資源,甚至導致系統崩潰

參與 死鎖的所有程式都在等待資源

參與死鎖的程式是當前系統中所有程式的子集

2、活鎖

活鎖指的是執行緒不斷重複執行相同的操作,但每次操作的結果都是失敗的。儘管這個問題不會阻塞執行緒,但是程式也無法繼續執行。

活鎖通常發生在處理事務訊息的應用程式中,如果不能成功處理這個事務那麼事務將回滾整個操作。解決活鎖的辦法是在每次重複執行的時候引入隨機機制,這樣由於出現的可能性不同使得程式可以繼續執行其他的任務。

活鎖不會被阻塞,而是不停檢測一個永遠不可能為真的條件。除去程式本身持有的資源外,活鎖狀態的程式會持續耗費寶貴的CPU時間。

3、產生死鎖的必要條件

  • 互斥使用( 資源獨佔)

    一個資源每次只能給一個程式使用

  • 佔有且等待( 請求和保持,部分分配)

    程式 在申請新的資源的同時保持對原有資源的佔有

  • 不可搶佔( 不可剝奪)

    資源 申請者不能強行的從資源佔有者手中奪取資源,資源只能由佔有者自願釋放

  • 迴圈等待

    存在 一個程式等待 佇列 {P 1 , P 2 , … , Pn},其中P 1 等待P 2 佔有的資源,P 2 等待P 3 佔有的資源,… ,Pn 等待P 1 佔有的資源,形成一個程式等待環路

4、死鎖定理

  • 如果 資源分配圖中沒有環路,則系統中沒有死鎖,如果圖中存在環路則系統中可能存在死鎖

  • 如果每個資源類中只包含一個資源例項,則環路是死鎖存在的充分必要條件

這裡寫圖片描述

5、死鎖避免定義

在系統執行過程中, 對程式 發出的每一個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,若分配後系統發生死鎖或可能發生死鎖,則不予分配,否則予以分配。

安全狀態:

如果 系統中存在一個由所有程式構成的安全序列P 1 ,… ,P n ,則稱系統處於安全狀態

6、安全序列

一 個程式序列 {P 1 1 ,… ,P P n n } } 是安全的,如果對於每一個程式P P i i (1 ≤i i ≤n n ):它以後還需要 的資源量不超過系統當前剩餘資源量與所有程式P P j j (j < i i ) ) 當前佔有資源量之 和則稱系統處於安全狀態。

安全狀態一定沒有死鎖發生

7、銀行家演算法

詳見講義

8、哲學家就餐問題

詳見講義

本文整理自:《作業系統原理》北京大學_陳向群 講義

個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章