作業系統 死鎖

2021-09-26 15:58:53 字數 2015 閱讀 4694

把需要排他性使用的物件稱為資源。資源可以是硬體也可以是軟體,比如印表機或者資料庫中的乙個加鎖記錄。

資源可以分為兩類:可搶占資源和不可搶占資源。

搶占這個詞,在程序和執行緒排程時就提到了這個概念,那時是程序或者執行緒可以搶占cpu,即搶占式排程。儲存器也可以搶占,如記憶體換頁。

一般來說,可搶占資源不會引起死鎖,可以在程序間重新分配資源而得到解決。

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

死鎖並不僅僅發生在資源上,資源死鎖只是一種。

本篇部落格將圍繞資源死鎖來主要介紹。

互斥:至少有乙個資源必須處在非共享模式,即一次只能有乙個程序使用,如果另一程序申請該資源,那麼申請程序必須延遲直到該資源釋放為止。

占有(占用)並等待:乙個程序必須占有至少乙個資源,並等待另乙個資源,而該資源為其他程序所占有。即:資源不能被搶占

不可(非)搶占:已經分配給乙個程序的資源不能被搶占,只能由占有它的程序顯式地釋放。

迴圈(環路)等待:死鎖發生時,系統中一定有由兩個或以上的程序組成的一條環路,該環路中的每個程序都在等待著下乙個程序所占有的資源。即:有一組程序,p0等待的資源被p1占有,p1等待的資源被p2占有,pn-1等待的資源被pn占有,pn等待的資源被p0占有。

忽略死鎖:一般稱為鴕鳥演算法,即躲起來視而不見。

檢測死鎖並恢復:讓死鎖發生,檢測它們是否發生,一旦發生死鎖,就採取行動解決問題。

避免死鎖:仔細對資源進行分配,動態地避免死鎖。

預防死鎖:通過破壞引起死鎖的四個必要條件,防止死鎖的發生。

採用鴕鳥演算法,即一種計算機作業系統演算法,用於當死鎖真正發生且影響系統正常執行時,手動干預 ——> 重新啟動。

傳說中鴕鳥看到危險就把頭埋在地底下。當你對某一件事情沒有乙個很好的解決方法時,那就忽略它,就像鴕鳥面對危險時會把它深埋在沙礫中,裝作看不到。這樣的演算法稱為「鴕鳥演算法「。這實在不算是乙個演算法,但卻是目前實際系統採用最多的一種策略。例如在計算機作業系統中,當死鎖真正發生且影響系統正常執行時,手動干預 ——> 重新啟動。

在電腦科學中,鴕鳥演算法是乙個忽略潛在問題的一種演算法策略,這種策略對電腦程式可能出現的問題採取無視態度(類似於鴕鳥在遇到危險時將頭埋在地里,裝作看不見)。鴕鳥演算法的使用前提是,問題出現的概率很低。

採用這種辦法的時候,系統並沒有試圖阻止死鎖的發生,而是允許死鎖發生,檢測到死鎖後,採取措施進行恢復。

該方法分為兩個階段:檢測、恢復

資源軌跡圖

如果直到了程序在各個階段需要哪些資源,那麼可以在圖中程序標註。兩個程序的交疊區域就是乙個會造成死鎖的區域。程序在圖中只能向右或者向上前進,一旦進入了危險區,那麼就可能發生死鎖。為了避免死鎖,應當在合適的時間阻塞某個程序,使得執行避開這個區域。

銀行家演算法

銀行家演算法可以推廣到多個資源的情況,此時可以寫成矩陣的形式,每次判斷一行是否滿足,即乙個程序的多個資源都進行檢查。

但是需要注意到,死鎖避免是非常困難的,無論是資源軌跡圖還是銀行家演算法,都需要事先知道程序執行的過程中需要的最大資源數,這幾乎是不可能實現的!

死鎖避免可以認為是在程式執行中動態地避免死鎖發生,而死鎖預防可以說是靜態的方式,杜絕死鎖發生的可能性。

事實上,只要能破壞死鎖發生的四個必要條件之一,那麼死鎖就不會發生。

破壞互斥條件

盡量使得資源不被某個程序獨佔。比如印表機的假離線列印,就是盡量避免乙個程序獨佔印表機,而是把要列印的檔案存入乙個假離線目錄,然後通過乙個守護程序管理印表機進行列印。

破壞占有(占用)並等待條件

禁止已經持有資源的程序再等待其他資源。

破壞不可(非)搶占條件

允許資源搶占即可。當然,有的時候資源應當是不可搶占的。

破壞迴圈(環路)等待條件

對資源進行編號,程序在任何時候都可以請求資源,但是所有的請求必須按照資源編號的順序(公升序或降序)提出。

作業系統死鎖

作業系統死鎖,在作業系統課程當中屬於比較關注的乙個知識點,在這裡做個簡單的梳理。死鎖的四個必要條件 作業系統中有若干程序併發執行,它們不斷申請 使用 釋放系統資源,雖然系統的進 程協調 通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能 繼續執行,否則就阻塞的情況。此時,若不借...

作業系統 死鎖

多執行緒以及多程序改善了系統資源的利用率並提高了系統 的處理能力。然而,併發執行也帶來了新的問題 死鎖。死鎖是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當前程序處於這種狀態時,若無外力作用,它們都將無法再向前推進。關於死鎖的一些結論 競爭資源 當系統中供多個程序共享的資源如印表機 公用佇列等...

作業系統死鎖

臨近畢業,最近忙著找實習,複習了下以前的作業系統課程,對死鎖知識做了簡單的梳理。死鎖 當某一程序提出資源的使用要求後,使得系統中的一些程序處於無休止的阻塞狀 態,在無外力作用下,這些程序永遠也不能前進的現象。死鎖取決於各程序的 b 推進速度 b 和對資源的 b 請求順序 b 死鎖的必要條件 互斥控制...