死鎖(deadlock)定義:
在多道程式中,由於多個併發程序共享系統的資源,如果使用不當可能會造成一種僵局,即當某個程序提出資源的使用請求後,使得系統中一些程序處於無休止的阻塞狀態,在無外力的作用下,這些程序將無法繼續進行下去,這就是死鎖。
產生死鎖的環境:
1、多道程式設計技術
2、多個併發程序
3、資源共享(獨佔)
4、沒有外力可以借助
使用不當造成的死鎖示例
1、p、v操作不當
2、競爭資源
多個程序共享不可搶占的資源就可能引起死鎖
3、程序申請順序不當
發生程序的四個必要條件(2023年提出)
1、互斥條件
2、不剝奪條件
3、請求和保持
4、迴圈等待
死鎖的危害
輕則系統資源利用率嚴重下降,重則系統崩潰
解決死鎖的策略:
死鎖的預防
靜態的方法;在程序執行前採取的措施,通過設定某些限制條件,去破壞產生死鎖的四個必要條件之一,防止發生死鎖。
死鎖的避免
動態的方法;在程序執行過程中採取的措施,不需事先採取限制措施破壞產生死鎖的必要條件,而是在程序申請資源時用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。
死鎖的檢測和解除
這種方法預先並不採用任何限制措施,允許系統在執行過程中發生死鎖。但可通過系統設定的檢測機構及時檢測死鎖的發生,如檢測到死鎖,則採用撤銷程序等死鎖解除方法使系統正常工作。
死鎖的檢測和解除的提出原因:預防策略雖然可以杜絕死鎖發生,但是它提出的策略可能會或多或少影響到系統效率。
思想:可以容忍死鎖的發生,事後處理。
優點:靈活,效率高。
破壞死鎖產生的必要條件
破壞互斥條件
這種方法是通過使用spooling來解決問題的,spooling讓這個印表機變成了乙個虛擬裝置,當印表機正在被程序使用時,別的程序來申請,此時這個程序不會被阻塞,而是會在spooling系統這提交乙個申請表,相當於是在這排隊,這樣就間接破壞了死鎖的互斥條件。
侷限:破壞「互斥」比較困難,而且對很多資源行不通。
破壞不可剝奪條件
思想:允許程序還未執行完成時釋放已經占有的資源
方法:1、已經占有部分資源,還需要資源,如果得不到滿足,則釋放自己所占有的所有資源,以後再申請。
2、正在使用資源,有高優先順序的程序請求相同資源,則低優先順序程序放棄資源。
侷限:實現困難,為例恢復現場需要耗費很多時間和空間,因此只適合類似cpu、儲存器這樣的資源。
破壞請求和保持條件
常常採用靜態策略:程序建立時就由系統分配了所有需要的資源,然後才執行,並且以後沒有資源申請要求,程序執行完後,釋放資源。
缺點:系統效率低,併發性下降,資源浪費嚴重。
破壞迴圈等待條件:
方法:給資源編號,程序必須按序申請資源。
侷限:1、資源編號困難:儘管資源的按序分配方法消除了死鎖的問題,但給資源編號很困難,很難滿足每乙個程序的要求。
2、資源的編號很難和程序申請資源的順序一致:資源順序分配法是按資源編號申請資源,可能與實際使用資源的順序不一致,使得一些先申請的資源因暫時不用,而長時間閒置,降低了系統資源利用率。
結論:死鎖的預防是以破壞死鎖產生的必要條件為基本方法,從而防止死鎖發生的。其中由於對資源的申**上了諸多的限制,因此這種策略雖有一定的效果,但其資源的利用率和效率比較低,很難令人滿意。
死鎖的避免
思想允許死鎖產生的條件存在,但通過動態的、明智的選擇----在分配資源之前,系統判斷假若滿足程序的要求是否會發生死鎖,如果會,資源就不予分配,從而確保永遠不會到達死鎖點,避免死鎖的發生。
系統的狀態
安全狀態:指在某個時刻,當多個程序動態的申請資源時,如果存在一種順序,使得系統按照這種順序逐次地為每個程序分配資源後,每個程序都可以在最終得到最大需求量後,依次順利地完成。
與安全狀態相反的就是不安全狀態。
避免死鎖的關鍵就是:讓系統在動態分配資源的過程中,不要進入不安全狀態,
單銀行家演算法(banker's algorithm)
基本思想:借用了銀行借貸系統的分配策略,基於這樣的一些規則:
1、第一次申請需要宣告最大資金需求量
2、滿足最大需求後要及時歸還資金
3、客戶申請的貸款數量不超過它自己擁有的最大值時,銀行要盡量滿足客戶需求。
作業系統第五章
虛擬儲存器的基本概念 引入 實現 特徵 請求分頁儲存管理方式 硬體支援 位址變換 分配演算法 頁面置換演算法 效能分析 請求分段儲存管理方式 主要相同點是都要在記憶體與外存之間交換資訊 主要區別在於交換技術換出換進一般是整個程序 proc結構和共享正文段除外 因此乙個程序的大小受物理儲存器的限制 而...
第五章 死鎖
第五章 死鎖 1.死鎖的產生 領會死鎖的定義 在多道程式系統中,一組程序中的每乙個程序均無限期地等待被該組程序中的另乙個程序所占有且永遠不會釋放的資源 死鎖產生的原因 競爭資源,系統資源在分配時出現失誤,程序間對資源的相互爭奪所造成僵局 多道程式執行時,程序推進順序不合理 死鎖產生的必要條件 互斥條...
作業系統概念 第五章 CPU排程
排程準則 排程演算法 演算法評估 待補完 對於單處理器系統,cpu只能執行乙個程序,其他程序必須等待,直到cpu空閒為止。多道程式的目標是為了使任何時候都有程序在執行,使cpu的利用率最大化。cpu排程使程序在等待時 通常是等待某些io請求完成 從該程序拿走cpu的使用權交給另乙個程序,如此迴圈往復...