计算机操作系统 死锁问题
生活随笔
收集整理的這篇文章主要介紹了
计算机操作系统 死锁问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
概念
- 條件是基礎(chǔ),在一定的原因下,產(chǎn)生結(jié)果
死鎖三胞胎
- 死鎖 僵持,消耗時間,雙方都占用了部分資源,不釋放
- 活鎖 雙方互相謙讓,都不占用資源
- 饑餓 謙讓的一方一直等待,無法占有資源,導(dǎo)致饑餓問題
死鎖的原因以及必要的條件
應(yīng)用程序 信號量使用不當(dāng)?
- 信號量的初始值設(shè)置錯誤,設(shè)為0,兩個進(jìn)程都卡死;
- 解決辦法 :代碼開發(fā)人員 和 代碼測試人員
OS內(nèi)核程序? 不可剝奪的軟硬件資源
- 多進(jìn)程對不可剝奪資源的競爭
- 進(jìn)程申請資源的順序不合理
死鎖的必要條件
死鎖產(chǎn)生了,一定會產(chǎn)生如下四個條件;但是具有這四個條件不一定會造成死鎖
- 互斥條件? ? ? ? ? 臨界資源
- 不可剝奪條件? 進(jìn)程之間不可以互相剝奪彼此的資源
- 請求保持條件? 占有資源不主動釋放
- 循環(huán)等待條件??
預(yù)防死鎖
破壞死鎖的必要條件
- 互斥條件? ? ? ? ? 臨界資源? ?幾乎行不通,比如更改臨界資源
- 不可剝奪條件? 進(jìn)程之間不可以互相剝奪彼此的資源? 需要付出代價,也有,比如cpu的切換;但是如果是打印機(jī),會造成彼此文件交叉融合
- 請求保持條件? 占有資源不主動釋放? ?一次性申請完臨界資源?
- 循環(huán)等待條件??遞增編號,按照順序申請資源。比如一個資源切成兩份,第一份資源叫1,第二份資源叫2,A申請資源1,B在申請的時候看到1號資源已經(jīng)被占用,就需要等待,A繼續(xù)申請2號資源,當(dāng)A使用完資源,釋放之后。B開始申請,按照資源的序號進(jìn)行資源的申請
避免死鎖
- 銀行家算法? 計算安全序列
- 規(guī)劃合理的資源申請順序,提高資金的流轉(zhuǎn)速度
- 安全序列 找到 無死鎖 可以避免;找不到 必死鎖 無法避免
- 因此將1000萬借給萬達(dá),收回3000萬借給萬科或者恒大都可以?
- 訪問順序 萬達(dá) 萬科 恒大;萬達(dá) 恒大 萬科
例1
例2?
死鎖的檢測與解除
死鎖定理和資源分配圖
- 化簡 如果可以化簡到最簡則無死鎖
- 不能化簡到最簡模式則檢測到死鎖,進(jìn)行下一步解除死鎖,1,資源剝奪法;2,報銷進(jìn)程法;3,進(jìn)程回退法
資源分配圖
- 圓圈代表進(jìn)程
- 長方形代表一類資源的容器
- 長方形中的圓圈,代表該類資源,數(shù)量代表資源的數(shù)目
- 邊 :從長方形指向圓圈,代表已分配邊;圓圈指向長方形,代表申請邊,請求邊
- 尋找圓圈進(jìn)程,依次嘗試,判斷p1的申請邊(從圓圈指出的邊)是否都可以得到滿足,滿足則刪除,不滿足則尋找下一個圓圈進(jìn)程
死鎖的解除
- 資源剝奪法?
- 撤銷進(jìn)程法 進(jìn)程停止運(yùn)行
- 進(jìn)程回退法 進(jìn)行由運(yùn)行80%出現(xiàn)死鎖,進(jìn)程回退到70%等待,繼續(xù)執(zhí)行
總結(jié)
以上是生活随笔為你收集整理的计算机操作系统 死锁问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ primer第六章6.6函数匹配
- 下一篇: 解决VM虚拟机中ubuntu系统上不了网