三、死鎖的避免( 簡單應(yīng)用 ) 死鎖的避免不同于死鎖的防止,死鎖的防止是采用某種分配策略后,系統(tǒng)就不會產(chǎn)生死鎖,這好比是你打過了某種預(yù)防針,再也不會得那種病。而死鎖的避免是沒有打預(yù)防針,但是通過其他辦法,避免得病。因此有“安全狀態(tài)”的說法,對應(yīng)的,當(dāng)然也有不安全狀態(tài)。就像人都有得病的可能,不必任何病都打預(yù)防針。只要注意防病,仍然可以安全健康的生活。
1、 安全狀態(tài) :如果操作系統(tǒng)能保證所有的進(jìn)程在 有限的時間 內(nèi)得到需要的 全部資源 ,則稱系統(tǒng)處于“安全狀態(tài)”。
2、區(qū)分死鎖的 避免 與死鎖的 防止 :當(dāng)采用了防止死鎖的資源分配策略后,系統(tǒng)中就不會形成死鎖。但是可以防止死鎖的資源分配策略中,有的只適用于對某些資源的分配,有的會影響資源的使用效率。這時可用使用死鎖的避免。
死鎖的避免是解決死鎖的另一種方法,它不同于死鎖的防止。在系統(tǒng)中不采用防止死鎖的資源分配策略,而是估計(jì)到可能有死鎖發(fā)生時避免死鎖的發(fā)生。
3、銀行算法是怎樣避免死鎖的:
銀行家算法是這樣的:
1)當(dāng)一個用戶對資金的最大的需求量不超過銀行家現(xiàn)有的資金時就可以接納該用戶。
2)用戶可以分期貸款,但貸款的總數(shù)不能超過最大需求量。
3)當(dāng)銀行家現(xiàn)有的資金不能滿足用戶的尚需貸款時,對用戶的貸款可推遲支付,但總能使用戶在有限的時間里得到貸款。
4)當(dāng)用戶得到所需的全部資金后,一定能在有限的時間里歸還所有資金。
我們把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當(dāng)于是銀行家管理的資金,則銀行家算法就是:
1)當(dāng)一個進(jìn)程首次申請資源時,測試該進(jìn)程對資源的最大的需求量,如果不超過系統(tǒng)現(xiàn)存資源時就可以按他的當(dāng)前申請量為其分配資源。 否則推遲分配。
2)進(jìn)程執(zhí)行中繼續(xù)申請資源時,測試該進(jìn)程占用資源和本次申請資源總數(shù)有沒有超過最大需求量。超過就不分配,沒超過則再測試現(xiàn)存資源是否滿足進(jìn)程還需要的最大資源量,滿足則按當(dāng)前申請量分配,否則也推遲分配。
總之,銀行家算法要保證分配資源時系統(tǒng)現(xiàn)存資源一定能滿足至少一個進(jìn)程所需的全部資源。這樣就可以保證所有進(jìn)程都能在有限時間內(nèi)得到需要的全部資源。這就是安全狀態(tài)。
(銀行家算法在操作系統(tǒng)的實(shí)踐考試中可能會用到)
四、死鎖的檢測( 領(lǐng)會 ) 死鎖的檢測
就是既不打預(yù)防針,也不去避免得病,而是經(jīng)常去體檢,如果發(fā)現(xiàn)有病了就治療。這是一種事后解決的辦法,也算是解決死鎖問題的一條途徑。但這畢竟要付出較大代價。
1、什么是 死鎖的檢測 :對資源的申請和分配不加限制,只要有剩余的資源就可把資源分配給申請者。這樣可能會出現(xiàn)死鎖,系統(tǒng)定時運(yùn)行一個“死鎖檢測程序”,如果檢測到死鎖發(fā)生,則必須先解除死鎖再繼續(xù)工作。
2、怎樣實(shí)現(xiàn)死鎖的檢測:1、每個資源當(dāng)用中只有一個資源2、資源類中含有若干個資源。
3、 死鎖的解除 :一般采用兩種方式來解除死鎖,一種是終止一個或幾個進(jìn)程的執(zhí)行以破壞循環(huán)等待;另一種是從涉及死鎖的進(jìn)程中搶奪資源。
檢測死鎖和解除死鎖都要付出很大代價。所以用死鎖檢測的方法解決死鎖問題只適用于 不經(jīng)常發(fā)生死鎖 的系統(tǒng)中。
相關(guān)推薦:2010年自考工學(xué)類“操作系統(tǒng)原理”復(fù)習(xí)資料匯總