併發 死鎖和飢餓

2021-08-04 21:19:43 字數 1214 閱讀 2202

死鎖原理

一組相互競爭系統資源或進行通訊的程序間的「永久」阻塞。當一組程序中的每個程序都在等待某個事件,而只有這組程序中的其他被阻塞程序才可以觸發該事件,這時就稱這組程序發生死鎖。

所有死鎖都涉及兩個或多個程序之間對資源需求的衝突。

可重用資源是指一次只能供乙個程序安全地使用,並且不會由於使用而耗盡的資源。可重用資源的例子包括處理器、i/o、記憶體和外存、裝置,以及諸如檔案、資料庫和訊號量之類的資料結構。

如果每個程序占有乙個資源並請求另乙個資源,就會發生死鎖;例如,如果多道程式設計系統交替執行兩個程序,則會發生死鎖。

可重用資源死鎖的另乙個例子是關於記憶體請求。

可消耗資源是指可以被建立和銷毀的資源。例如,中斷、訊號訊息和i/o緩衝區的資訊。

死鎖的條件

必要條件:

- 互斥:一次只有乙個程序可以使用乙個資源。其他程序不能訪問已分配給其他程序的資源。

- 占有且等待:當乙個程序等待其他程序時,繼續占有已經分配的資源。

- 不可搶占:不能強行搶占程序已占有的資源。

死鎖預防

1、間接的死鎖預防方法,即防止前面列出的三個必要條件中任何乙個的發生

2、直接的死鎖預防方法,防止迴圈等待的發生。

死鎖避免

它允許三個必要條件,但通過明智的選擇,確保永遠不會到達死鎖點,因此死鎖避免比死鎖預防允許更多的併發。在死鎖避免中,是否允許當前的資源分配請求是通過判斷該請求是否可能導致死鎖來決定的。因此,死鎖避免需要知道將來的程序資源請求的情況。

兩種死鎖避免方法:

死鎖檢測

死鎖預防策略是非常保守的,它們通過限制訪問資源和在程序上強加約束來解決死鎖問題。死鎖檢測它不限制資源訪問或約束程序行為,只要有可能,被請求的資源就分配給程序。作業系統周期性地執行乙個演算法檢測前面的條件4,即迴圈等待條件。

恢復

一旦檢測到死鎖,就需要某種策略以恢復死鎖。

一種綜合的死鎖策略

所有解決死鎖的策略都各有有其優缺點。不同情況下使用不同的策略更有效。

併發 死鎖和飢餓

死鎖的原理 當一組程序中的每個程序都在等待某個事件 如等待所請求的資源釋放 而只有在這組程序中的其他被阻塞的程序才可以觸發該事件,這是就稱這組程序發生死鎖。因為沒有事件能夠被觸發,故死鎖是永久性的。可重用資源 指一次只能供乙個程序安全地使用,並且不會由於使用而耗盡的資源。如處理器 i o通道 記憶體...

併發性 互斥和同步 死鎖和飢餓

二 併發的原理 在單處理器多道程式設計系統中,程序被交替執行,表現出一種併發執行的外部特徵。即使不能實現真正的並行處理,並且在程序間來回切換也需要一定的開銷,交替執行在處理效率和程式結構上還是帶來了重要的好處。在多處理器系統中,不僅可以交替執行程序,而且可以重疊執行程序。三 程序的互動 我們可以根據...

程序飢餓和死鎖

飢餓是指系統不能保證某個程序的等待時間上界,從而使該程序長時間等待,當等待時間給程序推進和響應帶來明顯影響時,稱發生了程序飢餓。當飢餓到一定程度的程序所賦予的任務即使完成也不再具有實際意義時稱該程序被餓死。死鎖是指在多道程式系統中,一組程序中的每乙個程序都無限期等待被該組程序中的另乙個程序所占有且永...