1. 程式人生 > >《作業系統》第6章:併發:死鎖和飢餓

《作業系統》第6章:併發:死鎖和飢餓

1,什麼是死鎖:

一組程序中,每個程序都無限等待被該組程序中另一個程序所佔有的資源,因而永遠無法得到的資源,這種現象稱為程序死鎖,這一組程序就稱為死鎖程序(處於阻塞態)

2,什麼是可重用資源?(P186)

一次只能供一個程序安全地使用,並且不會由於使用而耗盡的資源。程序得到資源單元,後來又釋放這些單元,供其他程序再次使用。如:處理器,I/O通道,記憶體和外存、裝置,以及檔案、資料庫和訊號量之類的資料結構。

3,什麼是可消耗資源(P187)

可以被建立(生產)和銷燬(消耗)的資源。通常對某種型別可消耗資源的數目沒有限制,一個無阻塞的生產程序可以建立任意數目的這類資源。當消費程序得到一個資源時,該資源就不再存在了。如:中斷、訊號、訊息、和I/O緩衝區的資訊。

4,產生死鎖的條件是什麼(P189)

產生死鎖有四個條件,前三個為必要條件

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

b,佔有且等待:當一個程序等待其他程序時,繼續佔有已經分配的資源

c,不可搶佔:不能強行搶佔程序已有的資源

d,迴圈等待:存在一個封閉的程序鏈,使得每個程序至少佔有此鏈中下一個程序所需要的一個資源

5,如何預防佔有且等待?(P190)

要求程序一次性地請求所有需要的資源,並且阻塞這個程序直到所有請求都同時滿足。

6,如何預防不可搶佔?(P190)

a,如果佔有某些資源的一個程序進一步申請資源時被拒絕,則該程序必須解放它最初佔有的資源,如果有必要,可再次申請這些資源和另外的資源。

b,如果一個程序請求當前被另一個程序佔有的一個資源,則作業系統可以搶佔另一個程序,要求它釋放資源。

注意:只有在任意兩個程序的優先順序都不相同的條件下,後一種方案才能預防死鎖

7,如何預防迴圈等待?(P190)

通過定義資源型別的線性順序來預防。如果一個程序已經分配到了R型別的資源,那麼它接下來請求的資源只能是那些排在R型別之後的資源型別。

8,死鎖避免和死鎖預防有什麼區別?(P191)

死鎖預防:通過約束資源請求,使得4個死鎖條件中至少有一個被破壞,這可以通過防止發生三個必要條件中的一個(互斥,佔有且等待,非搶佔)間接完成,也可以通過防止迴圈等待直接完成,但這些都會導致低效的資源使用和低效的程序執行。

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

兩種死鎖避免的方法:a,如果一個程序的請求會導致死鎖,則不啟動此程序。

b,如果一個程序增加的資源請求會導致死鎖,則不允許此分配。