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

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

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