死鎖:指多個程序在執行過程中,因爭奪資源而造成的一種僵局。當程序處於這種狀態時,若無外力作用,它們都將無法再向前推進
產生死鎖的原因可歸為兩點
1 競爭資源
可把系統中的資源分為兩類:
可剝奪和非剝奪性資源
可剝奪性資源:分配給程序後可以被高優先順序的程序剝奪。如cpu和主存。
不可剝奪性資源:分配給程序後只能在程序用完後釋放。如磁帶機、印表機等。
永久性資源和臨時性資源
永久性:印表機。可順序重複使用
臨時性:程序產生被其他程序短暫使用的資源,如資料資源:「生產者/消費者」演算法中的訊號量。。它可能引起死鎖。
2程序間推進順序非法
程序在執行中具有非同步性特徵:多個程序按向前推進的順序有兩種情況:
推進順序合法
推進順序非法
3產生死鎖的必要條件
互斥條件:程序對所分配到的資源進行排他性使用
請求和保持條件:程序已經保持了至少乙個資源,又提出新的資源請求,而新請求資源被其他程序占有只能造成自身程序阻塞,但對自己已獲得的其他資源保持不放,必然影響其他程序。
不剝奪條件:程序已獲得的資源未使用完之前不能被剝奪,只能在使用完時由自己釋放。
環路等待條件
破壞這四個條件即是處理死鎖的辦法
存在安全序列,即是安全狀態 否則是不安全狀態
4處理死鎖的基本方法
事先預防
預防死鎖
設定限制條件,破壞四個必要條件的乙個或幾個,預防發生死鎖。
較易實現。限制條件的嚴格也會導致系統資源利用率和系統吞吐量降低。
避免死鎖
不須事先限制,破壞四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。
這種事先加以較弱限制的方法,實現上有一定難度,但可獲較高的資源利用率及系統吞吐量,目前在較完善的系統中,常用此方法來避免發生死鎖。
事後預防
檢測死鎖。
允許系統執行過程中發生死鎖,但通過系統檢測機構可及時的檢測出,能精確確定與死鎖有關的程序和資源;然後採取適當的措施,從系統中將已發生的死鎖清除掉。
解除死鎖。
與死鎖檢測配套的一種措施。
常用的實施方法:撤銷或掛起一些程序,以便**一些資源並將他們分配給已阻塞程序,使之轉為就緒以繼續執行。
死鎖的檢測與解除措施,有可能使系統獲得較好的資源利用率和吞吐量(死鎖機率不一定很高),但在實現上難度也最大。
作業系統(第四版湯小丹)學習筆記
說起來大家可能不信,我校是先教作業系統再教數構 組成 網路的 老師講得也很水,摸不著頭腦,反正上課閒著也是閒著,正好又搞到了第三版的電子版,於是就試著在課上整理了這份筆記。這份筆記的作用也只是當知識點記錄型的,不知不覺就記了好幾十頁 重要的配圖基本找齊了,不過可能有清晰度和水印之類的問題 前期因為老...
c primer大綱(第四版)
第1章 快速入門 第一部分 基本語言 第2章 變數和基本型別 第3章 標準庫型別 第4章 陣列和指標 第5章 表示式 第6章 語句 第7章 函式 第8章 標準io庫 第二部分 容器和演算法 第9章 順序容器 第10章 關聯容器 第11章 泛型演算法 第三部分 類和資料抽象 第12章 類 第13章 複...
c prime重學(四)基於第四版
迭代器 1 插入迭代器 這類迭代器與容器繫結在一起,實現在容器中插入元素的功能 2 iostream迭代器 這類迭代器可與輸入或輸出流繫結在一起,用於迭代遍歷所關聯的io流。3 反向迭代器 這類迭代器事項向後遍歷。而不是向前遍歷。所有容器型別都定義了自己的 reverse iterator型別,由r...