操作系統(8)死鎖

一、概念

? ? ? ?死鎖是指在一個進程集合中的每個進程都在等待只能由該集合中的其他進程才能引起的事件,而無限期地僵持下去的局面。在多任務環境中,由于資源分配不當,導致兩個或多個進程在等待對方釋放資源時陷入無限等待的狀態,這就是死鎖。

二、產生因素

  1. 系統資源有限:當系統中多個進程共享資源時,如打印機、公用隊列等,其數目不足以滿足所有進程的需求,會引起進程對資源的競爭而產生死鎖。
  2. 并發進程間的推進順序不當:進程在運行過程中,請求和釋放資源的順序不當,也會產生進程死鎖。
  3. 資源分配策略:資源的分配策略也可能導致死鎖的發生,如資源的分配是否公平、是否遵循一定的順序等。

三、必要條件

? ? ? 產生死鎖必須同時滿足以下四個必要條件:

  1. 互斥條件:進程對所分配到的資源進行排他性使用,即在一段時間內某資源僅能被一個進程占用。如果此時還有其他進程請求該資源,那么請求的進程只能等待,直到占有資源的進程用畢釋放。
  2. 占有和等待條件:進程已經持有至少一個資源,但又提出了新的資源請求,而該資源已被其他進程占有,此時請求進程阻塞,但又對自己已獲得的資源保持不放。
  3. 不剝奪條件:進程所獲得的資源在未使用完畢之前,不能被其他進程強行剝奪,而只能由獲得該資源的進程自己釋放。
  4. 環路等待條件:在發生死鎖時,必然存在一個進程-資源的環形鏈,即進程集合中的進程形成一種頭尾相接的環形等待資源關系。

四、死鎖的處理策略

  1. 死鎖預防

    • 破壞互斥條件:允許資源同時被多個進程訪問,但這對于某些資源(如打印機)來說是不可能的。
    • 破壞占有和等待條件:實行資源預先分配策略,即進程在運行前一次性向系統申請它所需要的全部資源,若所需全部資源得不到滿足,則不分配任何資源,此進程暫不運行。只有當系統能夠滿足當前進程所需的全部資源時,才一次性將所申請的資源全部分配給該進程。但是,這樣會導致資源利用率降低,并可能導致饑餓現象。
    • 破壞不剝奪條件:當一個進程占有了一部分資源,在申請新的資源而得不到滿足時,必須釋放所有占有的資源以便讓其他進程使用。但這種方法實現起來比較困難,且可能導致工作失效、增加系統開銷。
    • 破壞環路等待條件:采用資源有序分配法,對所有資源排序編號,所有進程對資源的請求必須嚴格按資源序號遞增的順序提出,即只有占用了小號資源才能申請大號資源。這種策略可以破壞環路等待條件,從而預防死鎖的發生。
  2. 死鎖避免

    ? ? ? ?死鎖避免方法允許系統中同時存在死鎖的三個必要條件,即互斥、占有且等待和非搶占。每當進程提出資源申請時,系統分析滿足該資源請求時系統是否會發生死鎖,若不會發生則實施分配,否則拒絕分配。銀行家算法就是一種避免死鎖的方法,它模擬銀行家貸款的策略來分配系統資源,以確保系統始終處于安全狀態。
  3. 死鎖檢測與解除

    ? ? ? ?死鎖檢測和解除對資源分配不加任何限制,也不采取死鎖避免措施。系統定時運行一個“死鎖檢測”程序,如果檢測到系統發生了死鎖,再采取措施解除它。解除死鎖的方法包括立即結束所有進程的執行并重新啟動操作系統、剝奪陷于死鎖的進程占用的資源但不撤銷它直到死鎖解除、撤銷陷于死鎖的所有進程并解除死鎖繼續運行等。此外,還可以使用進程-資源分配圖來檢測系統是否處于死鎖狀態,并采取相應的措施來解除死鎖。

五、總結

? ? ? ?死鎖是操作系統中一個復雜且重要的問題。為了避免和解決死鎖問題,我們需要深入理解死鎖的產生原因和必要條件,并采取相應的預防、避免、檢測和解除策略。在實際應用中,我們需要根據系統的具體需求和特點選擇合適的策略來確保系統的穩定性和可靠性。

?結語?????

藝術并非模仿生活

而是生活在模仿藝術

!!!

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

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

相關文章

Micropython 擴展C模塊<HelloWorld>

開發環境 MCU:Pico1(無wifi版)使用固件:自編譯版本開發環境:MacBook Pro Sonoma 14.5開發工具:Thonny 4.1.6開發語言:MicroPython 1.24 執行示例 在github上獲取micropython,我使…

并查集基礎

abstract 并查集(Union-Find Set)是一種數據結構,主要用于處理動態連通性問題(Dynamic Connectivity Problem),例如在圖論中判斷兩點是否屬于同一個連通分量,以及動態地合并集合。 它廣泛應用…

CloudberryDB(一)安裝部署多節點分布式數據庫集群

CloudberryDB: 一個 Greenplum Database 分布式數據庫開源版本的衍生項目, 針對開源 Greenplum Database 優化的地方, CloudberryDB制定了路線圖(https://github.com/orgs/cloudberrydb/discussions/369)并在逐步改…

解決Logitech G hub 無法進入一直轉圈的方案(2024.12)

如果你不是最新版本無法加載嘗試以下方案:刪除AppData 文件夾下的logihub文件夾 具體路徑:用戶名根據實際你的請情況修改 C:\Users\Administrator\AppData\Local 如果你有通過lua編譯腳本,記得備份!! ↓如果你是最新…

數據庫范式與反范式化:如何權衡性能與數據一致性

目錄 1. 什么是數據庫范式(Normalization)?第一范式(1NF)第二范式(2NF)第三范式(3NF) 2. 什么是反范式化(Denormalization)?3. 反范式…

Nmap使用總結

0X00 背景 nmap是測試中常用的網絡探測工具,但是這回簡單的操作,一直了解不深入,現在深入的了解和學習一下。 在文章結構上,我把平時常用的內容提前了,以便再次查閱的時候,比較方便。 0X01 安裝 nmap可…

【記錄49】vue2 vue-office在線預覽 docx、pdf、excel文檔

vue2 在線預覽 docx、pdf、excel文檔 docx npm install vue-office/docx vue-demi0.14.6 指定版本 npm install vue-office/docx vue-demi <template><VueOfficeDocx :src"pdf" style"height: 100vh;" rendere"rendereHandler" error&…

MVC模式的理解和實踐

在軟件開發中&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;模式是一種經典的設計模式&#xff0c;特別適用于構建用戶界面復雜的Web應用程序。MVC通過將應用程序的業務邏輯、數據顯示和用戶交互分離&#xff0c;使代碼結構更加清晰&#xff0c;易于維護和擴展…

[A-22]ARMv8/v9-SMMU多級頁表架構

ver0.1 [看前序文章有驚喜,關注W\X\G=Z+H=“浩瀚架構師”,可以解鎖全部文章] 前言 前文我們對SMMU的系統架構和基本功能做了簡要的介紹,現在大家大致對SMMU在基于ARM體系的系統架構下的總線位置和產品形態有了基本的了解。這里我們還是簡單做個前情回顧,從總線架構角度看…

【UE5 “RuntimeLoadFbx”插件】運行時加載FBX模型

前言 為了解決在Runtime時能夠直接根據FBX模型路徑直接加載FBX的問題&#xff0c;推薦一款名為“RuntimeLoadFBX”的插件。 用法 插件用法如下&#xff0c;只需要指定fbx的地址就可以在場景中生成Actor模型 通過指定輸入參數“Cal Collision”來設置FBX模型的碰撞 還可以通過…

(11)(3.1) ESC接地和接線注意事項

文章目錄 前言 1 歸納 2 電容式 3 電阻 前言 ESC 接地問題由 3 種形式的 ESC 信號/耦合問題組成&#xff0c;即電阻、電容和電感。在制造飛機時&#xff0c;應考慮這三個因素。 1 歸納 這是電流突然變化導致系統中出現大電壓尖峰的趨勢。電源系統中的電感主要是由 ESC 和…

精品基于Python實現的微信小程序校園導航系統-微信小程序

[含文檔PPT源碼等] [包運行成功永久免費答疑輔導] 《django微信小程序校園導航系統》該項目采用技術Python的django框架、mysql數據庫 &#xff0c;項目含有源碼、文檔、PPT、配套開發軟件、軟件安裝教程、項目發布教程、核心代碼介紹視頻等 軟件開發環境及開發工具&#xf…

Rstudio-server的安裝、配置、維護

一、安裝Rstudio-server (1)安裝R語言&#xff1a; sudo apt install r-base # 如果沒有管理員權限無法操作 # 這樣裝上R默認在/usr/bin/R其實基本上的流程都可以參考posit的官網&#xff08;也就是Rstudio的官網&#xff09;&#xff1a; https://posit.co/download/rstudio…

Python序列的應用(八):元組、字典

前言&#xff1a;在Python編程語言中&#xff0c;序列是一種非常重要的數據結構&#xff0c;它允許我們存儲和操作有序的數據集合。在前幾期的內容中&#xff0c;我們已經探討了列表&#xff08;List&#xff09;和集合&#xff08;Set&#xff09;這兩種序列的應用&#xff0c…

OpenCV 功能函數介紹

一&#xff0c; 二值化函數 功能&#xff1a; 用于對圖像進行二值化處理 參數&#xff1a; cv2.threshold(輸入你的圖像所對應的灰度圖&#xff0c; 閾值&#xff1a;是浮點還是整數取決予圖像的數據類型 最大值;高于閾值的像素值&#xff0c; 閾值類型&#xff1a;cv2.THR…

【Python】使用Selenium的find_element模塊獲取網頁上的大段文字和表格的方法(建議收藏!)

發現了一個使用Selenium的find_element模塊&#xff0c;快速獲取文字和表格的方法&#xff0c;很實在&#xff0c;以后爬網的時候&#xff0c;就不用beautifulSoup 和 pandas的read_html 混起來用了&#xff01; 文字部分&#xff1a;實現網絡節點下&#xff0c;某個節點下的其…

APP滲透測試記錄(一、Android應用基本構造)

Android應用基本構造 雷電模擬機進入 adb shell# 如果不是root權限 su一下 su 1.了解APK文件 安卓應用的擴展名為.apk(Android Application Package),它是一個包含多個文件和文件夾的數據存檔文件。 1.1 apk文件解壓后的目錄結構 AndroidManifest.xml:包含應用的大部分…

【AI知識】有監督學習之回歸任務(附線性回歸代碼及可視化)

1. 回歸的基本概念 在機器學習的有監督學習中&#xff0c;回歸&#xff08;Regression&#xff09;是一種常見的任務&#xff0c;它的目標是通過觀察數據來建立一個模型&#xff0c;用一個或多個自變量來預測因變量的值。 回歸分析通常用于&#xff1a; a.預測&#xff0c;基于…

fastadmin批量壓縮下載遠程視頻文件

后端代碼 // 批量下載并壓縮 public function downloadAll(){$ids input(ids);$row $this->model->where(id, in, $ids)->field(id,title,video_url)->select();if (!$row) {$this->error(記錄不存在);}$arr [];$tempFiles []; // 用來存儲臨時下載的視頻文…

邊緣計算+人工智能:讓設備更聰明的秘密

引言&#xff1a;日常生活中的“智能”設備 你是否發現&#xff0c;身邊的設備正變得越來越“聰明”&#xff1f; 早上醒來時&#xff0c;智能音箱已經根據你的日程播放舒緩音樂&#xff1b;走進廚房&#xff0c;智能冰箱提醒你今天的食材庫存&#xff1b;而在城市道路上&…