第3章 處理機排程與死鎖
1,死鎖
指多個程序在執行過程中,因爭奪資源而造成的一種僵局。當程序處於這種狀態時,若無外力作用,它們都將無法再向前推進。
2,死鎖與飢餓的區別
死鎖(Deadlock): 指程序之間無休止地互相等待(堵塞狀態)
飢餓(Starvation):指一個程序無休止地等待(執行狀態)
3,產生死鎖的原因
1)死鎖發生:雙方都擁有部分資源,同時在請求對方已佔有的資源。
2)請求推進的次序與對非剝奪性資源的爭用都是造成死鎖的原因。
3)產生死鎖的原因可歸結為如下兩點:
①競爭資源。系統中供多個程序共享的資源如印表機、公用佇列等的數目不滿足需要時,會引起資源競爭而產生死鎖。
②程序間推進順序非法。程序在執行過程中,請求和釋放資源的順序不當,同樣會導致死鎖。
4,產生死鎖的必要條件
形成死鎖的四個必要條件(四個條件都具備就會死鎖,缺一就不會死鎖)
1)互斥條件:程序對所分配到的資源進行排他性使用
2)請求和保持條件:程序已經保持了至少一個資源,又提出新的資源請求,而新請求資源被其他程序佔有只能造成自身程序阻塞,但對自己已獲得的其他資源保持不放,必然影響其他程序。
3)不剝奪條件:程序已獲得的資源未使用完之前不能被剝奪,只能在使用完時由自己釋放。
4)環路等待條件
5,處理死鎖的基本方法
事先預防:
1)預防死鎖 設定限制條件,破壞四個必要條件的一個或幾個,預防發生死鎖。 較易實現。限制條件的嚴格也會導致系統資源利用率和系統吞吐量降低。
2)避免死鎖 不須事先限制,破壞四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。 這種事先加以較弱限制的方法,實現上有一定難度,但可獲較高的資源利用率及系統吞吐量,目前在較完善的系統中,常用此方法來避免發生死鎖。
事後處理:
3)檢測死鎖。 允許系統執行過程中發生死鎖,但通過系統檢測機構可及時的檢測出,能精確確定與死鎖有關的程序和資源;然後採取適當的措施(解除死鎖),從系統中將已發生的死鎖清除掉。
4)解除死鎖。 與死鎖檢測配套的一種措施。 常用的實施方法:撤銷或掛起一些程序,以便回收一些資源並將他們分配給已阻塞程序,使之轉為就緒以繼續執行。 死鎖的檢測與解除措施,有可能使系統獲得較好的資源利用率和吞吐量(死鎖機率不一定很高),但在實現上難度也最大。
6,銀行家演算法避免死鎖
隨時對系統中的所有資源資訊進行統計,包括每種資源的數量、已分配給各程序的數量;每當程序提出某種資源請求時判斷該請求分配後是否安全,如果安全才分配。對每個資源請求的處理都要保證系統始終從一個安全狀態到另一個安全狀態
假定系統中有五個程序{P0,P1,P2,P3,P4}和三類資源{A,B,C},各種資源的數量分別為10、5、7,在T0時刻的資源分配情況如圖所示。
利用安全性演算法在下表找一個安全序列{P1,P3,P4,P2,P0},故是安全的。(最後檢查應是資源釋放完後又回到10、5、7 )
A,B,C現在資源數目依次是3,3,2,依次檢查是否安全:P0不安全,P1安全,把資源給P1,P1完成後釋放佔用的所有資源,所以現在A,B,C的資源數目是5,3,2,,然後依次檢查P2不安全,P3安全,P3完成後釋放資源,A,B,C資源數目為7,4,3,P4安全,釋放資源數目為7,4,5,檢查P2安全,釋放資源A,B,C資源數目為10,4,7,檢查P0安全,釋放資源A,B,C數目為10,5,7
7,死鎖的檢測
當系統為程序分配資源時,若未採取任何限制性措施,則系統必須提供檢測和解除死鎖的手段,為此係統必須:
1)儲存有關資源的請求和分配資訊;
2)提供一種演算法,以利用這些資訊來檢測系統是否已進入死鎖狀態
1),資源分配圖
系統死鎖可利用資源分配圖來描述。
圓圈表示程序
方框表示一類資源,其中的一個點代表一個該類資源
請求邊由程序指向方框中的資源
分配邊則由方框中的一個點即資源指向程序。
2),死鎖定理
利用資源分配圖簡化法來檢測死鎖。 簡化方法如下:
1.在資源分配圖中找出一個既不阻塞又非獨立的程序結點Pi,在順利的情況下執行完畢,釋放其佔有的全部資源。
2.由於釋放了資源,這樣能使其它被阻塞的程序獲得資源繼續執行。消去了Pi的邊。
3.經過一系列簡化後,若能消去圖中所有邊,使結點都孤立,稱該圖是可完全簡化的。
S狀態為死鎖狀態的充分條件是當且僅當S狀態的資源分配圖是不可完全簡化的。<死鎖定理>
8,死鎖的解除
當發現程序死鎖時,便應立即把它們從死鎖狀態中解脫出來。常採用的方法是:
1)剝奪資源。從其他程序剝奪足夠數量的資源給死鎖程序以解除死鎖狀態。
2)撤銷程序。最簡單的是讓全部程序都死掉;溫和一點的是按照某種順序逐個撤銷程序,直至有足夠的資源可用,使死鎖狀態消除為止。
死鎖處理方法比較