【作業系統】死鎖概述
死鎖: Deadlock
各併發程序彼此互相等待對方所擁有的資源,且這些併發程序在得到對方的資源之前不會釋放自己所擁有的資源。從而造成大家都想得到資源而又都得不到資源,各併發程序不能繼續向前推進的狀態。
死鎖與飢餓
飢餓(Starvation)指一個程序一直得不到資源。
死鎖和飢餓都是由於程序競爭資源而引起的。飢餓一般不佔有資源,死鎖程序一定佔有資源。
資源的型別
可重用資源和消耗性資源
可重用資源(永久性資源)
可被多個程序多次使用,如所有硬體。
- 只能分配給一個程序使用,不允許多個程序共享。
- 程序在對可重用資源的使用時,須按照請求資源、使用資源、釋放資源這樣的順序。
- 系統中每一類可重用資源中的單元數目是相對固定的,程序在執行期間,既不能建立,也不能刪除。
消耗性資源(臨時性資源)
是在程序執行期間,由程序動態的建立和消耗的。
- 消耗性資源在程序執行期間是可以不斷變化的,有時可能為 0;
- 程序在執行過程中,可以不斷地創造可消耗性資源的單元,將它們放入該資源類的緩衝區中,以增加該資源類的單元數目。
- 程序在執行過程中,可以請求若干個可消耗性資源單元,用於程序自己消耗,不再將它們返回給該資源類中。可消耗資源通常是由生產者程序建立,由消費者程序消耗。最典型的可消耗資源是用於程序間通訊的訊息。
可搶佔資源和不可搶佔資源
可搶佔資源
可搶佔資源指某程序在獲得這類資源後,該資源可以再被其他程序或系統搶佔。對於這類資源是不會引起死鎖的。
CPU 和記憶體均屬於可搶佔性資源。
不可搶佔資源
一旦系統把某資源分配給該程序後,就不能將它強行收回,只能在程序用完後自行釋放。
印表機等屬於不可搶佔性資源。
計算機系統中的死鎖
死鎖是多個程序在執行過程中因爭奪資源而造成的一種僵局(Deadly-Embrace) ) ,若無外力作用,這些程序都將無法向前推進。
死鎖產生的原因
- 競爭不可搶佔資源引起死鎖
- 競爭可消耗資源引起死鎖
- 程序間推進順序不當引起死鎖
競爭不可搶佔資源引起死鎖
競爭可消耗資源引起死鎖(以程序間通訊為例)
程序間推進順序不當引起死鎖
死鎖的定義
死鎖是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態,這些永遠在互相等待的程序稱為死鎖程序。
關於死鎖的一些結論:
- 參與死鎖的程序數至少為兩個
- 參與死鎖的所有程序均等待資源
- 參與死鎖的程序至少有兩個已經佔有資源
- 死鎖程序是系統中當前程序集合的一個子集
死鎖會浪費大量系統資源,甚至導致系統崩潰。
產生死鎖的必要條件
- 互斥條件:程序對所分配到的資源進行排它性使用。
- 請求和保持條件:程序已經保持了至少一個資源,但又提出了新的資源請求,而該資源已被其它程序佔有,此時請求程序被阻塞,但對自己已獲得的資源保持不放。
- 不可剝奪條件:程序已獲得的資源,在未使用完之前不能被搶佔,只能在程序使用完時由自己釋放。
- 環路等待條件:指在發生死鎖時,必然存在一個程序
-資源的迴圈鏈,即程序集合 P0,P1,P2, …,Pn 中的P0,正在等待一個 P1 佔用的資源,P1 正在等待 P2 佔用的資源, ……,Pn 正在等待已被 P0 佔用的資源。
處理死鎖的方法
- 鴕鳥方法:對死鎖視而不見,即忽略死鎖。
- 預防死鎖:通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的一個或幾個條件,來防止死鎖的發生。
- 避免死鎖:在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免死鎖的發生。
- 檢測死鎖:允許系統在執行過程中發生死鎖,但可設定檢測機構及時檢測死鎖的發生,並採取適當措施加以清除。
- 解除死鎖:當檢測出死鎖後,便採取適當措施將程序從死鎖狀態中解脫出來。
相關推薦
【作業系統】死鎖概述
死鎖: Deadlock 各併發程序彼此互相等待對方所擁有的資源,且這些併發程序在得到對方的資源之前不會釋放自己所擁有的資源。從而造成大家都想得到資源而又都得不到資源,各併發程序不能繼續向前推進的狀態。 死鎖與飢餓 飢餓(Starvation)指一
【作業系統】死等狀態、忙等狀態、有限等待、讓權等待
死等狀態:作業系統中的處理程序同步時遇到的一種問題。程序在有限時間內根本不能進入臨界區,而一直在嘗試進入,陷入一種無結果的等待狀態。(沒有進入臨界區的正在等待的某程序根本無法獲得臨界資源而進入程序,
【MySQL】死鎖問題分析
1、MySQL常用儲存引擎的鎖機制: MyISAM和MEMORY採用表級鎖(table-level locking) BDB採用頁面鎖(page-level locking)或表級鎖,預設為頁面鎖 InnoDB支援行級鎖(row-level locki
【作業系統】第三章 處理機排程與死鎖
1.處理機排程相關基本概念 處理機排程:多道程式環境下,動態的把處理機分配給就緒佇列中的一個程序使之執行。 (1)作業進入系統駐留在外存的後備佇列上,再至調入記憶體執行完畢,可能要經歷下述三級排程。 高階排程(High Scheduling)(又稱作業排程或長程排程(Long-Term Sc
【作業系統】銀行家演算法避免死鎖
(3) P4請求資源:P4發出請求向量Request4(3,3,0),系統按銀行家演算法進行檢查: ① Request4(3,3,0)≤Need4(4,3,1); ② Request4(3,3,0)≥Available(2,3,0),讓P4等待。(附:作業系統第三版這裡寫成了≤符號,需更正)
【作業系統】處理死鎖的方法
破壞死鎖的四個必要條件中的一個或幾個。 預防死鎖 破壞互斥條件 破壞請求和保持條件 破壞不可剝奪條件 破壞環路等待條件 破壞互斥條件 即允許多個程序同時訪問資源。但由於資源本身固有特性的限制,此方法不可行。 破壞請求和保持條件 第一種協議
【操作系統】死鎖的理解
use 系統 pad clas 自己 web lazy 銀行家算法 pkg 【操作系統】死鎖的理解 2017-05-08 若愚 今天分享給大家操作系統中死鎖的相關概念和解決辦法,內容來自與自己當時做的筆記和網絡~有問題可以後臺回復,會盡量回答哦 一、死鎖的概念
python全棧開發基礎【第二十五篇】死鎖,遞歸鎖,信號量,Event事件,線程Queue
random 問題 定時器 初始 .get rand true () 進入 一、死鎖現象與遞歸鎖 進程也是有死鎖的 所謂死鎖: 是指兩個或兩個以上的進程或線程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用, 它們都將無法推進下去。此時稱系統處於死鎖狀態或系
【作業系統】堆與記憶體管理概述
轉自: https://blog.csdn.net/bitboss/article/details/70154146 —–要說到作業系統的堆與記憶體的管理的話,那內容真的是海了去了,從開始的地方就能不停的擴充套件,但內容的重要性也是不可言喻的,本片部落格著重於總結以下
【Java併發基礎】死鎖
前言 我們使用加鎖機制來保證執行緒安全,但是如果過度地使用加鎖,則可能會導致死鎖。下面將介紹關於死鎖的相關知識以及我們在編寫程式時如何預防死鎖。 什麼是死鎖 學習作業系統時,給出死鎖的定義為兩個或兩個以上的執行緒在執行過程中,由於競爭資源而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。簡化一點說就
【bzoj5004】開鎖魔法II 組合數學+概率dp
sizeof pro double 預處理 lin mic 復雜度 時間復雜度 std 題目描述 有 $n$ 個箱子,每個箱子裏有且僅有一把鑰匙,每個箱子有且僅有一把鑰匙可以將其打開。現在隨機打開 $m$ 個箱子,求能夠將所有箱子打開的概率。 題解 組合數學+概率
【BZOJ5299】【CQOI2018】解鎖屏幕(動態規劃,狀態壓縮)
++ src 規劃 希望 getch cstring online androi 形狀 【BZOJ5299】【CQOI2018】解鎖屏幕(動態規劃,狀態壓縮) 題面 BZOJ 洛谷 Description 使用過Android手機的同學一定對手勢解鎖屏幕不陌生。Androi
【轉】【Redis】分散式鎖的幾種使用方式(redis、zookeeper、資料庫)
https://blog.csdn.net/u010963948/article/details/79006572?utm_source=blogxgwz9 https://blog.csdn.net/qq_37606901/article/details/79569250?utm_source
【轉】【MySQL】MySQL鎖詳解
https://www.cnblogs.com/luyucheng/p/6297752.html 一、概述 資料庫鎖定機制簡單來說,就是資料庫為了保證資料的一致性,而使各種共享資源在被併發訪問變得有序所設計的一種規則。對於任何一種資料庫來說都需要有相應的鎖定機制,所以MyS
【作業系統】PV 操作經典例題---三個程序之間的同步
問題: 總共有 讀入、執行、列印 三個程序,試用PV操作描述讀入B1列印B2的同步過程。 問題解讀: 這個問題就是說了這樣一件事:一個輸入B1,被操作之後,成為B2,將B2列印。怎樣用PV操作來說這件事。那麼新的問題來了:啥是個PV操作? 就拿這道題來解釋PV操作吧,我想列印一個值,
【作業系統】virtualBox安裝debian9.5的網路配置雜記
1 寫在最前面 virtualBox 5.2.16 debian 9.5 網路配置主要分兩部分: 1. 通過宿主機用ssh登陸debian  
【作業系統】第四、五章 儲存器管理和虛擬儲存器
一、儲存器的層次結構 儲存部件的層次 CPU暫存器 ———————— 快取記憶體:一種比記憶體塊的儲存裝置。將短時間內經常訪問的部分資料從記憶體放到快取記憶體中,減少CPU訪問記憶體的時間,是基於程式區域性性。 ———————— 主存 :儲存程序執行時的程式和資料 磁碟快取:記憶體的一部分,
【作業系統】第二章 程序管理2
1.經典同步問題 (1)生產者與消費者問題 buffer: array [ 0, …, n-1] of item; in, out: integer :=0, 0; Var mutex, empty, full: semaphore :=1, n, 0; producer : repeat
【作業系統】第二章 程序管理1
1.程序的基本概念 (1)程式順序執行時的特徵:順序性 封閉性:程式一旦開始執行,其計算結果不受外界因素影響 可再現性:程式執行只要初始條件一樣,不論如何停頓,重複多少次結果都一樣 (2)程式併發執行時的特徵:間斷性 失去封閉性:執行程式受其他程式影響 結果不可再現性 並非所有程式都能併發
【作業系統】第一章 作業系統引論
1. OS的作用: (1)作為使用者和計算機硬體系統之間的介面 使用者使用計算機的三種方式:圖形視窗方式、命令方式、系統呼叫方式 (2)OS作為計算機系統資源的管理者 資源 作業系統的主要功能 處理器————》 處理器管理:程序控制、程序同步、程序通訊、排程 儲存器————》 儲存器管理