OS學習筆記八:死鎖
一、死鎖的基本概念
1、死鎖的定義
一組程式中,每個程式都無限等待被該組程式中另一程式所佔有的資源,因而永遠無法得到的資源,這種現象稱為 程式死鎖 ,這一組程式就稱為死鎖程式
如果死鎖發生,會浪費大量系統資源,甚至導致系統崩潰
參與 死鎖的所有程式都在等待資源
參與死鎖的程式是當前系統中所有程式的子集
2、活鎖
活鎖指的是執行緒不斷重複執行相同的操作,但每次操作的結果都是失敗的。儘管這個問題不會阻塞執行緒,但是程式也無法繼續執行。
活鎖通常發生在處理事務訊息的應用程式中,如果不能成功處理這個事務那麼事務將回滾整個操作。解決活鎖的辦法是在每次重複執行的時候引入隨機機制,這樣由於出現的可能性不同使得程式可以繼續執行其他的任務。
活鎖不會被阻塞,而是不停檢測一個永遠不可能為真的條件。除去程式本身持有的資源外,活鎖狀態的程式會持續耗費寶貴的CPU時間。
3、產生死鎖的必要條件
互斥使用( 資源獨佔)
一個資源每次只能給一個程式使用
佔有且等待( 請求和保持,部分分配)
程式 在申請新的資源的同時保持對原有資源的佔有
不可搶佔( 不可剝奪)
資源 申請者不能強行的從資源佔有者手中奪取資源,資源只能由佔有者自願釋放
迴圈等待
存在 一個程式等待 佇列 {P 1 , P 2 , … , Pn},其中P 1 等待P 2 佔有的資源,P 2 等待P 3 佔有的資源,… ,Pn 等待P 1 佔有的資源,形成一個程式等待環路
4、死鎖定理
如果 資源分配圖中沒有環路,則系統中沒有死鎖,如果圖中存在環路則系統中可能存在死鎖
如果每個資源類中只包含一個資源例項,則環路是死鎖存在的充分必要條件
5、死鎖避免定義
在系統執行過程中, 對程式 發出的每一個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,若分配後系統發生死鎖或可能發生死鎖,則不予分配,否則予以分配。
安全狀態:
如果 系統中存在一個由所有程式構成的安全序列P 1 ,… ,P n ,則稱系統處於安全狀態
6、安全序列
一 個程式序列 {P 1 1 ,… ,P P n n } } 是安全的,如果對於每一個程式P P i i (1 ≤i i ≤n n ):它以後還需要 的資源量不超過系統當前剩餘資源量與所有程式P P j j (j < i i ) ) 當前佔有資源量之 和則稱系統處於安全狀態。
安全狀態一定沒有死鎖發生
7、銀行家演算法
詳見講義
8、哲學家就餐問題
詳見講義
本文整理自:《作業系統原理》北京大學_陳向群 講義
個人微信公眾號:
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- os/signal學習筆記筆記
- MySQL學習筆記:鎖MySql筆記
- JavaScript學習筆記(八)—— 補JavaScript筆記
- HexMap學習筆記(八)——水體筆記
- hive學習筆記之八:SqoopHive筆記OOP
- 【MySQL】死鎖案例之八MySql
- ES6學習筆記(八)【class】筆記
- Redis學習筆記八:叢集模式Redis筆記模式
- 【Flutter 學習筆記一】Mac OS 安裝 FlutterFlutter筆記Mac
- Golang 學習筆記八 錯誤異常Golang筆記
- Java學習筆記——第八天Java筆記
- PHP 第八週函式學習筆記PHP函式筆記
- 工作學習筆記(八)去重校驗筆記
- Java IO學習筆記八:Netty入門Java筆記Netty
- Mysql學習筆記-臨鍵鎖實驗MySql筆記
- node學習筆記第八節:模組化筆記
- 《C++ Primer》學習筆記(八):標準 IO 庫C++筆記
- 飛機的 PHP 學習筆記八:資料庫PHP筆記資料庫
- Jenkins學習筆記第八篇pipeline機制Jenkins筆記
- vue 3 學習筆記 (八)——provide 和 inject 用法及原理Vue筆記IDE
- numpy的學習筆記\pandas學習筆記筆記
- golang中關於死鎖的思考與學習Golang
- 2.4.1 死鎖的基本概念——作業系統筆記作業系統筆記
- mysql學習13:第八章:鎖MySql
- 爬蟲學習日記(八)爬蟲
- python自然語言處理學習筆記(八)—— 句法分析Python自然語言處理筆記
- HDL/FPGA學習筆記八:verilog中task與function的使用FPGA筆記Function
- 吳恩達機器學習筆記——八、神經網路吳恩達機器學習筆記神經網路
- 學習筆記八:vue之事件繫結加不加括號筆記Vue事件
- 學習筆記筆記
- OS 學習框架框架
- Mudo C++網路庫第八章學習筆記C++筆記
- Kubernetes學習筆記(八):Deployment--宣告式的升級應用筆記
- Redis基礎知識(學習筆記2--分散式鎖)Redis筆記分散式
- java學習記錄第八週Java
- 【學習筆記】數學筆記
- 《JAVA學習指南》學習筆記Java筆記
- 機器學習學習筆記機器學習筆記
- 死鎖