C 問題9 死鎖,死鎖產生原因,處理方法

2021-10-09 09:54:32 字數 1836 閱讀 5601

多執行緒和多程序改善了系統資源的利用率並提高了系統 的處理能力,但他們的併發操作,互相等待的過程,從而帶來了死鎖問題。

可搶占資源指某程序在獲得這類資源後,該資源可以再被其他程序或系統搶占。對於這類資源是不會引起死鎖的。

cpu 和主存均屬於可搶占性資源。

一旦系統把某資源分配給該程序後,就不能將它強行收回,只能在程序用完後自行釋放。

磁帶機、印表機等屬於不可搶占性資源。

通常系統中擁有的不可搶占資源,其數量不足以滿足多個程序執行的需要,使得程序在執行過程中,會因爭奪資源而陷入僵局,如磁帶機、印表機等。只有對不可搶占資源的競爭 才可能產生死鎖,對可搶占資源的競爭是不會引起死鎖的。

如:程序通訊時引起死鎖

系統中擁有三個程序p1、p2和p3,m1、m2、m3是3可消耗資源。程序p1一方面產生訊息m1,將其傳送給p2,另一方面要從p3接收訊息m3。而程序p2一方面產生訊息m2,將其傳送給p3,另一方面要從p1接收訊息m1。類似的,程序p3一方面產生訊息m3,將其傳送給p1,另一方面要從p2接收訊息m2。

如果三個程序都先傳送自己產生的訊息後接收別人發來的訊息,則可以順利的執行下去不會產生死鎖,但要是三個程序都先接收別人的訊息而不產生訊息則會永遠等待下去,產生死鎖。

程序在執行過程中,請求和釋放資源的順序不當,也同樣會導致死鎖。例如,併發程序 p1、p2分別保持了資源r1、r2,而程序p1申請資源r2,程序p2申請資源r1時,兩者都會因為所需資源被占用而阻塞。

訊號量使用不當也會造成死鎖。程序間彼此相互等待對方發來的訊息,結果也會使得這 些程序間無法繼續向前推進。例如,程序a等待程序b發的訊息,程序b又在等待程序a 發的訊息,可以看出程序a和b不是因為競爭同一資源,而是在等待對方的資源導致死鎖。

程序要求對所分配的資源(如印表機)進行排他性控制,即在一段時間內某資源僅為乙個程序所占有。此時若有其他程序請求該資源,則請求程序只能等待。

程序所獲得的資源在未使用完畢之前,不能被其他程序強行奪走,即只能由獲得該資源的程序自己來釋放(只能是主動釋放)。

程序已經保持了至少乙個資源,但又提出了新的資源請求,而該資源已被其他程序占有,此時請求程序被阻塞,但對自己已獲得的資源保持不放。

存在一種程序資源的迴圈等待鏈,鏈中每乙個程序已獲得的資源同時被 鏈中下乙個程序所請求。即存在乙個處於等待狀態的程序集合,其中pi等 待的資源被p(i+1)占有(i=0, 1, …, n-1),pn等待的資源被p0占有,如圖所示。

直觀上看,迴圈等待條件似乎和死鎖的定義一樣,其實不然。按死鎖定義構成等待環所 要求的條件更嚴,它要求pi等待的資源必須由p(i+1)來滿足,而迴圈等待條件則無此限制。 例如,系統中有兩台輸出裝置,p0占有一台,pk占有另一台,且k不屬於集合。

pn等待一台輸出裝置,它可以從p0獲得,也可能從pk獲得。因此,雖然pn、p0和其他 一些程序形成了迴圈等待圈,但pk不在圈內,若pk釋放了輸出裝置,則可打破迴圈等待, 如圖2-16所示。因此迴圈等待只是死鎖的必要條件。

以上這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

預防死鎖:通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或幾個條件,來防止死鎖的發生。

避免死鎖:在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免死鎖的發生。常用避免死鎖的方法:有序資源分配法,銀行家演算法(可檢視我的另一部落格)

檢測死鎖:允許系統在執行過程中發生死鎖,但可設定檢測機構及時檢測死鎖的發生,並採取適當措施加以清除。

解除死鎖:當檢測出死鎖後,便採取適當措施將程序從死鎖狀態中解脫出來。死鎖解除的主要方法有:資源剝奪法,撤銷程序法,程序回退法。

死鎖及死鎖產生原因條件

作業系統中有若干程序併發執行,它們不斷申請 使用 釋放系統資源,雖然系統的進 程協調 通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能 繼續執行,否則就阻塞的情況。此時,若不借助外界因素,誰也不能釋放資源,誰也不能解 除阻塞狀態。根據這樣的情況,作業系統中的死鎖被定義為系統中...

死鎖產生的原因

一 什麼是死鎖?如果乙個程序集合裡面的每個程序都在等待這個集合中的其他乙個程序 包括自身 才能繼續往下執行,若無外力他們將無法推進,這種情況就是死鎖,處於死鎖狀態的程序稱為死鎖程序 二 死鎖產生的原因?1.因競爭資源發生死鎖 現象 系統中供多個程序共享的資源的數目不足以滿足全部程序的需要時,就會引起...

死鎖,產生原因,避免

什麼是死鎖 死鎖是指多個程序因競爭資源而造成的一種僵局 互相等待 若無外力作用,這些程序都將無法向前推進。例如,在某乙個計算機系統中只有一台印表機和一台輸入 裝置,程序p1正占用輸入裝置,同時又提出使用印表機的請求,但此時印表機正被程序p2 所占用,而p2在未釋放印表機之前,又提出請求使用正被p1占...