OS復習筆記ch6-1

死鎖的原理

定義

一組進程中,其中每個進程因等待事件而阻塞,且所等待的事件只能被這組進程中的另一阻塞進程激發稱之為死鎖。

舉例如下
image.png

四個車輛希望緊迫的希望能很快通過,每輛車需要兩個象限的資源,然而四個車都只得到一個象限的資源,每輛車都過不去,此時就會發生阻塞。

死鎖的原因

并發進程的資源競爭
  • 資源數目不足
  • 資源分配策略,如動態分配
  • 進程對資源使用要互斥訪問

有關資源的競爭,比如上圖中四輛車過交叉路口、著名的哲學家就餐問題,還有在之前的章節中,我們講解互斥和同步的時候也舉了很多由于資源競爭的例子,這里不再贅述。

并發進程執行的順序

這里舉了一個雙進程的例子,理解執行順序對死鎖的影響
image.png
有兩個進程P、Q需要互斥地訪問A、B一段時間,各自的偽代碼如右圖所示


下圖是進程訪問圖示(圖中總共有6種路線,中間的/和\區域需要互斥訪問)
image.png

  • 1、2號線,表示Q進程先拿到了A和B的資源,P進程拿不到,只能等到Q進程釋放資源。同理,對于5、6號線路P進程先拿到資源,然后是Q進程等待,不會引發死鎖。

  • 3、4號線路是死鎖不可避免,兩者只是順序不同,所以我們就只看其中一條線路即可。3號線路中,其中P擁有A,Q擁有B。由于不能走到互斥訪問區域,所以接下來不管怎么走,P和Q兩個都會走到死鎖區域的邊界點,即圖中的(GetB,GetA)。
    image.png

解決方案
image.png
此時,可以通過修改P進程的代碼實現互斥,將Get B和release A交換順序,可以避免死鎖
這樣資源的訪問圖如下
image.png
兩者的不可訪問區域沒有重疊,進程對資源的獲得有隙可乘,就可以實現互斥訪問了

資源分類

  • 可重用資源的死鎖:內存,信號量等
  • 可消耗資源:中斷信號、message(消息)、I/O緩沖區

資源分配圖

image.png
箭頭表示資源的供給關系,左圖P1需要Ra資源,右圖P1占有Ra資源
image.png

圖c是資源數目不夠,然后形成了回路,相互得不到資源。
而圖d是資源數目充足,雖然表面是回路,但是下一時刻資源可以分配,也就沒有死鎖。

死鎖的條件

  • Mutual exclusion 互斥
    任一時刻只允許一個進程使用資源
  • Hold-and-wait 保持和請求
    進程在請求其余資源時,不主動釋放已經占用的資源
  • No preemption 不可剝奪
    進程已經占用的資源,不會被強制剝奪
  • Circular wait 循環等待
    資源分配圖不能化簡,存在一個進程之間的封閉環路。(注意:循環等待不一定導致死鎖,但是死鎖一定有循環等待)

這四個條件都是必要條件,只不過一般情況下,根據循環等待判斷死鎖,往往比較有充分性。

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

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

相關文章

golang調用aliyun的語音通話服務,復制直接使用

golang調用aliyun的語音通話服務 通過API使用語音通知/語音驗證碼——阿里云官方文檔SingleCallByTts - 發送語音驗證碼或文本轉語音類型的語音通知入門流程主要參數引入阿里云語音官方SDK-go版本完整代碼通過API使用語音通知/語音驗證碼——阿里云官方文檔 https://help.aliy…

電子電器架構 - AUTOSAR軟件架構介紹

電子電器架構 - AUTOSAR軟件架構介紹 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 屏蔽力是信息過載時代一個人的特殊競爭力,任何消耗你的人和事,多看一眼都是你的不對。非必要不費力證明自己…

MFC Winsock 類:MFC 中的網絡編程

目錄 概述 一.MFC Winsock 類簡介 1.MFC Winsock 類的主要功能 2.MFC Winsock 類的主要優點 3.MFC Winsock 類的主要缺點 4.MFC Winsock 類的主要類 5.MFC Winsock 類示例 二.CAsyncSocket 類 1.主要功能 異步通信 事件驅動 數據傳輸 套接字選項 2.常用函數 創建…

Maven多環境打包配置

一、啟動時指定環境配置文件 在啟動springboot應用的jar包時,我們可以指定配置文件,通常把配置文件上傳到linux服務器對應jar包的同級目錄,或者統一的配置文件存放目錄 java -jar your-app.jar --spring.config.location/opt/softs/applicat…

matlab 圖像的中值濾波

目錄 一、功能概述1、算法概述2、主要函數3、計算公式二、代碼實現三、結果展示四、參考鏈接本文由CSDN點云俠翻譯,放入付費專欄只為防不要臉的爬蟲。專欄值錢的不是本文,切勿因本文而訂閱。 一、功能概述 1、算法概述 中值濾波是圖像處理中一種常用的非線性運算,用于減少…

間接平差——以水準網平差為例 (python詳細過程版)

目錄 一、原理概述二、案例分析三、代碼實現四、結果展示本文由CSDN點云俠原創,間接平差——以水準網平差為例 (python詳細過程版),爬蟲自重。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲與GPT生成的文章。 一、原理概述 間接平差的函數模型和隨機模型…

openai api的初次嘗試

不懂已經不去百度了,現在直接問chatgpt就解決絕大多數問題了。 OpenAI API目前還沒有官方支持的npm庫,但是您可以使用現有的第三方npm庫進行OpenAI API的訪問和使用。這里提供一個npm庫 openai-node 的安裝和使用方法: 在命令行或終端中使用…

Util和utils

Util FieldStats 這段代碼定義了一個名為FieldStats的Java類,位于com.cqupt.software_1.Util包中。它使用了lombok庫的Data和AllArgsConstructor注解,這些注解幫助生成了getter、setter、toString等方法,以及包含所有參數的構造函數。類中有…

區塊鏈會議投稿資訊CCF A--USENIX Security 2025 截止9.4、1.22 附錄用率

會議名稱:34th USENIX Security Symposium CCF等級:CCF A類學術會議 類別:網絡與信息安全 錄用率:2023年接收率29%,2024錄用的區塊鏈相關文章請查看 Symposium Topics System security Operating systems security …

vue實現可拖拽移動懸浮球

封裝懸浮球組件&#xff0c;文件名s-icons.vue <template><div ref"icons" class"icons-container" :style"{ left: left px, top: top px }"><slot></slot></div> </template> <script> export …

國產化服務器開啟NTP功能并向NTP時鐘服務器同步

1.備份/etc/chrony.conf文件&#xff1b; cp -rp /etc/chrony.conf /etc/chrony.conf.bak.20240522 2.修改chrony.conf文件&#xff0c;增加NTP時鐘信息。&#xff08;客戶端填寫時鐘同步服務器的IP地址或者域名&#xff0c;我這里寫的IP地址。下面Allow NTP Client是只允許…

Mysql 的 binlog 有幾種格式?

MySQL 的二進制日志&#xff08;binlog&#xff09;有三種格式&#xff0c;每種格式都有其特定的用途和優缺點。以下是詳細描述&#xff1a; 1. STATEMENT 描述: 記錄的是 SQL 語句。特點: 每條更改數據的 SQL 語句都會記錄在 binlog 中。相對較小&#xff0c;因為只記錄了 S…

數字圖像處理岡塞雷斯第四版課后習題答案【英文原版】

第二章 第三章 . 第四章 傅里葉變換是一個線性過程&#xff0c;而計算梯度的平方根和平方根則是非線性運算。傅里葉變換可以用來計算微分的差值(如問題4.50)&#xff0c;但必須在空間域中直接計算平方和平方根值。 (a)實際上&#xff0c;由于高通操作&#xff0c;環有一個暗中心…

在已創建的git工程中添加.gitignore

有些代碼創建git時&#xff0c;為了方便將所有文件都加入了git管理&#xff0c;但實際有些庫的Makefile文件和編譯目錄的文件不需要加入管理&#xff0c;否則每次提交或編譯后&#xff0c;git diff將看到非常多的冗余信息。而我們修改的核心代碼都淹沒在這些大量無用的信息里面…

Golang:gammazero/deque是一個快速環形緩沖區deque(雙端隊列)實現

gammazero/deque是一個快速環形緩沖區deque&#xff08;雙端隊列&#xff09;實現。 文檔 https://github.com/gammazero/deque 安裝 go get github.com/gammazero/deque代碼示例 先入先出隊列 package mainimport ("fmt""github.com/gammazero/deque&quo…

留守兒童|基于SprinBoot+vue的留守兒童愛心網站(源碼+數據庫+文檔)

留守兒童愛心網站 目錄 基于SprinBootvue的留守兒童愛心網站 一、前言 二、系統設計 三、系統功能設計 1系統功能模塊 2管理員功能模塊 3用戶功能模塊 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取&#xff1a; 博主介紹&…

STM_HAL_TIM_IC_(輸入捕獲,捕獲PWM波)

介紹 TM32微控制器提供了輸入捕獲&#xff08;Input Capture&#xff09;功能&#xff0c;這是一種用于精確測量外部信號脈沖寬度和周期的強大技術。輸入捕獲通常與定時器&#xff08;如TIM&#xff09;的高級控制定時器&#xff08;TIM1和TIM8&#xff09;或通用定時器&#…

MySQL之Schema與數據類型優化和創建高性能的索引(一)

Schema與數據類型優化 只修改.frm文件 從前面的例子中可以看到修改表的.frm文件是很快的&#xff0c;但MySQL有時候會在沒有必要的時候也重建.如果愿意冒一些風險&#xff0c;可以讓MySQL做一些其他類型的修改而不用重建表。下面這些操作是有可能不需要重建表的: 1.移除(不是…

JavaEE-文件IO2

文章目錄 前言一、字節流1.1 讀文件1.2 寫文件 二、字符流2.1 讀文件2.2 寫文件 三、文件IO三道例題 前言 在這里對Java標準庫中對文件內容的操作進行總結&#xff0c;總體上分為兩部分&#xff0c;字節流和字符流&#xff0c;就是以字節為單位讀取文件和以字符為單位讀取文件…

[AI Google] 介紹 VideoFX,以及 ImageFX 和 MusicFX 的新功能

VideoFX 是來自 labs.google 的最新實驗&#xff0c;您可以查看音樂效果和圖像效果的新更新&#xff0c;現在在 110 多個國家可用。 生成式媒體正在改變人們構思創意并增強我們的創造力能力的方式。我們致力于與創作者和藝術家合作構建人工智能&#xff0c;以更好地理解這些生成…