首先我們要明白,什麼是死鎖?
死鎖是指兩個及以上程序在執行過程中,由於競爭資源或者由於彼此通訊而造成阻塞,無法繼續推進程式的一種情況,此時稱系統處於死鎖狀態或者系統產生了死鎖。
先來說說,為什麼會產生死鎖?
一共有兩個原因:
也就是說,共享資源數量不滿足各個程序需求從而發生死鎖。
而當死鎖產生的時候,必然會滿足以下四個條件:
互斥條件
意思也就是說,程序對資源的使用是排他性的使用,而資源對於某乙個程序,也是唯一的,其他執行緒只能排隊。
請求保持條件
也就是說,程序至少保持乙個資源,又提出新的資源請求,新的資源被占用,請求被阻塞,而本來就占用的資源,因為阻塞,也無法釋放。
不可剝奪條件
程序獲得的資源在未完成使用前不能被剝奪,而獲得到的資源又只能由程序自身釋放。
環路等待條件
發生死鎖的時候,必然存在程序-資源的環形等待鏈。
上面,我們也說了,死鎖產生的條件,共有四個,分別是互斥條件,請求保持條件,不可剝奪條件,環路等待條件,而當這四個條件全部被觸發的時候,死鎖才會產生。
那麼,我麼我們只需要破壞其中的乙個條件或者多個條件,就可以將死鎖的產生,破壞掉。
而我們可以人為去進行破壞的有:請求保持條件,不可剝奪條件,環路等待條件。
首先說一下如何破壞請求保持條件:
我們可以讓系統規定程序執行之前,一次性申請所有需要的資源。因為程序在執行期間不會提出資源請求,所以就可以摒棄掉請求保持條件。
接著是如何破壞不可剝奪條件:
當乙個程序請求新的資源得不到滿足的時候,必須釋放占有的資源。而當程序執行的時候占有的資源可以被釋放,意味著可以被剝奪。
最後是如何破壞環路等待條件:
我們只需要將可用資源線性排序,申請必須按照需要遞增申請,執行緒申請不再形成環路,就摒棄了環路等待條件。
先描述一下銀行家演算法的背景:
客戶申請的貸款是有限的,每次申請需要宣告最大資金量,銀行家在能夠滿足貸款的時候,都應該給使用者貸款,客戶在使用貸款之後,能夠立刻歸還。
然後我來描述一下,p1 p2 p3 p4代表四個程序,a b c d代表四種資源。第一張圖四個程序對於四種資源一共需求的情況,已分配的情況,和所剩下的資源的情況。
第二張圖,則是對比了四個程序還需要多少資源的情況和我們還剩下多少資源的情況,通過對比,我們發現,可以優先滿足p2執行緒,從而打破死鎖的形成條件。
作業系統死鎖
作業系統死鎖,在作業系統課程當中屬於比較關注的乙個知識點,在這裡做個簡單的梳理。死鎖的四個必要條件 作業系統中有若干程序併發執行,它們不斷申請 使用 釋放系統資源,雖然系統的進 程協調 通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能 繼續執行,否則就阻塞的情況。此時,若不借...
作業系統 死鎖
多執行緒以及多程序改善了系統資源的利用率並提高了系統 的處理能力。然而,併發執行也帶來了新的問題 死鎖。死鎖是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當前程序處於這種狀態時,若無外力作用,它們都將無法再向前推進。關於死鎖的一些結論 競爭資源 當系統中供多個程序共享的資源如印表機 公用佇列等...
作業系統 死鎖
把需要排他性使用的物件稱為資源。資源可以是硬體也可以是軟體,比如印表機或者資料庫中的乙個加鎖記錄。資源可以分為兩類 可搶占資源和不可搶占資源。搶占這個詞,在程序和執行緒排程時就提到了這個概念,那時是程序或者執行緒可以搶占cpu,即搶占式排程。儲存器也可以搶占,如記憶體換頁。一般來說,可搶占資源不會引...