現代作業系統 死鎖

2021-08-18 07:57:32 字數 1437 閱讀 6103

死鎖的規範定義:如果乙個程序集合中的每個程序都在等待只能由該程序集合中的其他程序才能引發的事件,那麼該程序集合就是死鎖的。

大部分死鎖都與資源相關。

資源分為兩類:可搶占和不可搶占的,可搶占資源可以從擁有它的程序中搶占而不會產生任何***,儲存器就是一類可搶占的資源。例如,乙個系統擁有256m的使用者記憶體和一台印表機,有兩個程序都想列印,程序a請求並獲得了印表機,然後進行任務,但沒有完成之前,它的時間片就已經用完並換出。然後程序b開始執行並請求印表機,但是沒有成功,因為a占用印表機,這時存在死鎖的危險,因為a擁有印表機,b擁有記憶體,兩個程序都缺少另乙個程序擁有的資源,所以任何乙個都不能繼續執行。不過幸運的是是通過把程序b換出記憶體,把程序a換入記憶體就可以實現搶占b的記憶體。這樣a可繼續執行。在這個過程中,記憶體是可搶占的。

資源死鎖的條件,四個必要條件:

1.互斥條件。每個資源要麼已經分配給了乙個程序,要麼就是可用的

2.占有和等待條件。已經得到了某個資源的程序可以請求新的資源

3.不可搶占(剝奪)條件,已經分配給乙個程序的資源不能強制性被剝奪。

4.環路等待條件,死鎖發生時,系統中一定有兩個或兩個以上的程序組成的一條環路,該環路的每個程序都在等待下乙個程序所占有的資源。

四種處理死鎖的策略:

1.忽略該問題,也許你忽略它,它也會忽略你

2.檢測死鎖並恢復,讓死鎖發生,檢測它們是否發生,一旦發生,採取行動。

3.仔細對資源進行分配,動態的避免死鎖

3.通過破壞死鎖的四條必要條件之一,防止死鎖的產生。

接下來分別討論這四種方法:

鴕鳥演算法

假裝問題沒有發生。若死鎖問題發生的不頻繁,那麼會這樣做。

死鎖檢測和死鎖恢復

系統並不阻止死鎖的產生,而是檢測到死鎖發生時,採取措施進行恢復。那麼從死鎖中恢復有如下幾種辦法:

1.利用搶占恢復

2.利用回滾恢復:一旦檢測到死鎖,很容易發現需要哪些資源,然後對擁有該資源的程序進行回滾到前面的時間點,那麼資源就空閒了。

3.通過殺死程序恢復

死鎖避免

在執行之前,了解所有程序所需的全部資源,然後進行合理的分配和排序。具體可以利用銀行家演算法,也就是對每乙個請求進行檢查,檢查如果滿足這一請求是否會達到安全狀態。若是,就滿足該請求。

但是死鎖避免從本質上說是不可能的,因為它需要獲知未來的請求,而這些請求時不可知的。

死鎖預防

破壞四個必要條件之一即可。

條件   

處理方式   

互斥使用假離線技術

占有和等待

在開始就請求全部資源

不可搶占

搶占資源

環路等待

對資源按序編號

活鎖:某些情況下,當程序意識到它不能獲取它需要的下乙個鎖,就會釋放已經獲得的鎖,然後等待1ms,再嘗試一次。理論上,這是用來檢測並預防死鎖的好方法,但是如果另乙個程序在相同的時刻做了相同的操作,相當於都為對方讓路,那麼導致雙方都無法前進。

現代作業系統 死鎖

前言 現代作業系統 死鎖這一部分也是非常的重要,在這裡詳細介紹了死鎖出現的條件已經避免死鎖的方法。我的github 死鎖 概述 一 資源定義 1.我們把需要排他性使用的物件叫做資源。2.資源分成可搶占和不可搶占型 二 死鎖定義 如果乙個程序集合中的每個程序都在等待只能由該程序合集中的其他程序才能引發...

現代作業系統

只有認為等待時間非常短的情形下,才使用忙等待。用於忙等待的鎖,稱為自旋鎖 spin lock 在互斥時間很短而掛起等待的時間開銷很大時,可以採用活鎖 livelock,沒有出現死鎖,但現象上看好像死鎖發生了 輪詢 忙等待 可用於進入臨界區或訪問資源。接收者發起的分布式啟發演算法。分布式系統新增在其底...

《現代作業系統》讀書筆記 死鎖篇

標籤 讀書筆記 校招 作業系統 面試 可剝奪資源 是指雖然資源佔有者程序需要使用該資源,但另乙個程序可以強行把該資源從佔有者程序處剝奪來歸自己使用。不可剝奪資源 是指除佔有者程序不再需要使用該資源而主動釋放資源,其他程序不得在佔有者程序使用資源過程中強行剝奪。如果乙個程序集合中的每個程序都在等待只能...