目錄
1.資源分配圖的概念
2.判斷是否發生死鎖
1.資源分配圖的概念
資源分配圖表示進程和資源之間的請求關系,例如下圖:
P代表進程,R代表資源,R方框中 有幾個圓球就表示有幾個這種資源,在圖中,R1指向P1,表示R1已經分配了一個資源給P1了,R1指向P1的邊叫做分配邊(資源-->進程);P1指向R2,表示P1還需要一個R2才能執行,P1指向R2的邊叫做請求邊(進程-->資源)。
阻塞節點:某進程中所請求的資源已全部分配完畢,無法獲取所需資源,則該進程被阻塞了無法繼續執行,如上圖P2。
非阻塞節點:某進程所請求的資源還有剩余,可以分配給該進程繼續運行。如上圖中P1,P3。 當一個進程資源圖中所有進程都是阻塞節點時,即進入死鎖狀態。
說明一下:
上面的圖表示,系統分配一個 R1 資源給進程 p2,然后又分配一個 R1類資源給進程 p1,
最后進程 p1 收到一個 R1 類資源后又繼續申請1個R1類資源,此時,還剩下一個 R1類資源可以分配給 P1,但還沒分配給 P1。(注意:圖中P1的申請是還沒得到響應的,不要以為 R1 指向P1的那個箭頭是響應 P1的申請,而分配了資源給 P1)。“右箭頭”跟“左箭頭”是沒任何關系的。也就是先分配,再看進程的請求是否能夠被滿足。如果某個進程的請求能被滿足,那么這個進程就是非阻塞節點,不能被滿足,就是阻塞節點。
2.判斷是否發生死鎖
判斷下圖是否存在死鎖:
1.先看資源,r1分配了一個資源給p1,分配了一個資源給p2,還剩1個資源;r2分配了1個資源給p2,還剩1個資源。
2.再看p1進程,p1向r2申請了一個資源,r2剛好剩余一個資源,p1是非阻塞節點。
3.再看p2進程,p2向r1申請1個資源,r1剛好剩余一個資源,p2是非阻塞節點。
所以該圖不存在死鎖。
再看下面這個例子:
1.對于r1,分配了2個資源,剩余1個資源。對于r2,分配了1個資源,剩余2個資源。
2.先看p1,p1向r1申請了1個資源,r1剛好剩余1個資源,向r2申請1個資源,而r2剩余2個資源,綽綽有余。所以p1是非阻塞節點。p1進程完成后,釋放資源。
3.此時r1剩余2個資源,r2剩余2個資源,p2可以申請到r1的1個資源,p2非阻塞。
當所有的點都處于“孤立狀態”,那么這個進程不存在死鎖。
若資源分配圖如下圖所示,也就是對于p2而言,只有分配邊,沒有請求邊:
那么可以直接“孤立”這一進程:
總結:
1.先將分配給進程,再看進程的請求(順序一定不能亂)。
2.對于較復雜的資源分配圖,當一個進程是非阻塞節點時,可以想將它“孤立”起來。
3.進程請求資源才可能發生死鎖,所以只有分配邊沒有請求邊的進程節點可以直接“孤立”起來。
利用上面的總結,做一下題吧:
1.下面的進程資源圖是()
1.R1無剩余資源,R2無剩余資源,R3剩余1個資源。
2.由于R1,R2都沒有資源分配了,突破口就來自R3,先看連接R3的請求邊:
P3向R3請求1個資源,R3剛好剩余1個資源,P3是非阻塞節點。P3“孤立”起來。
3.重新計算一下剩余資源,R1剩余1個資源,R2剩余1個資源,首先看P1,P1向R2申請了1個資源,可以被滿足。“孤立”p1。
4.剩下的資源對P2而言綽綽有余了,所以P2也不會阻塞,所以這個資源分配圖不存在死鎖。
2.系統中有3個不同的臨界資源R1,R2,R3,被4個進程p1,p2,p3,p4共享。各進程對資源的需求為:p1申請R1和R2;p2申請R2和R3,p3申請R1和R3,p4申請R2。若系統出現死鎖,則處于死鎖狀態的進程數至少是()
A. 1 ????????B. 2 ????????C. 3 ????????D. 4
答案:C
解答:
1.根據題目,畫出的資源分配圖如下:
2.P4不影響系統最終狀態,只要給它分配資源,完成后就會釋放資源。所以,不管給不給P4分配資源,最終三類資源都是在P1,P2,P3之間進行分配。簡化資源分配圖:
第一種情況:形成循環
由于題目中沒有給出各類資源的具體個數,P2申請1個R2資源和1個R3資源,這里我們假設R3給到了P2一個資源,同理,R2給P1一個資源,R1給了P3一個資源,這樣就形成了循環,發生死鎖。三個進程都無法進行,因為只要有一個進程申請的資源得到滿足,完事后就會釋放相鄰的資源。循環狀態就被破壞了,沒有循環,一定不會發生死鎖。
補充:死鎖的必要條件
1.互斥? ? ? ? 2.不可剝奪? ? ? ? 3.請求和保存? ? ? ? 4.循環
第二種情況:沒有形成循環
若沒有形成循環,可以完全化簡成孤立狀態的,即不會發生死鎖。
所以若資源分配圖死鎖,那么至少P1,P2,P3進程處于死鎖。若沒有事先給P4分配進程,那么處于死鎖狀態的進程為P1,P2,P3,P4。
3.假定某計算機系統有R1設備3臺,R2設備4臺,它們被P1、P2、P3和P4這4個進程互斥共享,且已知這4個進程均以下面所示的順序使用現有設備:
一>申請R1一>申請R2一>申請R1一>釋放R1一>釋放R2一>釋放R1
請問系統運行過程中是否可能產生死鎖?如果有可能的話,請舉出一種情況,并畫出表示該死鎖狀態的資源分配圖。
首先p1,p2,p3,p4都申請r1資源,但是r1只有3個資源:
所以這里假設只有p1,p2,p3被分配到了資源:
由于p4沒有被分配到r1資源,所以接下來的步驟也不能完成。接下來p1,p2,p3繼續申請r2資源,由于r2有4個資源,所以p1,p2,p3也能被分配到r2資源:
接下來p1,p2,p3會繼續申請r1資源,由于r1已經沒有資源可以分配了,進而發生死鎖。
4.系統中有5個資源(R1~R5),現有進程p1依次申請R1, R5,R3;p2依次申請 R3,R4,R2;p3依次申請 R2,R5。
當 3個進程并發執行時有可能發生死鎖嗎?為什么?
依照題目畫出的資源分配圖,如下所示:
由于是并發執行,R1先給p1資源,R3給p2資源,R2給p3資源:
接下來,若R5再給p1分配資源,就會導致循環,必定發生死鎖。
若是在這之前,R5先分配資源給p3,p3進程完成后,釋放資源,就不會發生死鎖: