linux中產生死鎖的原因有:1、競爭不可搶佔資源而造成死鎖;2、競爭可消耗資源而造成死鎖;3、進程推進順序不當而造成死鎖(進程運行過程中,請求和釋放資源的順序不當,而導致進程死鎖)。
本教學操作環境:linux5.9.8系統、Dell G3電腦。
一、死鎖的概念:
如果一組行程(或執行緒)中的每一個行程(或執行緒)都在等待僅由該群組進程中的其他進程(或執行緒)才能引發的事件,那麼該群組進程(或執行緒)是死鎖的(Deadlock)。
二、產生死鎖的原因:
(一)競爭不可搶佔資源造成死鎖
如:共用檔案時造成死鎖
系統中擁有兩個流程P1和P2,它們都準備寫兩個檔案F1和F2。而這兩者都屬於可重複使用和不可搶佔性資源。如果進程P1在開啟F1的同時,P2進程開啟F2文件,當P1想開啟F2時由於F2已結被佔用而阻塞,當P2想開啟1時由於F1已結被佔用而阻塞,此時就會無線等待下去,形成死鎖。
(二)競爭消耗資源造成死鎖
如:進程通訊時造成死鎖
系統中擁有三個流程P1、P2和P3,m1、m2、m3是3可消耗資源。進程P1一方面產生訊息m1,將其傳送給P2,另一方面要從P3接收訊息m3。而進程P2一方面產生訊息m2,將其傳送給P3,另一方面要從P1接收訊息m1。類似的,進程P3一方面產生訊息m3,將其傳送給P1,另一方面要從P2接收訊息m2。
如果三個進程都先發送自己產生的訊息後接收別人發來的訊息,則可以順利的運行下去不會產生死鎖,但要是三個進程都先接收別人的訊息而不產生訊息則會永遠等待下去,產生死鎖。
(三)進程推進順序不當造成死鎖:進程運作過程中,請求和釋放資源的順序不當,而導致進程死鎖。
上圖中,若依曲線1的順序推進,兩個進程可順利完成;如果按曲線2的順序推進,兩個進程可順利完成;如果按曲線3的順序推進,兩個進程可順利完成;如果按曲線4的順序推進,兩個進程將進入不安全區D中,此時P1保持了資源R1,P2保持了資源R2,系統處於不安全狀態,如果繼續向前推進,則可能產生死鎖。
#三、產生死鎖的必要條件
(1)互斥條件。進程(執行緒)所申請的資源在一段時間內只能被一個行程(執行緒)鎖佔用。
(2)請求和保持條件。進程(執行緒)已經佔有至少一個資源,但又提出了新的資源請求,而該資源卻被其他行程(執行緒)佔用。
(3)不可搶佔條件(不可剝奪條件)。進程(執行緒)已獲得的資源在未使用完之前不能被搶佔。
(4)循環等待條件(環路等待條件)。當發生死鎖時,必然存在一個行程(執行緒)—-資源的循環鏈。
四、死鎖的避免、預防和解決方法
# 死鎖避免是在系統運作過程中註意避免死鎖最終的發生。
死鎖產生的前三個條件是死鎖產生的必要條件,也就是說要產生死鎖必須具備的條件,而不是存在這3個條件就一定產生死鎖,那麼只要在邏輯上迴避了第四個條件就可以避免死鎖。
死鎖避免的基本思想:系統對進程發出的每一個系統能滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源;如果分配後系統有可能發生死鎖,則不予分配;否則予以分配。
(一)常用的避免死鎖的方法:
1、有序分配資源
2、銀行家演算法,基本概念:在避免死鎖方法中允許進程動態地申請資源,但係統在進行資源分配之前,應先計算此次分配資源的安全性,若分配不會導致系統進入不安全狀態,則分配,否則等待。
(二)死鎖的預防:
#1、破壞「不可剝奪」條件:當一個程序佔有一個資源後又申請一個資源而無法滿足時,則退出原佔有的資源。
該策略實作起來複雜且代價大。因為一個資源在使用一段時間後被強行剝奪,會造成前階段工作失效。
2、破壞「請求與保留」條件:採用靜態的一次性資源分配策略,即進程運行前申請全部資源,滿足則運行,不然就等待,這樣就不會佔有且申請。
3、破壞「互斥」條件:該策略是幾乎不可能的,因為資源的互斥性是由其自身的性質決定的。
4、破壞「循環等待」條件:將系統中所有資源順序編號,一般原則是,較為稀缺、稀少的資源的編號較大。進程申請資源時,必須嚴格依照資源編號的順序進行,否則系統不予分配。即當一個行程只有得到編號較小的資源時,才能申請編號較大的資源;釋放資源時,應依編號遞減的次序進行。
(三)解決死鎖的方法:
目前有兩種方法,一是不讓死鎖發生;二是可以允許死鎖發生,發生後再加以解決。
具體有以下4種方法:
1、預防死鎖。透過設定某些嚴格限制破壞死鎖產生的條件來防止死鎖發生,但此方法會導致系統資源利用率過低
2、避免死鎖。在資源動態分配過程中,採用某種方法防止系統進入不安全狀態,避免發生死鎖。此方法以較弱的限制條件為代價,可獲得較高的資源利用。
3、偵測死鎖。允許系統運作過程中產生死鎖,透過在系統中設定偵測機構,及時偵測出死鎖是否真的發生,並能精確的確定與死鎖有關的進程與資源,然後採取措施解除死鎖。
4、解除死鎖。這是與檢測死鎖相匹配的措施,用於將進程從死鎖狀態下解脫出來。
相關推薦:《Linux影片教學》
以上是linux中產生死鎖的原因有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

掌握Linux操作的原因是其廣泛的應用場景和強大的功能。 1)Linux適合開發者、系統管理員和技術愛好者,應用於服務器管理、嵌入式系統和容器化技術。 2)學習Linux可以從文件系統結構、Shell使用、用戶權限管理和進程管理入手。 3)Linux命令行是其核心工具,通過Shell執行命令,如ls、mkdir、cd等,支持重定向和管道操作。 4)高級用法包括編寫自動化腳本,如備份腳本,使用tar命令和條件判斷。 5)常見錯誤包括權限、路徑和語法問題,可通過echo、set-x和$?調試。 6)性能優化建議

Linux系統的五大支柱是:1.內核,2.系統庫,3.Shell,4.文件系統,5.系統工具。內核管理硬件資源並提供基本服務;系統庫為應用程序提供預編譯函數;Shell是用戶與系統交互的接口;文件系統組織和存儲數據;系統工具用於系統管理和維護。

在Linux系統中,可以通過在啟動時按特定鍵或使用命令如“sudosystemctlrescue”進入維護模式。維護模式允許管理員在不受干擾的情況下進行系統維護和故障排除,如修復文件系統、重置密碼、修補安全漏洞等。

Linux初學者應掌握文件管理、用戶管理和網絡配置等基本操作。 1)文件管理:使用mkdir、touch、ls、rm、mv、cp命令。 2)用戶管理:使用useradd、passwd、userdel、usermod命令。 3)網絡配置:使用ifconfig、echo、ufw命令。這些操作是Linux系統管理的基礎,熟練掌握它們可以有效管理系統。

本文解釋瞭如何管理Linux中的Sudo特權,包括授予,撤銷和安全性最佳實踐。關鍵重點是安全和sudoers安全和限制訪問。Character數量:159

本文提供了有關使用Google Authenticator在Linux上設置兩因素身份驗證(2FA)的指南,詳細介紹了安裝,配置和故障排除步驟。它突出了2FA的安全益處,例如增強的SEC

本文討論了使用TOP,HTOP和VMSTAT監視Linux系統性能,並詳細介紹其獨特功能和自定義選項,以進行有效的系統管理。

文章討論了使用APT,YUM和DNF在Linux中管理軟件包,涵蓋安裝,更新和刪除。它比較了它們對不同分佈的功能和適用性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 Linux新版
SublimeText3 Linux最新版