記錄一些關於死鎖的知識。
在一組程序發生死鎖的情況下,這組程序中的每乙個程序,都在等待另乙個程序所占有的資源。換句話說,每個程序所等待的事件是該組的其它程序釋放所占有的資源。
1.互斥條件:
程序對所分配的資源進行排它性的使用,即一段時間內,某個資源只能被乙個程序占用。
2.請求和保持條件:
程序已經保持了至少乙個資源,此時要申請新的資源,而該資源已經被其他程序占有。此時請求程序被阻塞,但是對自己占有的資源依然保持不放。
3.不可搶占條件:
程序已獲得的資源只能由自己釋放後,才能被其他程序所使用。其它程序不可搶占資源。
4.迴圈等待條件:
在產生死鎖時,必然存在乙個程序——資源的迴圈鏈。如程序集合中,po在等待p1的資源,p1在等待p2,依次類推,pn在等待p0的資源。
1.預防死鎖:
(1)破壞請求和保持條件:
第一種協議:所有程序在開始執行之前,一次性申請整個執行過程中的全部資源。但這種方法資源被嚴重浪費,惡化了資源的利用率,還會使程序產生飢餓現象。
第二種協議:允許乙個程序只獲得初期所需的資源後,便開始執行。在執行過程中,如果有使用完畢的程序,則將其逐步釋放,然後再請求新的資源。
(2)破壞不可搶占條件:
程序已占有的資源可以被暫時的釋放,或者說被搶占,從而破壞不可搶占條件。但是這個方法實現複雜,且需要很大的代價。資源被強佔,可能導致前一段工作的失效。而且還可能因為反覆的申請和釋放資源導致程序的執行被無限推遲,延長了程序的周轉時間,增加系統開銷,降低系統的吞吐量。
(3)破壞迴圈等待條件:
對系統所有的資源型別進行線性排序,排序後規定每個程序必須按照序號遞增的順序請求資源。
2.避免死鎖
銀行家演算法。
3.檢測死鎖
4.解除死鎖
(1)搶占資源:從乙個或多個程序中搶占足夠數量的資源,分配給死鎖程序,以解除死鎖狀態。
(2)終止程序。
2.1 終止所有死鎖程序。但是付出的代價會很大。
2.2 逐個終止程序
按照某種順序,逐個的終止程序,直至有足夠的資源,以打破迴圈等待,把系統從死鎖狀態解脫出來。
作業系統學習筆記 死鎖
參考資料 現代作業系統 3th edtion 原書第六章 死鎖 在 xmind 上記錄 不可搶占資源 每種型別多個資源 如何恢復 利用回滾 殺死程序 本質上不可能 單個資源的銀行家演算法 多個資源的銀行家演算法 占有和等待 不可搶占 環路等待 注1 死鎖的規範定義 如果乙個程序集合中的每個程序都在等...
作業系統學習 14 預防死鎖與死鎖解除
如前所述,詳情見 作業系統學習 13.死鎖的原因與必要條件,預防死鎖和避免死鎖這兩種方法實質上都是通過施加某些限制條件,來預防發生死鎖。兩者的主要差別在於 為預防死鎖所施加的限制條件較嚴格,這往往會影響程序的併發執行 而為避免死鎖所施加的限制條件則較寬鬆,這給程序的執行提供了較寬鬆的環境,有利於程序...
作業系統學習
看了幾天的資料,今天終於有時間把測試環境搭建起來。模擬機bochs nasm ultraiso 模擬機bochs的設定不難,在網上搜了些資料和參考了bochs的說明檔案,基本上就可以組建並執行起來。在網上下了個dos的映象,執行bochs從a盤啟動,之後把硬碟分割槽格式化,乙個最基礎的測試環境就完成...