死鎖

1. 什么是死鎖

1.1. 什么是資源

計(jì)算機(jī)排他性的訪問(wèn)并使用的對(duì)象,叫做資源.資源按照其調(diào)度方案可以分為可搶占資源不可搶占資源兩種.

  1. 可搶占資源:從占有它的進(jìn)程中搶占不會(huì)引起錯(cuò)誤的資源,例如存儲(chǔ)器等.

  2. 不可搶占資源:不引起進(jìn)程故障的情況下,無(wú)法從占有它的進(jìn)程中搶占的資源,例如打印機(jī)等.

死鎖和不可搶占資源有關(guān).

1.2. 死鎖

死鎖是一種場(chǎng)景.

假設(shè)有A和B兩個(gè)進(jìn)程.A進(jìn)程持有資源R,請(qǐng)求資源Q.B進(jìn)程持有資源Q,請(qǐng)求資源R.而且A和B在未完成各自作業(yè)之前,不會(huì)釋放已持有的資源.

當(dāng)R和Q資源都是不可搶占資源時(shí),就發(fā)生了死鎖.

因?yàn)椴僮飨到y(tǒng)調(diào)度程序在通常情況下不會(huì)對(duì)已分配的不可搶占資源進(jìn)行重分配,而是等待占有它的進(jìn)程顯示釋放.

2. 形成條件

  1. 互斥條件: 資源只有兩種狀態(tài).要么分配給了進(jìn)程,要么就是可用的.

  2. 占有和等待條件: 已經(jīng)得到某個(gè)資源的進(jìn)程可以再次請(qǐng)求新的資源.

  3. 不可搶占條件: 已經(jīng)分配的資源不能被搶占,只能由占有它的進(jìn)程顯式釋放.

  4. 環(huán)路等待條件: 死鎖發(fā)生時(shí),系統(tǒng)中一定由兩個(gè)或兩個(gè)以上的進(jìn)程組成一條環(huán)路,該環(huán)路中,每個(gè)進(jìn)程都在等待下一個(gè)進(jìn)程所占有的資源.

3. 避免

沒(méi)有一種算法可以完全避免所有環(huán)境中可能發(fā)生的死鎖.只能通過(guò)運(yùn)行時(shí)場(chǎng)景來(lái)選擇合理的方式避免.

比如,數(shù)據(jù)庫(kù)為了避免死鎖,采用的兩階段加鎖,不適用于進(jìn)程作業(yè)不確定的場(chǎng)景.

再如,存儲(chǔ)空間大的系統(tǒng)可以采用守護(hù)進(jìn)程加假脫機(jī)打印目錄來(lái)解決打印機(jī)死鎖,但不適用于小存儲(chǔ)空間系統(tǒng).

3.1. 銀行家算法

銀行家算法是指,銀行家將定量的資金貸給若干個(gè)企業(yè)家,企業(yè)家需求資金總量已知,但是資金不會(huì)全部立即到賬,只能由企業(yè)家分階段申請(qǐng).企業(yè)家在獲得全部所需資金后歸還全部資金.通過(guò)銀行家算法,銀行家可以完美調(diào)度資金,滿足所有企業(yè)家的需求.

但是,銀行家算法只能作為參考,而沒(méi)有通用性.因?yàn)?講資金換成資源,銀行家換成操作系統(tǒng),幾乎所有的進(jìn)程在運(yùn)行前是不知道自己所需某種資源的數(shù)量.

在一些大型批處理作業(yè)中,可以參考銀行家算法來(lái)避免死鎖.

以下是多種資源的銀行家算法(單個(gè)資源的銀行家算法也適配于此):

假設(shè):

  1. 有m種資源.有n個(gè)進(jìn)程.
  2. 各個(gè)資源總數(shù)組成的向量為E.


    E.gif
    E.gif
  3. 各個(gè)資源剩余量組成的向量為A.


    A.gif
    A.gif
  4. C為當(dāng)前分配資源.


    C.gif
    C.gif
  5. R為請(qǐng)求資源.


    R.gif
    R.gif

存在恒等式:


sum.gif
sum.gif

算法描述如下:

  1. 檢查R中是否有一行,滿足各項(xiàng)都小于A.
  2. 如果有,則分配.進(jìn)程被標(biāo)記.之后釋放所有資源,加到A中.
  3. 重復(fù)以上步驟,直到所有進(jìn)程被標(biāo)記.如果存在無(wú)法標(biāo)記的進(jìn)程,則當(dāng)前分配方案存在死鎖.

3.2. 破壞死鎖形成條件

這種方法是破壞思索形成四個(gè)條件中的任意一個(gè),從而避免思索.每個(gè)條件的背后都有隱含的條件,并不適用于所有場(chǎng)景,只能因地制宜,選擇最合適的方法.

3.2.1. 破壞互斥條件

方法: 假脫機(jī),由守護(hù)進(jìn)程專(zhuān)門(mén)負(fù)責(zé)資源操作.

問(wèn)題: 以假脫機(jī)打印為例,如果假脫機(jī)目錄在接收到文件時(shí)就開(kāi)始打印.這樣一來(lái),存儲(chǔ)空間的需求就是未知的.如果文件就緒再打印,那么脫機(jī)打印目錄在空間有限的前提下,本身就會(huì)發(fā)生死鎖.因?yàn)榭赡芩械倪M(jìn)程在寫(xiě)入一半時(shí),空間滿了.

3.2.2. 破壞占有和等待條件

方法: 在進(jìn)程開(kāi)始前請(qǐng)求所有資源.

問(wèn)題: 一般情況下,進(jìn)程是不知道自己將來(lái)的資源需求的.

3.2.3. 破壞不可搶占條件

方法: 搶占.

問(wèn)題: 在一般進(jìn)程間會(huì)發(fā)生錯(cuò)誤.

3.2.4. 破壞環(huán)路等待條件

方法1: 每個(gè)進(jìn)程只能擁有一個(gè)資源.

問(wèn)題: 如果有需要兩個(gè)資源的進(jìn)程,則這個(gè)進(jìn)程無(wú)法運(yùn)行.

方法2: 給每個(gè)資源編號(hào),然后進(jìn)程按照標(biāo)號(hào)增(或減)序,申請(qǐng)資源.

問(wèn)題: 每個(gè)進(jìn)程申請(qǐng)資源的剛性順序貌似是隨機(jī)的.所以,宏觀來(lái)看,不存在一種可以運(yùn)行所有進(jìn)程的資源排序.

4. 綜上所述

想要在全部維度完全避免死鎖,為此尋找一個(gè)一勞永逸的方法,當(dāng)前是不可能的.所以要在有死鎖發(fā)生潛在可能的環(huán)境中,根據(jù)需求,合理的選擇避免死鎖的方法.其中可能包含銀行家算法,也可以打破死鎖發(fā)生的條件.或者使用特殊的資源調(diào)度算法.

來(lái)自博客:http://newlooc.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1、競(jìng)態(tài)條件: 定義:競(jìng)態(tài)條件指的是一種特殊的情況,在這種情況下各個(gè)執(zhí)行單元以一種沒(méi)有邏輯的順序執(zhí)行動(dòng)作,從而導(dǎo)致...
    Hughman閱讀 1,331評(píng)論 0 7
  • 死鎖的定義 進(jìn)程之間互相等待資源又都不能向前推進(jìn)的情況,即造成進(jìn)程相互死等的局面。即每個(gè)進(jìn)程“抓住”一些為其他進(jìn)程...
    曲諧_閱讀 810評(píng)論 0 1
  • 一、死鎖的基本概念 1.1 死鎖的定義 一組進(jìn)程中,每個(gè)進(jìn)程都無(wú)限等待被該組進(jìn)程中另一進(jìn)程所占用的資源,因而永遠(yuǎn)無(wú)...
    yjaal閱讀 1,510評(píng)論 0 6
  • 文/小宋老師 01 昨天晚上,我拖著疲憊的身軀乘坐地鐵回家,回家的路上感覺(jué)心亂如麻。因?yàn)樾念^積壓了很多的事情等待著...
    小宋老師的幸福課閱讀 1,928評(píng)論 15 26
  • 《時(shí)代》封面上的第一個(gè)中國(guó)人,西方列強(qiáng)都看好他能武力統(tǒng)一中國(guó)“一文發(fā)布以后,有部分讀者以為北洋軍閥是被歪曲了,大多...
    那天早上閱讀 266評(píng)論 0 1