死鎖的檢測和解除

2021-08-11 00:05:25 字數 1393 閱讀 5540

前面紹的死鎖預防和避免演算法,都是在為程序分配資源時施加限制條件或進行檢測,若系統為程序分配資源時不釆取任何措施,則應該提供死鎖檢測和解除的手段。

資源分配圖

系統死鎖,可利用資源分配圖來描述。如圖2-17所示,用圓圈代表乙個程序,用框代表一類資源。由於一種型別的資源可能有多個,用框中的乙個點代表一類資源中的乙個資源。從程序到資源的有向邊叫請求邊,表示該程序申請乙個單位的該類資源;從資源到程序的邊叫分配邊,表示該類資源已經有乙個資源被分配給了該程序。

圖2-17 資源分配示例圖

在圖2-17所示的資源分配圖中,程序p1已經分得了兩個r1資源,並又請求乙個r2 資源;程序p2分得了乙個r1和乙個r2資源,並又請求乙個r1資源。

死鎖定理

可以通過將資源分配圖簡化的方法來檢測系統狀態s是否為死鎖狀態。簡化方法如下:

1) 在資源分配圖中,找出既不阻塞又不是孤點的程序pi(即找出一條有向邊與它相連,且該有向邊對應資源的申請數量小於等於系統中已有空閒資源數量。若所有的連線該程序的邊均滿足上述條件,則這個程序能繼續執行直至完成,然後釋放它所占有的所有資源)。消去它所有的請求邊和分配邊,使之成為孤立的結點。在圖2-18(a)中,p1是滿足這一條件的程序結點,將p1的所有邊消去,便得到圖248(b)所示的情況。

2) 程序pi所釋放的資源,可以喚醒某些因等待這些資源而阻塞的程序,原來的阻塞程序可能變為非阻塞程序。在圖2-17中,程序p2就滿足這樣的條件。根據第1) 條中的方法進行一系列簡化後,若能消去圖中所有的邊,則稱該圖是可完全簡化的,如圖2-18(c)所示。

s為死鎖的條件是當且僅當s狀態的資源分配圖是不可完全簡化的,該條件為死鎖定理。

死鎖的解除

一旦檢測出死鎖,就應立即釆取相應的措施,以解除死鎖。死鎖解除的主要方法有:

1) 資源剝奪法。掛起某些死鎖程序,並搶占它的資源,將這些資源分配給其他的死鎖程序。但應防止被掛起的程序長時間得不到資源,而處於資源匱乏的狀態。

2) 撤銷程序法。強制撤銷部分、甚至全部死鎖程序並剝奪這些程序的資源。撤銷的原則可以按程序優先順序和撤銷程序代價的高低進行。

圖2-18 資源分配圖的化簡

3) 程序回退法。讓一(多)個程序回退到足以迴避死鎖的地步,程序回退時自願釋放資源而不是被剝奪。要求系統保持程序的歷史資訊,設定還原點。

首先十分感謝c語言中文網,這是乙個不可多得的好**,作業系統的教**心很走心,其次就是作業系統是一門十分考驗人閱讀能力的一門神奇學科,好在前段日子練習看書效率比較高,要不然這次真的得翻車,最後我表示還得加把勁,只要還沒有畢業,一切皆有可能!

死鎖的處理策略 檢測和解除

如果系統中既不採取預防死鎖的措施,也不採取避免死鎖的措施,系統就很可能發生死鎖。在這種情況下,系統應當提供兩個演算法 死鎖檢測演算法 用於檢測系統狀態,以確定系統中是否發生了死鎖。死鎖解除演算法 當認定系統中已經發生了死鎖,利用該演算法可將系統從死鎖狀態中解脫岀來。為了能對系統是否已發生了死鎖進行檢...

死鎖的產生 防止 避免 檢測和解除

死鎖的產生條件 想知道死鎖怎麼產生,首先要了解什麼是死鎖 一 死鎖的定義 多個進行相互等待對方資源,在得到所有資源繼續執行之前,都不會釋放自己已有的資源,這樣造成了迴圈等待的現象,稱為死鎖。二 產生死鎖的四大必要條件 資源互斥 資源不共享 每個資源要麼已經分配給了乙個程序,要麼是可用的,只有這兩種狀...

作業系統2 4 4 死鎖的檢測和解除

為了能系統是否已經發生死鎖進行檢測,必須 1 用一種資料結構來儲存資源的請求和分配資訊 2 用一種演算法,利用上述資訊來檢測系統是否進入死鎖狀態 如果系統中剩餘的可用資源足夠滿足程序的需求,那麼這個程序暫時不會被堵塞,可以順利執行下去。如果這個程序執行結束了把資源歸還給系統,就可能使得某些正在等待的...