操作系統(tǒng)——死鎖

必要條件
  • 互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用。
  • 請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。
  • 不剝奪條件:進(jìn)程已獲得的資源,在末使用完之前,不能強(qiáng)行剝奪。
  • 循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。
解決死鎖的基本方法
  • 預(yù)防死鎖
    1、資源一次性分配:破壞請(qǐng)求和保持條件
    2、可剝奪資源:即當(dāng)某進(jìn)程新的資源未滿足時(shí),釋放已占有的資源(破壞不可剝奪條件)
    3、資源有序分配法:系統(tǒng)給每類資源賦予一個(gè)編號(hào),每一個(gè)進(jìn)程按編號(hào)遞增的順序請(qǐng)求資源,釋放則相反(破壞循環(huán)等待條件)

  • 避免死鎖
    預(yù)防死鎖的幾種策略,會(huì)嚴(yán)重地?fù)p害系統(tǒng)性能。因此在避免死鎖時(shí),要施加較弱的限制,從而獲得較滿意的系統(tǒng)性能。由于在避免死鎖的策略中,允許進(jìn)程動(dòng)態(tài)地申請(qǐng)資源。因而,系統(tǒng)在進(jìn)行資源分配之前預(yù)先計(jì)算資源分配的安全性。若此次分配不會(huì)導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài),則將資源分配給進(jìn)程;否則,進(jìn)程等待。其中最具有代表性的避免死鎖算法是銀行家算法。

  • 單個(gè)資源的銀行家算法


    image.png

    上圖 c 為不安全狀態(tài),因此算法會(huì)拒絕之前的請(qǐng)求,從而避免進(jìn)入圖 c 中的狀態(tài)。

  • 多個(gè)資源的銀行家算法


    image.png

    上圖中有五個(gè)進(jìn)程,四個(gè)資源。左邊的圖表示已經(jīng)分配的資源,右邊的圖表示還需要分配的資源。最右邊的 E、P 以及 A 分別表示:總資源、已分配資源以及可用資源,注意這三個(gè)為向量,而不是具體數(shù)值,例如 A=(1020),表示 4 個(gè)資源分別還剩下 1/0/2/0。

檢查一個(gè)狀態(tài)是否安全的算法如下:

  • 查找右邊的矩陣是否存在一行小于等于向量 A。如果不存在這樣的行,那么系統(tǒng)將會(huì)發(fā)生死鎖,狀態(tài)是不安全的。
  • 假若找到這樣一行,將該進(jìn)程標(biāo)記為終止,并將其已分配資源加到 A 中。
  • 重復(fù)以上兩步,直到所有進(jìn)程都標(biāo)記為終止,則狀態(tài)時(shí)安全的。
    如果一個(gè)狀態(tài)不是安全的,需要拒絕進(jìn)入這個(gè)狀態(tài)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容