計算機操作系統——死鎖(詳細解釋和處理死鎖)

系列文章目錄

計算機操作系統-計算機系統中的死鎖


文章目錄

  • 系列文章目錄
  • 前言
  • 一、資源問題:
    • 計算機系統當中的死鎖:
  • 二、死鎖的定義、必要條件和處理方法:
    • 1.死鎖的定義:
    • 2.產生死鎖的必要條件:
    • 3.處理死鎖的方法:
  • 三、避免死鎖:
    • 1.系統安全狀態的定義:
    • 2.安全狀態的例子:
    • 3.不安全狀態的例子:
    • 4.利用銀行家算法避免死鎖:
    • 5.具體示例:
  • 總結


前言

? ?在第二章中,我們已經涉及到死鎖的概念,例如系統中只有一個掃描儀R1和一臺刻錄機R2,有兩個進程p1和p2,他們都準備將掃描的文檔刻錄在CD光盤上,進程1先請求掃描儀R1并獲得成功,進程2先請求刻錄機R2也獲得成功,后來P1又請求CD刻錄機,因它已被分配給了P2而阻塞,P2又請求掃描儀,也因被分配給了進程1而阻塞,此時兩個進程都被阻塞,雙方都希望對方能釋放出自己所需要的資源,但他們誰都因不能獲得自己所需的資源去繼續運行,從而無法釋放出自己占有的資源,并且一直處于這樣的僵持狀態而形成死鎖,又如,在第二章的哲學家進餐問題中,如果每個哲學家因饑餓都拿起了他們左邊的筷子,當每一個哲學家又試圖去拿起他們右邊的筷子時,將會因為無筷子可拿而無限期地等待,從而產生死鎖問題。接下來我們將對死鎖發生的原因,如何預防和避免死鎖等問題作較詳細的介紹。


一、資源問題:

? 在系統中有許多不同類型的資源,其中可以引起死鎖的主要是,需要采用互斥訪問方法的、不可以被搶占的資源,即前面介紹的臨界資源。系統中這類資源有很多,如打印機,數據文件,隊列,信號量等。

可搶占性資源和不可搶占性資源

(1)可搶占性資源(可剝奪)

? 可把系統中的資源分成兩類,一類是可搶占性資源,是指某進程在獲得這類資源后,該資源可以再被其他進程或系統搶占。例如優先級高的進程可以搶占優先級低的進程的處理機。又如可把一個進程從一個存儲區轉移到另一個存儲區,在內存緊張時,還可將一個進程從內存調出到外存上,即搶占該進程在內存空間,可見,CPU和主存均屬于可搶占性資源。對于這類資源是不會引起死鎖了。

(2)不可搶占性資源(非剝奪)

? ? ? 另一類資源是不可搶占性資源,即一旦系統把某資源分配給該進程,就不能將它強行收回,只能在進程用完后自行釋放。例如,當一個進程已開始刻錄光盤時,如果突然將刻錄機分配給另一個進程,其結果必然會損壞正在刻錄的光盤,因此只能等刻好光盤后由進程自己釋放刻錄機。另外磁帶機,打印機等也都屬于不可搶占性資源。

? 計算機系統中的死鎖:

? ?1.競爭不可搶占性資源引起死鎖

? ? 2.競爭可消耗資源引起死鎖

? ? 3.進程推進順序不當引起死鎖

二、死鎖的定義、必要條件和處理方法:

? ??

1.死鎖的定義:

死鎖指兩個或多個進程在執行過程中,因爭奪資源而陷入相互等待的僵局,若無外力干預,這些進程將無法向前推進。此時,系統處于停滯狀態,資源被無效占用。

2.產生死鎖的必要條件:

? ? 雖然進程在運行過程中可能會發生死鎖,但產生進程死鎖是必須具備一定條件的,綜上所述不難看出,產生死鎖必須同時具備下面四個必要條件,只要其中任一個條件不成立,死鎖就不會發生。

(1)互斥條件:進程對所分配到的資源進行排他性使用,即在一段時間內,某資源只能被一個進程占用。如果此時還有其他進程請求該資源,則請求進程只能等待,直至占用該資源的進程用畢釋放。

(2)請求和保持條件:進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源已被其他進程占有,此時請求進程被阻塞,但對自己已獲得的資源保持不放。

?(3)不可搶占條件:進程已獲得的資源在未使用之前不能被搶占,只能在進程使用完時由自己釋放。

?(4)循環等待條件:在發生死鎖時,必然存在一個進程——資源的循環鏈,即進程集合(p0,p1,p2....pn)中的p0正在等待一個p1占用的資源,p1正在等待p2占用的資源,.....,pn正在等待已被p0占用的資源。

3.處理死鎖的方法:

? (1)預防死鎖

? (2)避免死鎖

? ?(3)檢測死鎖

? ?(4)解除死鎖

上述的四種方法,從(1)到(4)對死鎖的防范程度逐漸減弱,但對應的是資源利用率的提高,以及進程因資源因素而阻塞的頻度下降。

? ?三、避免死鎖:

? ? 在死鎖避免方法中,把系統的狀態分為安全狀態和不安全狀態。當系統處于安全狀態時,可避免發生死鎖。反之,當系統處于不安全狀態時,則可能進入死鎖狀態。

? ? ?

系統安全狀態的定義??

??安全狀態(Safe State)??:
系統存在至少一個??安全序列(Safe Sequence)??,使得所有進程都能按此順序依次獲得所需資源并完成執行,而不會導致死鎖。

  • ??安全序列??:假設進程按順序?P1?,P2?,…,Pn??執行,每個進程?Pi??的資源請求都可以被當前可用資源滿足,且執行完成后會釋放所有資源,從而為后續進程提供更多可用資源。

??不安全狀態(Unsafe State)??:
不存在這樣的安全序列。此時系統可能進入死鎖,但??不安全狀態不一定會導致死鎖??(取決于后續資源請求的實際情況)。

? ?雖然并非所有非安全狀態都必然會轉為死鎖狀態,但當系統進入不安全狀態后,就有可能進入死鎖狀態(不一定)。反之,只要系統處于安全狀態,系統便不會進入死鎖狀態。

? ??

安全狀態的例子??

??場景- ??資源類型??:假設系統有 ??12 個同類型資源?(如內存塊)。
  • ??進程??:3 個進程?P1?,P2?,P3?。
  • ??資源分配狀態??:
    進程最大需求(Max)已分配(Allocated)剩余需求(Need = Max - Allocated)
    P11055
    P2422
    P3927
  • ??當前可用資源??:12?(5+2+2)=3。
??判斷安全狀態??
  1. ??初始可用資源??:3。
  2. ??尋找可進程??:
    • ??P2 的剩余需求為 2?? ≤ 可用資源 3 → 可分配。
    • 假設分配給 P2,P2 執行完成后釋放資源:可用資源變為?3+2=5。
  3. ??更新可用資源后繼續尋找??:
    • ??P1 的剩余需求為 5?? ≤ 可用資源 5 → 可分配。
    • P1 執行完成后釋放資源:可用資源變為?5+5=10。
  4. ??最后處理 P3??:
    • ??P3 的剩余需求為 7?? ≤ 可用資源 10 → 可分配。
    • P3 執行完成后釋放資源:可用資源變為?10+2=12。

??安全序列??:P2?→P1?→P3?(或其他可行順序)。
??結論??:系統處于安全狀態。

? ??

不安全狀態的例子??

假設在初始狀態下,進程?P3????先請求 1 個資源??:

??資源分配狀態變化??
  • ??已分配資源更新??:P3 的已分配從 2 → 3,剩余需求從 7 → 6。
  • ??可用資源??:12?(5+2+3)=2。
進程最大需求已分配剩余需求
P11055
P2422
P3936
??判斷是否存在安全序列??
  1. ??初始可用資源??:2。
  2. ??檢查可滿足的進程??:
    • P2 需要 2 ≤ 2 → 分配后可用資源變為?2+2=4。
  3. ??后續檢查??:
    • P1 需要 5 ≤ 4 → ??不滿足??。
    • P3 需要 6 ≤ 4 → ??不滿足??。
    • 無其他進程可分配。

??結論??:無法找到安全序列 → 系統處于不安全狀態。
此時系統會拒絕 P3 的資源請求,強制其等待,避免進入不安全狀態。

安全狀態的實際意義??

  1. ??動態資源分配??:
    每次資源分配前,系統通過算法(如銀行家算法)模擬分配后的狀態,僅允許導致安全狀態的請求。
  2. ??資源利用率??:
    安全狀態確保資源分配不會因過度保守而浪費,也不會因過度冒險導致死鎖。
  3. ??應用場景??:
    主要用于理論模型或關鍵系統(如某些數據庫管理系統),因實時計算安全狀態可能帶來性能開銷。

? ? ? ?利用銀行家算法避免死鎖:

1.銀行家算法中的數據結構:

? ?為了實現銀行家算法,在系統中必須設置這樣四個數據結構,分別用來描述系統中可利用的資源、所有進程對資源的最大需求,系統中的資源分配,以及所有進程還需要多少資源的情況。

(1)可利用資源向量Available。(可分配的)這是一個含有m個元素的數組,其中的每一個元素代表一類可利用的資源數目,其初始值時系統中配置的該類全部可用資源的數目,其數值隨該類的資源的分配和回收而動態地改變。如果Available[j] = k,則表示系統中現有Rj類資源 K個。

(2)最大需求矩陣Max。這是一個n*m的矩陣,它定義了系統中n個進程中的每一個進程對m類資源的最大需求。如果Max[i,j]=k,則表示進程i需要Rj類資源的最大數目為K。

?(3)分配矩陣Allocation(已經分配的)? 這也是一個n*m的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。如果Allocation[i,j] = k,則表示進程i當前已分得Rj類資源的數目為k。

? ?(4)需求矩陣Need。這也是一個n*m的矩陣,用來表示每一個進程尚需的各類資源數。如果Need[i,j]=k,則表示進程i還需要Rj類資源K個方能完成其任務。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Need[i,j] = Max[i,j]-Allocation[i,j]

?處理資源請求??

當進程?Pi??請求資源時,系統執行以下步驟:

??Step 1: 檢查請求合法性??

  • Request ≤?Need[i],繼續;否則拒絕(非法請求)。

??Step 2: 檢查可用資源是否足夠??

  • Request?≤?Available,繼續;否則讓進程等待。

一定要先滿足上面的兩個條件

??Step 3: 模擬分配資源??

  • 臨時更新數據:
    • Available=Available?Request
    • Allocation[i]=Allocation[i]+Request
    • Need[i]=]?Request

??Step 4: 執行安全狀態檢查??

  • 調用安全狀態檢查算法(見下文)。
  • 如果安全 → 正式分配資源;
  • 不安全 → 撤銷模擬分配,讓進程等待
安全狀態檢查算法??

目標:判斷是否存在一個??安全序列??,使得所有進程都能按順序完成。

??Step 1: 初始化??

  • 定義兩個向量:
    • Work=Available(當前可用資源副本)
    • Finish[1..n]=false(標記進程是否完成)

??Step 2: 尋找可完成的進程??

  • 遍歷所有進程,找到滿足以下條件的進程?Pi?:
    • Finish[i]=false
    • Need[i]≤Work(即進程的剩余需求 ≤ 當前可用資源)

??Step 3: 模擬進程完成??

  • 若找到?Pi?:
    • Work=Work+Allocation[i](釋放其占有的資源)
    • Finish[i]=true
    • 重復 Step 2,直到所有進程完成或找不到可完成的進程。

??Step 4: 判斷結果??

  • 如果所有?Finish[i]=true?→ ??系統安全??,存在安全序列;
  • 否則 → ??系統不安全??。

具體示例(三種資源類型)??

假設系統有三種資源 R1、R2、R3,初始狀態如下:

進程Max (R1, R2, R3)Allocation (R1, R2, R3)Need (R1, R2, R3)
P1(7, 5, 3)(0, 1, 0)(7, 4, 3)
P2(3, 2, 2)(2, 0, 0)(1, 2, 2)
P3(9, 0, 2)(3, 0, 2)(6, 0, 0)
P4(2, 2, 2)(2, 1, 1)(0, 1, 1)
P5(4, 3, 3)(0, 0, 2)(4, 3, 1)

??當前可用資源??:Available=(3,3,2)(總資源數減去已分配資源)。


??場景:進程 P1 請求資源 (0, 2, 0)??
  1. ??檢查合法性??:
    • Request=(0,2,0)≤Need[P1]=(7,4,3)?→ 合法。
  2. ??檢查可用性??:
    • Request=(0,2,0)≤Available=(3,3,2)?→ 合法。
  3. ??模擬分配??:
    • Available=(3,3,2)?(0,2,0)=(3,1,2)
    • Allocation[P1]=(0,1,0)+(0,2,0)=(0,3,0)
    • Need[P1]=(7,4,3)?(0,2,0)=(7,2,3)
  4. ??安全狀態檢查??:
    • ??Step 1??:初始化?Work=(3,1,2),Finish=[false,false,false,false,false]。
    • ??Step 2??:尋找可完成的進程:
      • ??P4??:Need[P4] = (0, 1, 1) ≤ Work = (3, 1, 2) → 符合條件。
    • ??Step 3??:模擬 P4 完成:
      • Work=(3,1,2)+Allocation[P4]=(2,1,1)→(5,2,3)
      • Finish[P4]=true
    • ??繼續尋找??:
      • ??P2??:Need[P2] = (1, 2, 2) ≤ Work = (5, 2, 3) → ??不滿足??(R2分量2 > Work的2)。
      • ??P3??:Need[P3] = (6, 0, 0) ≤ Work = (5, 2, 3) → ??不滿足??(R1分量6 > 5)。
      • ??P5??:Need[P5] = (4, 3, 1) ≤ Work = (5, 2, 3) → ??不滿足??(R2分量3 > 2)。
      • ??P1??:Need[P1] = (7, 2, 3) ≤ Work = (5, 2, 3) → ??不滿足??(R1分量7 > 5)。
    • ??無法完成所有進程?? → ??系統不安全??,拒絕請求!

總結

以上就是今天要講的內容,我們簡單的介紹了一下死鎖,包括定義和產生死鎖的必要條件,處理死鎖的方法,包括詳細講了避免死鎖的算法和系統安全狀態等等,接下來會持續更新的,謝謝大家。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76683.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Springboot項目正常啟動,訪問資源卻出現404錯誤如何解決?

我在自己的springboot項目中的啟動類上同時使用了SprinBootApplication和ComponentScan注解, 雖然項目能夠正常啟動,但是訪問資源后,返回404錯誤,隨后在啟動類中輸出bean,發現controller創建失敗: 而后我將ComponentScan去掉后資源就能訪問到了. 原因 SprinBootApplication本身…

第十五屆藍橋杯C/C++B組省賽真題講解(分享去年比賽的一些真實感受)

試題A——握手問題 一、解題思路 直接用高中學的排列組合思路 二、代碼示例 #include<bits/stdc.h> using namespace std; int fun(int n) {int sum0;for(int i0;i<n;i){for(int ji1;j<n;j)sum; } return sum; } int main() {cout<<fun(50)-fun(7); }三、…

動態規劃(6)——01背包問題

歡迎來到博主的專欄&#xff1a;算法解析 博主ID&#xff1a;代碼小號 文章目錄 牛客網——【模板】01背包題目解析題目1算法原理題目1題解代碼。問題2算法原理問題2題解代碼01背包問題的滾動數組優化 牛客網——【模板】01背包 題目解析 關于I/O相關的東西博主就不多贅述了&a…

TQTT_KU5P開發板教程---實現流水燈

文檔實現功能介紹 本文檔是學習本開發板的基礎&#xff0c;通過設置計數器使led0到led7依次閃爍&#xff0c;讓用戶初步認識vivado基本的開發流程以及熟悉項目的創建。本開發板的所有教程所使用的軟件都是vivado2024.1版本的。可以根據網上的教程下載與安裝。 硬件資源 此次教程…

Spring 中的 @Cacheable 緩存注解

1 什么是緩存 第一個問題&#xff0c;首先要搞明白什么是緩存&#xff0c;緩存的意義是什么。 對于普通業務&#xff0c;如果要查詢一個數據&#xff0c;一般直接select數據庫進行查找。但是在高流量的情況下&#xff0c;直接查找數據庫就會成為性能的瓶頸。因為數據庫查找的…

SEER: Self-Aligned Evidence Extraction for Retrieval-AugmentedGeneration

一、動機 如何從檢索到的段落中提取證據&#xff0c;以降低計算成本并提升最終的RAG性能&#xff0c;然而這一問題仍然具有挑戰性。 現有方法 嚴重依賴于基于啟發式的增強&#xff0c;面臨以下幾個問題&#xff1a; &#xff08;1&#xff09;由于手工制作的上下文過濾&…

毫米波測試套裝速遞!高效賦能5G/6G、新材料及智能超表面(RIS)研發

德思特&#xff08;Tesight&#xff09;作為全球領先的測試測量解決方案提供商&#xff0c;始終致力于為前沿技術研發提供高精度、高效率的測試工具。 針對毫米波技術在高頻通信、智能超表面&#xff08;RIS&#xff09;、新材料等領域的快速應用需求&#xff0c;我們推出毫米…

三維激光測量助力企業檢測效率提升3倍

智能制造與數字化浪潮席卷下&#xff0c;三維掃描技術已成為工業檢測領域不可或缺的工具。面對傳統檢測手段的精度瓶頸與效率局限&#xff0c;三維掃描儀&#xff0c;以毫米級精度、非接觸式測量與超高速掃描三大核心優勢&#xff0c;為汽車制造、航空航天、消費電子等行業的品…

SQL:Normalization(范式化)

目錄 Normalization&#xff08;范式化&#xff09; 為什么需要 Normalization&#xff1f; &#x1f9e9; 表格分析&#xff1a; 第一范式&#xff08;1NF&#xff09; 什么是第一范式&#xff08;First Normal Form&#xff09;&#xff1f; 第二范式&#xff08;2NF&am…

#MES系統運維問題分析思路

一套適用于90% MES運維現場問題的排查分析思維模型&#xff0c;叫做&#xff1a; &#x1f50d; MES系統問題分析七步法&#xff08;現場實戰適用&#xff09; ? 第一步&#xff1a;明確問題現象&#xff08;What&#xff09; 問題要說清楚&#xff0c;“不能操作”這種模糊描…

達夢數據庫-學習-18-ODBC數據源配置(Linux)

一、環境信息 名稱值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系統CentOS Linux release 7.9.2009 (Core)內存4G邏輯核數2DM版本1 DM Database Server 64 V8 2 DB Version: 0x7000c 3 03134284194-20240703-234060-20108 4 Msg Versi…

js 效果展示 拿去練手

自學完整功能&#xff0c;拿去練手。 鼠標移動放大 通過網盤分享的文件&#xff1a;圖片放大 鏈接: https://pan.baidu.com/s/1w8SjtKi4kUNDnZtRDfYMeQ?pwd95p6 提取碼: 95p6 通過網盤分享的文件&#xff1a;圖片動畫效果 鏈接: https://pan.baidu.com/s/1Pjphx-Cc4HQQNNujr…

使用 TFIDF+分類器 范式進行企業級文本分類(二)

1.開場白 上一期講了 TF-IDF 的底層原理&#xff0c;簡單講了一下它可以將文本轉為向量形式&#xff0c;并搭配相應分類器做文本分類&#xff0c;且即便如今的企業實踐中也十分常見。詳情請見我的上一篇文章 從One-Hot到TF-IDF&#xff08;點我跳轉&#xff09; 光說不練假把…

硬件設計-MOS管快速關斷的原因和原理

目錄 簡介&#xff1a; 來源&#xff1a; MOS管快關的原理 先簡單介紹下快關的原理&#xff1a; 同電阻時為什么關斷時間會更長 小結 簡介&#xff1a; 本章主要介紹MOS快速關斷的原理和原因。 來源&#xff1a; 有人會問&#xff0c;會什么要求快速關斷&#xff0c;而…

Linux進階命令

目錄 一、touch 1. 基本語法 2. 常用選項 二、which 1. 基本語法 2. 主要功能 3. 常用選項 三、find 1. 基本語法 2. 常用選項和表達式 四、more 1. 基本語法 2. 常用操作 3. 對比 more 和 less 五、grep 1. 基本語法 2. 常用選項 六、wc 1. 基本語法 2. 常…

阿里云實時計算Flink版產品體驗測評

阿里云實時計算Flink版產品體驗測評 什么是阿里云實時計算Flink應用場景實時計算Flink&自建Flink集群性價比開發效率運維管理企業安全 場景落地 什么是阿里云實時計算Flink 實時計算Flink大家可能并不陌生&#xff0c;在實時數據處理上&#xff0c;可能會有所接觸&#xf…

用戶登錄不上linux服務器

一般出現這種問題&#xff0c;重新用root用戶修改lsy用戶的密碼即可登錄&#xff0c;但是當修改了還是登錄不了的時候&#xff0c;去修改一個文件用root才能修改&#xff0c; 然后在最后添加上改用戶的名字&#xff0c;例如 原本是只有user的&#xff0c;現在我加上了lsy了&a…

Android Jetpack架構組件——用Compose工具包構建基本的布局

推薦文章 構建基本布局 | Android Basics Compose - First Android app | Android Developers 向 Android 應用添加圖片 | Android Developers

SLAM(七)-卡爾曼濾波

SLAM&#xff08;七&#xff09;-卡爾曼濾波 一、卡爾曼濾波(KF)二、擴展卡爾曼濾波(EKF)三、誤差狀態卡爾曼濾波(ESKF) 參考《概率機器人》、《Principles of GNSS&#xff0c;lnertial and Multisensor lntegrated Navigation Systems (Second Edition)》 一、卡爾曼濾波(KF)…

Electron 應用太重?試試 PakePlus 輕裝上陣

Electron 作為將 Web 技術帶入桌面應用領域的先驅框架&#xff0c;讓無數開發者能夠使用熟悉的 HTML、CSS 和 JavaScript 構建跨平臺應用。然而&#xff0c;隨著應用規模的擴大&#xff0c;Electron 應用的性能問題逐漸顯現——內存占用高、啟動速度慢、安裝包體積龐大&#xf…