女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

死鎖的處理策略有哪些

xCb1_yikoulinux ? 來源:一口Linux ? 作者:一口Linux ? 2022-07-01 10:19 ? 次閱讀

一、死鎖的處理策略——預(yù)防死鎖

(一)破壞互斥條件

互斥條件:只有對必須互斥使用的資源的爭搶才會導(dǎo)致死鎖。

如果把只能互斥使用的資源改造為允許共享使用,則系統(tǒng)不會進(jìn)入死鎖狀態(tài)。比如: SPOOLing技術(shù)。操作系統(tǒng)可以采用 SPOOLing 技術(shù)把獨(dú)占設(shè)備在邏輯上改造成共享設(shè)備。比如,用SPOOLing技術(shù)將打印機(jī)改造為共享設(shè)備…

ec9c8f0c-f826-11ec-ba43-dac502259ad0.png

該策略的缺點(diǎn):并不是所有的資源都可以改造成可共享使用的資源。并且為了系統(tǒng)安全,很多地方還必須保護(hù)這種互斥性。因此,很多時候都無法破壞互斥條件。

(二)破壞不剝奪條件

不剝奪條件:進(jìn)程所獲得的資源在未使用完之前,不能由其他進(jìn)程強(qiáng)行奪走,只能主動釋放。

破壞不剝奪條件:

①、方案一:當(dāng)某個進(jìn)程請求新的資源得不到滿足時,它必須立即釋放保持的所有資源,待以后需要時再重新申請。也就是說,即使某些資源尚未使用完,也需要主動釋放,從而破壞了不可剝奪條件。

②、方案二:當(dāng)某個進(jìn)程需要的資源被其他進(jìn)程所占有的時候,可以由操作系統(tǒng)協(xié)助,將想要的資源強(qiáng)行剝奪。這種方式一般需要考慮各進(jìn)程的優(yōu)先級(比如:剝奪調(diào)度方式,就是將處理機(jī)資源強(qiáng)行剝奪給優(yōu)先級更高的進(jìn)程使用)

該策略的缺點(diǎn):

①、實(shí)現(xiàn)起來比較復(fù)雜。

②、釋放已獲得的資源可能造成前一階段工作的失效。因此這種方法一般只適用于易保存和恢復(fù)狀態(tài)的資源,如CPU

③、反復(fù)地申請和釋放資源會增加系統(tǒng)開銷,降低系統(tǒng)吞吐量。

④、若采用方案一,意味著只要暫時得不到某個資源,之前獲得的那些資源就都需要放棄,以后再重新申請。如果一直發(fā)生這樣的情況,就會導(dǎo)致進(jìn)程饑餓。

(三)破壞請求和保持條件

請求和保持條件:進(jìn)程已經(jīng)保持了至少一個資源,但又提出了新的資源請求,而該資源又被其他進(jìn)程占有,此時請求進(jìn)程被阻塞,但又對自己已有的資源保持不放。

可以采用靜態(tài)分配方法,即進(jìn)程在運(yùn)行前一次申請完它所需要的全部資源,在它的資源未滿足前,不讓它投入運(yùn)行。一旦投入運(yùn)行后,這些資源就一直歸它所有,該進(jìn)程就不會再請求別的任何資源了。

該策略實(shí)現(xiàn)起來簡單,但也有明顯的缺點(diǎn):

有些資源可能只需要用很短的時間,因此如果進(jìn)程的整個運(yùn)行期間都一直保持著所有資源,就會造成嚴(yán)重的資源浪費(fèi),資源利用率極低。另外,該策略也有可能導(dǎo)致某些進(jìn)程饑餓。

ecafc5e0-f826-11ec-ba43-dac502259ad0.jpg

(四)破壞循環(huán)等待條件

循環(huán)等待條件:存在一種進(jìn)程資源的循環(huán)等待鏈,鏈中的每一個進(jìn)程已獲得的資源同時被下一個進(jìn)程所請求。

可采用順序資源分配法。首先給系統(tǒng)中的資源編號,規(guī)定每個進(jìn)程必須按編號遞增的順序請求資源,同類資源(即編號相同的資源)一次申請完。

原理分析:一個進(jìn)程只有已占有小編號的資源時,才有資格申請更大編號的資源。按此規(guī)則,已持有大編號資源的進(jìn)程不可能逆向地回來申請小編號的資源,從而就不會產(chǎn)生循環(huán)等待的現(xiàn)象。

eccb70ec-f826-11ec-ba43-dac502259ad0.jpg

該策略的缺點(diǎn):

①、不方便增加新的設(shè)備,因?yàn)榭赡苄枰匦路峙渌械木幪枺?/p>

②、進(jìn)程實(shí)際使用資源的順序可能和編號遞增順序不一致,會導(dǎo)致資源浪費(fèi);

③、必須按規(guī)定次序申請資源,用戶編程麻煩。

二、死鎖的處理策略——避免死鎖

ecde5248-f826-11ec-ba43-dac502259ad0.png

(一)什么是安全序列

ed0a9d8a-f826-11ec-ba43-dac502259ad0.png

ed3b99ee-f826-11ec-ba43-dac502259ad0.png

ed57af8a-f826-11ec-ba43-dac502259ad0.png

ed830b12-f826-11ec-ba43-dac502259ad0.png

(二)安全序列、不安全狀態(tài)、死鎖的聯(lián)系

edb5c98a-f826-11ec-ba43-dac502259ad0.png

所謂安全序列,就是指如果系統(tǒng)按照這種序列分配資源,則每個進(jìn)程都能順利完成。只要能找出一個安全序列,系統(tǒng)就是安全狀態(tài)。當(dāng)然,安全序列可能有多個。

如果分配了資源之后,系統(tǒng)中找不出任何一個安全序列,系統(tǒng)就進(jìn)入了不安全狀態(tài)。這就意味著之后可能所有進(jìn)程都無法順利的執(zhí)行下去。當(dāng)然,如果有進(jìn)程提前歸還了一些資源,那系統(tǒng)也有可能重新回到安全狀態(tài),不過我們在分配資源之前總是要考慮到最壞的情況。【比如A 先歸還了10億,那么就有安全序列T→B → A】

如果系統(tǒng)處于安全狀態(tài),就一定不會發(fā)生死鎖。如果系統(tǒng)進(jìn)入不安全狀態(tài),就可能發(fā)生死鎖(處于不安全狀態(tài)未必就是發(fā)生了死鎖,但發(fā)生死鎖時一定是在不安全狀態(tài))

因此可以在資源分配之前預(yù)先判斷這次分配是否會導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài),以此決定是否答應(yīng)資源分配請求。這也是“銀行家算法”的核心思想。

(三)銀行家算法

銀行家算法是荷蘭學(xué)者 Dijkstra 為銀行系統(tǒng)設(shè)計(jì)的,以確保銀行在發(fā)放現(xiàn)金貸款時,不會發(fā)生不能滿足所有客戶需要的情況。后來該算法被用在操作系統(tǒng)中,用于避免死鎖。

核心思想:在進(jìn)程提出資源申請時,先預(yù)判此次分配是否會導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài)。如果會進(jìn)入不安全狀態(tài),就暫時不答應(yīng)這次請求,讓該進(jìn)程先阻塞等待。

edcec494-f826-11ec-ba43-dac502259ad0.png

1. 實(shí)現(xiàn)步驟

ede34a68-f826-11ec-ba43-dac502259ad0.png

ee06d424-f826-11ec-ba43-dac502259ad0.png

ee384c52-f826-11ec-ba43-dac502259ad0.png

以此類推,共五次循環(huán)檢查即可將5個進(jìn)程都加入安全序列中,最終可得一個安全序列。該算法稱為安全性算法。可以很方便地用代碼實(shí)現(xiàn)以上流程,每一輪檢查都從編號較小的進(jìn)程開始檢查。實(shí)際做題時可以更快速的得到安全序列。

2. 銀行家算法示例(手算)

手算(找到安全系列)

ee6797aa-f826-11ec-ba43-dac502259ad0.png

手算(找不到安全系列)

ee8aea7a-f826-11ec-ba43-dac502259ad0.png

3. 代碼實(shí)現(xiàn)

假設(shè)系統(tǒng)中有 n 個進(jìn)程,m 種資源

每個進(jìn)程在運(yùn)行前先聲明對各種資源的最大需求數(shù),則可用一個 n*m 的矩陣(可用二維數(shù)組實(shí)現(xiàn))表示所有進(jìn)程對各種資源的最大需求數(shù)。不妨稱為最大需求矩陣 Max,Max[i, j]=K 表示進(jìn)程 Pi 最多需要 K 個資源Rj。同理,系統(tǒng)可以用一個 n*m 的分配矩陣 Allocation表示對所有進(jìn)程的資源分配情況。Max – Allocation =Need 矩陣,表示各進(jìn)程最多還需要多少各類資源。

另外,還要用一個長度為m的一維數(shù)組 Available 表示當(dāng)前系統(tǒng)中還有多少可用資源。

某進(jìn)程Pi向系統(tǒng)申請資源,可用一個長度為m的一維數(shù)組 Requesti表示本次申請的各種資源量。

eeac9062-f826-11ec-ba43-dac502259ad0.png

eecad266-f826-11ec-ba43-dac502259ad0.png

數(shù)據(jù)結(jié)構(gòu):

①、長度為 m 的一維數(shù)組 Available 表示還有多少可用資源

②、n*m 矩陣 Max 表示各進(jìn)程對資源的最大需求數(shù)

③、n*m 矩陣 Allocation 表示已經(jīng)給各進(jìn)程分配了多少資源

④、Max – Allocation = Need 矩陣表示各進(jìn)程最多還需要多少資源

⑤、用長度為 m 的一位數(shù)組 Request 表示進(jìn)程此次申請的各種資源數(shù)

銀行家算法步驟:

①、檢查此次申請是否超過了之前聲明的最大需求數(shù)

②、檢查此時系統(tǒng)剩余的可用資源是否還能滿足這次請求

③、試探著分配,更改各數(shù)據(jù)結(jié)構(gòu)

④、用安全性算法檢查此次分配是否會導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài)

安全性算法步驟:

①、檢查當(dāng)前的剩余可用資源是否能滿足某個進(jìn)程的最大需求,如果可以,就把該進(jìn)程加入安全序列,并把該進(jìn)程持有的資源全部回收。

②、不斷重復(fù)上述過程,看最終是否能讓所有進(jìn)程都加入安全序列。

系統(tǒng)處于不安全狀態(tài)未必死鎖,但死鎖時一定處于不安全狀態(tài)。系統(tǒng)處于安全狀態(tài)一定不會死鎖。

三、死鎖的處理策略——檢測和解除

eef17d3a-f826-11ec-ba43-dac502259ad0.png

如果系統(tǒng)中既不采取預(yù)防死鎖的措施,也不采取避免死鎖的措施,系統(tǒng)就很可能發(fā)生死鎖。在這種情況下,系統(tǒng)應(yīng)當(dāng)提供兩個算法:

①死鎖檢測算法:用于檢測系統(tǒng)狀態(tài),以確定系統(tǒng)中是否發(fā)生了死鎖。

②死鎖解除算法:當(dāng)認(rèn)定系統(tǒng)中已經(jīng)發(fā)生了死鎖,利用該算法可將系統(tǒng)從死鎖狀態(tài)中解脫出來。

(一)死鎖的檢測

為了能對系統(tǒng)是否已發(fā)生了死鎖進(jìn)行檢測,必須:

①用某種數(shù)據(jù)結(jié)構(gòu)來保存資源的請求和分配信息;

②提供一種算法,利用上述信息來檢測系統(tǒng)是否已進(jìn)入死鎖狀態(tài)。

ef18ea0a-f826-11ec-ba43-dac502259ad0.png

如果系統(tǒng)中剩余的可用資源數(shù)足夠滿足進(jìn)程的需求,那么這個進(jìn)程暫時是不會阻塞的,可以順利地執(zhí)行下去。

如果這個進(jìn)程執(zhí)行結(jié)束了把資源歸還系統(tǒng),就可能使某些正在等待資源的進(jìn)程被激活,并順利地執(zhí)行下去。相應(yīng)的,這些被激活的進(jìn)程執(zhí)行完了之后又會歸還一些資源,這樣可能又會激活另外一些阻塞的進(jìn)程…

ef371e58-f826-11ec-ba43-dac502259ad0.png

如果按上述過程分析,最終能消除所有邊,就稱這個圖是可完全簡化的。此時一定沒有發(fā)生死鎖(相當(dāng)于能找到一個安全序列)

ef63d27c-f826-11ec-ba43-dac502259ad0.png

如果最終不能消除所有邊,那么此時就是發(fā)生了死鎖

最終還連著邊的那些進(jìn)程就是處于死鎖狀態(tài)的進(jìn)程。

ef8268d6-f826-11ec-ba43-dac502259ad0.png

(二)死鎖的解除

一旦檢測出死鎖的發(fā)生,就應(yīng)該立即解除死鎖。

補(bǔ)充:并不是系統(tǒng)中所有的進(jìn)程都是死鎖狀態(tài),用死鎖檢測算法化簡資源分配圖后,還連著邊的那些進(jìn)程就是死鎖進(jìn)程

解除死鎖的主要方法有:

①、 資源剝奪法 。掛起(暫時放到外存上)某些死鎖進(jìn)程,并搶占它的資源,將這些資源分配給其他的死鎖進(jìn)程。但是應(yīng)防止被掛起的進(jìn)程長時間得不到資源而饑餓。

②、 撤銷進(jìn)程法(或稱終止進(jìn)程法) 。強(qiáng)制撤銷部分、甚至全部死鎖進(jìn)程,并剝奪這些進(jìn)程的資源。這種方式的優(yōu)點(diǎn)是實(shí)現(xiàn)簡單,但所付出的代價(jià)可能會很大。因?yàn)橛行┻M(jìn)程可能已經(jīng)運(yùn)行了很長時間,已經(jīng)接近結(jié)束了,一旦被終止可謂功虧一簣,以后還得從頭再來。

③、 進(jìn)程回退法 。讓一個或多個死鎖進(jìn)程回退到足以避免死鎖的地步。這就要求系統(tǒng)要記錄進(jìn)程的歷史信息,設(shè)置還原點(diǎn)。

efacbd48-f826-11ec-ba43-dac502259ad0.png

原文標(biāo)題:死鎖的處理策略—預(yù)防死鎖、避免死鎖、檢測和解除死鎖

文章出處:【微信公眾號:一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7091

    瀏覽量

    124958
  • 死鎖
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    8178
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4887

    瀏覽量

    70259

原文標(biāo)題:死鎖的處理策略—預(yù)防死鎖、避免死鎖、檢測和解除死鎖

文章出處:【微信號:yikoulinux,微信公眾號:一口Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    操作系統(tǒng)中進(jìn)程調(diào)度策略有哪幾種

    操作系統(tǒng)中進(jìn)程調(diào)度策略有哪幾種? 求大神指點(diǎn)啊
    發(fā)表于 11-07 21:18

    FPGA設(shè)計(jì)應(yīng)用及優(yōu)化策略有哪些?

    EDA技術(shù)具有什么特征?FPGA是什么原理?FPGA設(shè)計(jì)應(yīng)用及優(yōu)化策略基于VHDL的FPGA系統(tǒng)行為級設(shè)計(jì)
    發(fā)表于 04-15 06:33

    運(yùn)放的選擇策略有哪些?有哪些典型應(yīng)用?

    運(yùn)放的選擇策略有哪些?運(yùn)放的分類有哪幾種?典型應(yīng)用有哪些?
    發(fā)表于 04-20 07:26

    虛擬同步發(fā)電機(jī)雙機(jī)并聯(lián)系統(tǒng)的參數(shù)自調(diào)節(jié)優(yōu)化控制策略有哪些?

    虛擬同步發(fā)電機(jī)雙機(jī)并聯(lián)系統(tǒng)的參數(shù)自調(diào)節(jié)優(yōu)化控制策略有哪些?
    發(fā)表于 11-04 07:20

    如何去處理嵌入式軟件產(chǎn)生死鎖的情況呢

    嵌入式軟件產(chǎn)生死鎖的必要條件及原因有哪些?如何去處理嵌入式軟件產(chǎn)生死鎖的情況呢?
    發(fā)表于 12-24 06:12

    CPU頻率調(diào)度策略有哪些?

    CPU頻率調(diào)度策略有哪些?
    發(fā)表于 03-10 06:54

    高速電機(jī)軸承損壞和控制策略有什么關(guān)系嗎?

    1,高速電機(jī)軸承損壞和控制策略有什么關(guān)系嗎? 2,電機(jī)軸承有比較突然的溫升是正常的嗎? 3,銘牌所標(biāo)的額定最高轉(zhuǎn)速應(yīng)該是其它條件都滿足的條件下是可以長時間運(yùn)行的嗎?
    發(fā)表于 11-22 07:06

    linux處理機(jī)調(diào)度與死鎖

    linux處理機(jī)調(diào)度與死鎖 掌握處理機(jī)的三級調(diào)度 掌握作業(yè)調(diào)度及進(jìn)程調(diào)度的概念 理解調(diào)度算法的評價(jià)準(zhǔn)則 掌握并靈活運(yùn)用常用的幾種作業(yè)調(diào)度、
    發(fā)表于 04-28 14:59 ?0次下載

    DIN中的死鎖避免和死鎖恢復(fù)

    DIN中的死鎖避免和死鎖恢復(fù) 由于存在占用資源者申請另一個資源的情形,在DIN中由于拓?fù)浣Y(jié)構(gòu)本身存在環(huán)狀路徑,所以
    發(fā)表于 02-23 14:47 ?1005次閱讀
    DIN中的<b class='flag-5'>死鎖</b>避免和<b class='flag-5'>死鎖</b>恢復(fù)

    AVS_RS系統(tǒng)沖突與死鎖控制策略_方彥軍

    AVS_RS系統(tǒng)沖突與死鎖控制策略_方彥軍
    發(fā)表于 01-17 19:58 ?0次下載

    負(fù)載均衡的策略有哪些? 負(fù)載均衡的三種方式?

    負(fù)載均衡的策略有哪些? 負(fù)載均衡的策略有如下: 輪詢(Round Robin):按照請求的順序輪流分配到不同的服務(wù)器。 權(quán)重(Weighted):給不同的服務(wù)器分配不同的權(quán)重,根據(jù)權(quán)重比例來決定分配
    的頭像 發(fā)表于 07-25 14:13 ?2906次閱讀

    Linux內(nèi)核死鎖lockdep功能

    的編程思路,也不可能避免會發(fā)生死鎖。在Linux內(nèi)核中,常見的死鎖有如下兩種: 遞歸死鎖:如在中斷延遲操作中使用了鎖,和外面的鎖構(gòu)成了遞歸死鎖。 AB-BA
    的頭像 發(fā)表于 09-27 15:13 ?900次閱讀
    Linux內(nèi)核<b class='flag-5'>死鎖</b>lockdep功能

    如何處理重現(xiàn)使用仿真發(fā)現(xiàn)的死鎖漏洞

    在上一部分中,我們重點(diǎn)討論了在組件上設(shè)置形式驗(yàn)證的最佳實(shí)踐。那么現(xiàn)在設(shè)置已經(jīng)準(zhǔn)備就緒,協(xié)議檢查器可以避免不切實(shí)際的情況(這也有助于發(fā)現(xiàn)一個新漏洞),基本抽象也可以提高性能。現(xiàn)在的任務(wù)便是如何處理重現(xiàn)
    的頭像 發(fā)表于 11-02 09:17 ?753次閱讀
    如何<b class='flag-5'>處理</b>重現(xiàn)使用仿真發(fā)現(xiàn)的<b class='flag-5'>死鎖</b>漏洞

    死鎖的產(chǎn)生因素

    、資源分配策略 3、進(jìn)程對資源的使用要求 4、并發(fā)進(jìn)程的推薦順序 三、死鎖的必要條件 1、互斥條件 進(jìn)程互斥使用資源,一旦某個資源被占用,欲使用該資源的進(jìn)程必須等待。 2、占有和等待條件(部分分配條件) 進(jìn)程申請新資源得不到滿足
    的頭像 發(fā)表于 11-09 09:37 ?1645次閱讀
    <b class='flag-5'>死鎖</b>的產(chǎn)生因素

    redis分布式鎖死鎖處理方案

    中,Redis分布式鎖也可能遭遇死鎖問題,即多個線程相互等待對方釋放鎖的情況。本文將詳細(xì)介紹Redis分布式鎖死鎖的原因,并提供解決死鎖的多種策略。 一、Redis分布式鎖的基本機(jī)制
    的頭像 發(fā)表于 11-16 11:44 ?2186次閱讀