站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        linux中產(chǎn)生死鎖的原因有哪些

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

        linux中產(chǎn)生死鎖的原因有哪些

        本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。

        一、死鎖的概念:

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

        二、產(chǎn)生死鎖的原因 :

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

        如:共享文件時引起死鎖

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

        linux中產(chǎn)生死鎖的原因有哪些

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

        如:進程通信時引起死鎖

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

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

        linux中產(chǎn)生死鎖的原因有哪些

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

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

        linux中產(chǎn)生死鎖的原因有哪些

        三、產(chǎn)生死鎖的必要條件

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

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

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

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

        四、死鎖的避免、預(yù)防和解決方法

        死鎖避免是在系統(tǒng)運行過程中注意避免死鎖最終的發(fā)生。

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

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

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

        1、有序分配資源

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

        (二)死鎖的預(yù)防:

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

        (三)解決死鎖的方法:

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

        具體有以下4種方法:

        1、預(yù)防死鎖。通過設(shè)置某些嚴(yán)格限制破壞死鎖產(chǎn)生的條件防止死鎖發(fā)生,但該方法會導(dǎo)致系統(tǒng)資源利用率過低

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

        3、檢測死鎖。允許系統(tǒng)運行過程中產(chǎn)生死鎖,通過在系統(tǒng)中設(shè)置檢測機構(gòu),及時檢測出死鎖是否真的發(fā)生,并能精確的確定與死鎖有關(guān)的進程與資源,然后采取措施解除死鎖。

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

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 久久久久99精品成人片牛牛影视 | 日韩精品亚洲人成在线观看 | 精品无码日韩一区二区三区不卡| 国产AV国片精品一区二区| 爽爽精品dvd蜜桃成熟时电影院| 精品国产一区二区三区2021| 精品一区二区久久| 国产精品网站在线观看免费传媒| 真实国产乱子伦精品一区二区三区| 国产成人精品免费大全| 国产精品福利一区二区| 国产精品无码一区二区三级| 亚洲国产精品无码一线岛国| 国产精品福利一区二区| 国产啪亚洲国产精品无码 | 国产精品国产三级专区第1集| 亚洲码国产精品高潮在线| 久久久久人妻一区精品果冻| 国产A级毛片久久久精品毛片| 久久最新精品国产| 奇米精品一区二区三区在线观看| 99国产欧美久久久精品蜜芽| 国内精品久久久久久久97牛牛 | 亚洲国产成人精品91久久久| 久久国产香蕉一区精品| 国产午夜精品久久久久九九电影| 午夜精品美女写真福利| 久久精品国产91久久综合麻豆自制 | 精品福利一区二区三区| 国产成人精品综合久久久| 最新国产精品亚洲| 尤物国产在线精品福利一区| 老司机99精品99| 国产成人精品日本亚洲专区| 国产精品爽爽ⅴa在线观看| 国产精品主播一区二区| 国产欧美在线观看精品一区二区 | 国产精品欧美亚洲韩国日本| 国产精品成人观看视频免费| www.99精品| 久久精品视频网|