91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux中產生死鎖的原因是什么

發布時間:2022-03-21 16:49:57 來源:億速云 閱讀:144 作者:iii 欄目:建站服務器

這篇“linux中產生死鎖的原因是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“linux中產生死鎖的原因是什么”文章吧。

linux中產生死鎖的原因有:1、競爭不可搶占資源而引起死鎖;2、競爭可消耗資源而引起死鎖 ;3、進程推進順序不當而引起死鎖(進程運行過程中,請求和釋放資源的順序不當,而導致進程死鎖)。

本教程操作環境:linux5.9.8系統、Dell G3電腦。

一、死鎖的概念:

如果一組進程(或線程)中的每一個進程(或線程)都在等待僅由該組進程中的其他進程(或線程)才能引發的事件,那么該組進程(或線程)是死鎖的(Deadlock)。

二、產生死鎖的原因 :

(一)競爭不可搶占資源引起死鎖

如:共享文件時引起死鎖

系統中擁有兩個進程P1和P2,它們都準備寫兩個文件F1和F2。而這兩者都屬于可重用和不可搶占性資源。如果進程P1在打開F1的同時,P2進程打開F2文件,當P1想打開F2時由于F2已結被占用而阻塞,當P2想打開1時由于F1已結被占用而阻塞,此時就會無線等待下去,形成死鎖。

linux中產生死鎖的原因是什么

(二)競爭可消耗資源引起死鎖

如:進程通信時引起死鎖

系統中擁有三個進程P1、P2和P3,m1、m2、m3是3可消耗資源。進程P1一方面產生消息m1,將其發送給P2,另一方面要從P3接收消息m3。而進程P2一方面產生消息m2,將其發送給P3,另一方面要從P1接收消息m1。類似的,進程P3一方面產生消息m3,將其發送給P1,另一方面要從P2接收消息m2。

如果三個進程都先發送自己產生的消息后接收別人發來的消息,則可以順利的運行下去不會產生死鎖,但要是三個進程都先接收別人的消息而不產生消息則會永遠等待下去,產生死鎖。

linux中產生死鎖的原因是什么

(三)進程推進順序不當引起死鎖:進程運行過程中,請求和釋放資源的順序不當,而導致進程死鎖。

上圖中,如果按曲線1的順序推進,兩個進程可順利完成;如果按曲線2的順序推進,兩個進程可順利完成;如果按曲線3的順序推進,兩個進程可順利完成;如果按曲線4的順序推進,兩個進程將進入不安全區D中,此時P1保持了資源R1,P2保持了資源R2,系統處于不安全狀態,如果繼續向前推進,則可能產生死鎖。

linux中產生死鎖的原因是什么

三、產生死鎖的必要條件

(1)互斥條件。進程(線程)所申請的資源在一段時間內只能被一個進程(線程)鎖占用。

(2)請求和保持條件。進程(線程)已經占有至少一個資源,但又提出了新的資源請求,而該資源卻被其他進程(線程)占用。

(3)不可搶占條件(不可剝奪條件)。進程(線程)已獲得的資源在未使用完之前不能被搶占。

(4)循環等待條件(環路等待條件)。在發生死鎖時,必然存在一個進程(線程)—-資源的循環鏈。

四、死鎖的避免、預防和解決方法

死鎖避免是在系統運行過程中注意避免死鎖最終的發生。

死鎖產生的前三個條件是死鎖產生的必要條件,也就是說要產生死鎖必須具備的條件,而不是存在這3個條件就一定產生死鎖,那么只要在邏輯上回避了第四個條件就可以避免死鎖。

死鎖避免的基本思想:系統對進程發出的每一個系統能滿足的資源申請進行動態檢查,并根據檢查結果決定是否分配資源;如果分配后系統有可能發生死鎖,則不予分配;否則予以分配。

(一)常用的避免死鎖的方法:

1、有序分配資源

2、銀行家算法,基本思想:在避免死鎖方法中允許進程動態地申請資源,但系統在進行資源分配之前,應先計算此次分配資源的安全性,若分配不會導致系統進入不安全狀態,則分配,否則等待。

(二)死鎖的預防:

1、破壞“不可剝奪”條件:當一個進程占有一個資源后又申請一個資源而無法滿足時,則退出原占有的資源。
該策略實現起來復雜且代價大。因為一個資源在使用一段時間后被強行剝奪,會造成前階段工作失效。
2、破壞“請求和保持”條件:采用靜態的一次性資源分配策略,即進程運行前申請全部資源,滿足則運行,不然就等待,這樣就不會占有且申請。
3、破壞“互斥”條件:該策略是幾乎不可能的,因為資源的互斥性是由其自身的性質決定的。
4、破壞“循環等待”條件:將系統中所有資源順序編號,一般原則是,較為稀缺、稀少的資源的編號較大。進程申請資源時,必須嚴格按照資源編號的順序進行,否則系統不予分配。即一個進程只有得到編號較小的資源時,才能申請編號較大的資源;釋放資源時,應按編號遞減的次序進行。

(三)解決死鎖的方法:

目前有兩種方法,一是不讓死鎖發生;二是可以允許死鎖發生,發生后再加以解決。

具體有以下4種方法:

1、預防死鎖。通過設置某些嚴格限制破壞死鎖產生的條件防止死鎖發生,但該方法會導致系統資源利用率過低

2、避免死鎖。在資源動態分配過程中,采用某種方法防止系統進入不安全狀態,避免發生死鎖。該方法以較弱的限制條件為代價,可獲得較高的資源利用。

3、檢測死鎖。允許系統運行過程中產生死鎖,通過在系統中設置檢測機構,及時檢測出死鎖是否真的發生,并能精確的確定與死鎖有關的進程與資源,然后采取措施解除死鎖。

4、解除死鎖。這是與檢測死鎖相配套的措施,用于將進程從死鎖狀態下解脫出來。

以上就是關于“linux中產生死鎖的原因是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙门县| 乌兰县| 汾西县| 绥阳县| 武功县| 莲花县| 清水河县| 乡宁县| 宁陕县| 上饶县| 云林县| 巴中市| 海安县| 贵溪市| 大理市| 海淀区| 侯马市| 丰镇市| 抚松县| 汉川市| 林周县| 太白县| 景泰县| 兴和县| 永登县| 克拉玛依市| 阿瓦提县| 庆阳市| 安龙县| 平江县| 松江区| 灵璧县| 峨山| 来宾市| 永泰县| 喀喇| 福建省| 札达县| 乌拉特后旗| 贵德县| 阿鲁科尔沁旗|