摘 要:本文旨在研究操作系統進程的死鎖問題,進程死鎖問題一直困擾著操作系統設計者,很多學者專家一直研究怎樣解決這個問題。本文首先提出了死鎖的概念,死鎖的起因及產生死鎖四個必要條件;然后深入研究探討解決死鎖問題,并給出可行方案。
關鍵詞:操作系統 進程 死鎖
一、死鎖的基本概念
1.死鎖的概念(產生死鎖的原因和必要條件)
在多道程序系統中,可借助于多個進程的并發執行來改善系統的資源利用率和提高系統的處理能力。但可能發生一種危險——死鎖。
死鎖,是指多個進程因競爭資源而造成的一種僵局,若無外力作這些進程都將永遠不能再向前推進。
產生死鎖的原因可歸結為以下兩點:
(1)競爭資源。為多個進程所共享的資源不足,引起它們對資源的競爭而產生死鎖;
(2)進程推進順序不當。進程運動過程中,請求和釋放資源的順序不當,而導致進程死鎖。
2.死鎖的起因
(1)競爭資源引起死鎖

二、死鎖的處理
1.預防死鎖
通過設置某些限制條件,以破壞產生死鎖的四個必要條件中的一個或幾個,來防止發生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。但由于所施加的限制條件往往太嚴格,可能導致資源利用率很低。
我們可以通過使(2)、(3)、(4)三個必要條件不能成立的方法,來預防死鎖的產生,至于必要條件(1),由于是設備的固有特性,不僅不能改變,還應設法加以保證。
(1)摒棄“請求和保持”條件
為了摒棄這一條件,系統要求所有進程都一次性地申請其所需的全部資源,若系統擁有足夠的資源分配給進程時,便把進程所需資源分配給它,這樣,該進程在整個運行期間,便不會再提出資源請求,從而摒棄了請求條件,但只要有一種資源的要求不能滿足,則已有的其他資源也全部不分配給該進程,讓進程等待。由于在等待期間的進程不占有任何資源,因此摒棄了保持條件,從而可以避免發生死鎖。
這種方法的優點是簡單,易于實現,且很安全;但缺點也極其明顯:
資源嚴重浪費:一個進程一次獲得共所需的全部資源,嚴重地惡化了系統的資源利用率;
進程推遲運行:僅當進程獲得其所需全部資源后,方能開始運行,但可能有某些資源長期被其它進程占用,致使進程遲遲不能運行。
(2)摒棄“不剝奪”條件
該策略規定,一個已保持了某些資源的進程,若新的資源要求不能立即得到滿足,它必須釋放已保持的所有資源,以后需要時再重新申請。這意味著,進程已占有資源在運行過程中可被剝奪,從而摒棄了“不剝奪條件”。
這種策略實現起來比較復雜,且要付出很大代價。因為一個資源在使用一段時間后被釋放,可能會造成前階段工作的失效。此外,該策略還可能由于反復地申請和釋放資源,使進程的執行無限推遲。這不僅延長了進程的周轉時間,也增加了系統開銷。
(3)摒棄“環路等待”條件
該策略規定,系統將所有的資源按類型進行線性排隊,并賦予不同的序號。例如,令輸入機的序號為1,打印機的序號為2,穿孔機為3,磁帶機為4,磁盤為5。所有進程對資源請求,必須嚴格按資源序號遞增的順序提出,如果申請的資源號小于已占用的資源序號,則它必須釋放出序號小于申請序號的已占用資源。可以證明系統在任何情況下,不可能進入循環等待狀態(用反證法),因而摒棄了“環路等待”條件。在采用這種策略時,由于總有一個進程占據了較高序號的資源,它繼續請求的資源必然是空閑的,因此進程可以一直向前推進。
該策略較之前兩種策略,在資源利用率、系統吞吐量上都有顯蓍提高,但也存在不述嚴重問題:
(1)為系統中各種資源類型分配的序號,必須相對穩定,這就限制了新設備類型的增加;
(2)盡管在為資源分配序號時,已考慮到大多數作業實際使用這些資源的順序,但也經常會發生作業使用資源的順序與系統規定順序不同的情況,造成資源的浪費。
2.避免死鎖
不需事先采取各種限制措施去破壞產生死鎖的必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。這種方法只需在事先加以較弱的限制條件,便可獲得較高的資源利用率及系統吞吐量,但在實現上有一定的難度。在目前較完善的系統中,常用此方法來避免死鎖的發生。
在預防死鎖中所采取的幾種策略,都施加了較強的限制條件,因而嚴重地損害了系統性能。而避免死鎖方法所施加的限制條件較弱,可能獲得較為滿意的系統性能。
死鎖避免可被稱為動態預防,因為系統采用動態分配資源的方法,在分配過程中預測出死鎖發生的可能性并加以避免。這種方法中把運行中的系統歸為下述兩種狀態:
(1)安全與不安全狀態

3.檢測死鎖和解除死鎖
預防和避免死鎖的方法相對比較保守,且都是以犧牲機器的效率和浪費資源為代價的,檢測和解除死鎖預先并不采取任何限制性措施,也不檢查系統是否已進入不安全態,允許系統在運行過程中發生死鎖,但可通過系統設置的檢測機構,及時地檢測出死鎖的發生,并精確地確定與死鎖有關的進程和資源;然后,采取適當措施,以最小的代價從系統中將已發生的死鎖清除掉。
解除死鎖是與檢測死鎖相配套的一種措施,用于將進程從死鎖狀態下解脫出來。常用的實施方法是撤消或掛起一些進程,以便回收一些資源,再將這些資源分配給已處于阻塞狀態的進程,使之轉為就緒狀態以繼續運行。
(1)剝奪資源。從其它進程剝壓足夠數量的資源給死鎖進程,以解除死鎖狀態;
(2)撤消進程。最簡單的撤消進程的方法是使全部死鎖進程都夭折掉;稍為溫和一點的方法是按照某種順序逐個地撤消進程,直至有足夠的資源可用,死鎖狀態消除為止。
死鎖的檢測和解除,有可能使系統獲得較好的資源利用率和系統吞吐量,但在實現上難度也較大。
三、結束語
計算機的軟硬件不斷地更新換代,這使得計算機性能大幅度的提升,但是提升的同時,資源浪費這個問題也就越來越嚴重。在解決資源浪費的同時,操作系統進程的死鎖問題又困擾著程序設計者。本文針對這個問題作出的系統的研究并且提出了問題的解決方案,為計算機資源可以被充分的利用提供了一些理論基礎。相信隨著計算機的快速發展,操作系統進程的死鎖問題會得到很好的解決。
參考文獻:
[1]吳企淵.計算機操作系統.清華大學,2006.
[2]劉義常.操作系統原理.中國水電,2006.
[3]陸麗娜.分布式操作系統.電子工業,2005.
[4](美)Abraham Silberschatz Peter Baer Galvin Greg Gagne操作系統概念(第六版)高等教育出版社,2002—05.
[5]進程管理知識庫.http://www.acfile.com/.