色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

死鎖的處理策略有哪些

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

一、死鎖的處理策略——預防死鎖

(一)破壞互斥條件

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

如果把只能互斥使用的資源改造為允許共享使用,則系統不會進入死鎖狀態。比如: SPOOLing技術。操作系統可以采用 SPOOLing 技術把獨占設備在邏輯上改造成共享設備。比如,用SPOOLing技術將打印機改造為共享設備…

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

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

(二)破壞不剝奪條件

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

破壞不剝奪條件:

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

②、方案二:當某個進程需要的資源被其他進程所占有的時候,可以由操作系統協助,將想要的資源強行剝奪。這種方式一般需要考慮各進程的優先級(比如:剝奪調度方式,就是將處理機資源強行剝奪給優先級更高的進程使用)

該策略的缺點:

①、實現起來比較復雜。

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

③、反復地申請和釋放資源會增加系統開銷,降低系統吞吐量。

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

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

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

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

該策略實現起來簡單,但也有明顯的缺點:

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

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

(四)破壞循環等待條件

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

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

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

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

該策略的缺點:

①、不方便增加新的設備,因為可能需要重新分配所有的編號;

②、進程實際使用資源的順序可能和編號遞增順序不一致,會導致資源浪費;

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

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

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

(二)安全序列、不安全狀態、死鎖的聯系

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

所謂安全序列,就是指如果系統按照這種序列分配資源,則每個進程都能順利完成。只要能找出一個安全序列,系統就是安全狀態。當然,安全序列可能有多個。

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

如果系統處于安全狀態,就一定不會發生死鎖。如果系統進入不安全狀態,就可能發生死鎖(處于不安全狀態未必就是發生了死鎖,但發生死鎖時一定是在不安全狀態)

因此可以在資源分配之前預先判斷這次分配是否會導致系統進入不安全狀態,以此決定是否答應資源分配請求。這也是“銀行家算法”的核心思想。

(三)銀行家算法

銀行家算法是荷蘭學者 Dijkstra 為銀行系統設計的,以確保銀行在發放現金貸款時,不會發生不能滿足所有客戶需要的情況。后來該算法被用在操作系統中,用于避免死鎖。

核心思想:在進程提出資源申請時,先預判此次分配是否會導致系統進入不安全狀態。如果會進入不安全狀態,就暫時不答應這次請求,讓該進程先阻塞等待。

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

1. 實現步驟

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

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

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

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

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

手算(找到安全系列)

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

手算(找不到安全系列)

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

3. 代碼實現

假設系統中有 n 個進程,m 種資源

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

另外,還要用一個長度為m的一維數組 Available 表示當前系統中還有多少可用資源。

某進程Pi向系統申請資源,可用一個長度為m的一維數組 Requesti表示本次申請的各種資源量。

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

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

數據結構:

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

②、n*m 矩陣 Max 表示各進程對資源的最大需求數

③、n*m 矩陣 Allocation 表示已經給各進程分配了多少資源

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

⑤、用長度為 m 的一位數組 Request 表示進程此次申請的各種資源數

銀行家算法步驟:

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

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

③、試探著分配,更改各數據結構

④、用安全性算法檢查此次分配是否會導致系統進入不安全狀態

安全性算法步驟:

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

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

系統處于不安全狀態未必死鎖,但死鎖時一定處于不安全狀態。系統處于安全狀態一定不會死鎖。

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

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

如果系統中既不采取預防死鎖的措施,也不采取避免死鎖的措施,系統就很可能發生死鎖。在這種情況下,系統應當提供兩個算法:

①死鎖檢測算法:用于檢測系統狀態,以確定系統中是否發生了死鎖。

②死鎖解除算法:當認定系統中已經發生了死鎖,利用該算法可將系統從死鎖狀態中解脫出來。

(一)死鎖的檢測

為了能對系統是否已發生了死鎖進行檢測,必須:

①用某種數據結構來保存資源的請求和分配信息

②提供一種算法,利用上述信息來檢測系統是否已進入死鎖狀態。

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

如果系統中剩余的可用資源數足夠滿足進程的需求,那么這個進程暫時是不會阻塞的,可以順利地執行下去。

如果這個進程執行結束了把資源歸還系統,就可能使某些正在等待資源的進程被激活,并順利地執行下去。相應的,這些被激活的進程執行完了之后又會歸還一些資源,這樣可能又會激活另外一些阻塞的進程…

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

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

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

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

最終還連著邊的那些進程就是處于死鎖狀態的進程。

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

(二)死鎖的解除

一旦檢測出死鎖的發生,就應該立即解除死鎖。

補充:并不是系統中所有的進程都是死鎖狀態,用死鎖檢測算法化簡資源分配圖后,還連著邊的那些進程就是死鎖進程

解除死鎖的主要方法有:

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

②、 撤銷進程法(或稱終止進程法) 。強制撤銷部分、甚至全部死鎖進程,并剝奪這些進程的資源。這種方式的優點是實現簡單,但所付出的代價可能會很大。因為有些進程可能已經運行了很長時間,已經接近結束了,一旦被終止可謂功虧一簣,以后還得從頭再來。

③、 進程回退法 。讓一個或多個死鎖進程回退到足以避免死鎖的地步。這就要求系統要記錄進程的歷史信息,設置還原點。

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

原文標題:死鎖的處理策略—預防死鎖、避免死鎖、檢測和解除死鎖

文章出處:【微信公眾號:一口Linux】歡迎添加關注!文章轉載請注明出處。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 操作系統
    +關注

    關注

    37

    文章

    6850

    瀏覽量

    123432
  • 死鎖
    +關注

    關注

    0

    文章

    25

    瀏覽量

    8081
  • 代碼
    +關注

    關注

    30

    文章

    4802

    瀏覽量

    68743

原文標題:死鎖的處理策略—預防死鎖、避免死鎖、檢測和解除死鎖

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

收藏 人收藏

    評論

    相關推薦

    操作系統中進程調度策略有哪幾種

    操作系統中進程調度策略有哪幾種? 求大神指點啊
    發表于 11-07 21:18

    FPGA設計應用及優化策略有哪些?

    EDA技術具有什么特征?FPGA是什么原理?FPGA設計應用及優化策略基于VHDL的FPGA系統行為級設計
    發表于 04-15 06:33

    運放的選擇策略有哪些?有哪些典型應用?

    運放的選擇策略有哪些?運放的分類有哪幾種?典型應用有哪些?
    發表于 04-20 07:26

    虛擬同步發電機雙機并聯系統的參數自調節優化控制策略有哪些?

    虛擬同步發電機雙機并聯系統的參數自調節優化控制策略有哪些?
    發表于 11-04 07:20

    如何去處理嵌入式軟件產生死鎖的情況呢

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

    CPU頻率調度策略有哪些?

    CPU頻率調度策略有哪些?
    發表于 03-10 06:54

    高速電機軸承損壞和控制策略有什么關系嗎?

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

    linux處理機調度與死鎖

    linux處理機調度與死鎖 掌握處理機的三級調度 掌握作業調度及進程調度的概念 理解調度算法的評價準則 掌握并靈活運用常用的幾種作業調度、
    發表于 04-28 14:59 ?0次下載

    DIN中的死鎖避免和死鎖恢復

    DIN中的死鎖避免和死鎖恢復 由于存在占用資源者申請另一個資源的情形,在DIN中由于拓撲結構本身存在環狀路徑,所以
    發表于 02-23 14:47 ?922次閱讀
    DIN中的<b class='flag-5'>死鎖</b>避免和<b class='flag-5'>死鎖</b>恢復

    AVS_RS系統沖突與死鎖控制策略_方彥軍

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

    負載均衡的策略有哪些? 負載均衡的三種方式?

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

    Linux內核死鎖lockdep功能

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

    如何處理重現使用仿真發現的死鎖漏洞

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

    死鎖的產生因素

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

    redis分布式鎖死鎖處理方案

    中,Redis分布式鎖也可能遭遇死鎖問題,即多個線程相互等待對方釋放鎖的情況。本文將詳細介紹Redis分布式鎖死鎖的原因,并提供解決死鎖的多種策略。 一、Redis分布式鎖的基本機制
    的頭像 發表于 11-16 11:44 ?1769次閱讀
    主站蜘蛛池模板: 翁熄性放纵交换01| freehd另类xxxx喷水| 国产精品色吧国产精品| 性盈盈剧场| 久久精品av| chinese东北夫妻video| 手机在线成人精品视频网| 激情男女高潮射精AV免费| 99福利在线观看| 无遮挡午夜男女XX00动态| 精品国产自在现线拍国语| 97在线播放| 无码人妻99久久密AV| 久久伊人免费| 成人无码国产AV免费看直播| 亚洲国产成人久久一区www妖精| 老司机亚洲精品影院在线观看| www.久久精品视频| 亚洲AV精品无码成人| 免费观看桶机十分钟| 国产成人免费不卡在线观看| 一区三区在线专区在线| 全部老头和老太XXXXX| 精品国产自在天天线2019| 超嫩校花被灌醉在线观看| 亚洲伊人网站| 日本一在线中文字幕| 久久精品AV无码亚洲色欲| 富婆夜店找黑人猛男BD在线| 在线 日韩 欧美 国产 社区| 体育生爆操| 欧美高清videosgratis高| 九九热免费在线观看| 国产超碰AV人人做人人爽| 91精品国产91热久久p| 亚洲欧美中文在线一区| 肉色无边(高h)| 嫩草影院一区| 久久re视频这里精品一本到99| 国产AV精品久久久毛片| 69ZXX少妇内射无码|