死鎖

死鎖原理

    根據操作系統中的定義:死鎖是指在一組進程中的各個進程均佔有不會釋放的資源,但因互相申請被其他進程所站用不會釋放的資源而處於的一種永久等待狀態。例子:系統中只有一臺CD-ROM驅動器和一臺打印機,某一個進程佔有了CD-ROM驅動器,又申請打印機;另一進程佔有了打印機,還申請CD-ROM。結果,兩個進程都被阻塞,永遠也不能自行解除。這就是死鎖。

產生死鎖的主要原因有三點:

(一)系統資源不足;

(二)進程運行推進的順序不對;

(三)系統資源分配不當。

很容易能看出來上述例子出現死鎖的原因就是資源的分配不當。如果系統資源充足,進程的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則就會因爭奪有限的資源而陷入死鎖。此外·,進程運行推進順序與速度不同,也可能產生死鎖。

產生死鎖有四個必要條件:

(一)互斥條件:一個資源一次只能被一個進程訪問。即某個資源在一段時間內只能由一個進程佔有,不能同時被兩個或兩個以上的進程佔 有。這種獨佔資源如CD-ROM驅動器,打印機等等,必須在佔有該資源的進程主動釋放它之後,其它進程才能佔有該資源。這是由資源本身的屬性所決定的。

(二)請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。進程至少已經佔有一個資源,但又申請新的資源;由於該資源已被另外進程佔有,此時該進程阻塞;但是,它在等待新資源之時,仍繼續佔用已佔有的資源。

(三)不剝奪條件:進程已經獲得的資源,在未使用完之前不能強行剝奪,而只能由該資源的佔有者進程自行釋放。

(四)循環等待條件:若干資源形成一種頭尾相接的循環等待資源關係。

只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。這就爲我們解決死鎖問題提供了可能。一般地,解決死鎖的方法分爲死鎖的預防,避免,檢測與恢復三種(注意:死鎖的檢測與恢復是一個方法)。

死鎖的預防>>

死鎖的預防是保證系統不進入死鎖狀態的一種策略。它的基本思想是要求進程申請資源時遵循某種協議,從而打破產生死鎖的四個必要條件中的一個或幾個,保證系統不會進入死鎖狀態。

(一)打破互斥條件:即允許進程同時訪問某些資源。但是由於某些資源不允許被同時訪問,所以這種方法在實際中應用不大。

(二)打破不剝奪條件:即允許進程從佔有者佔有的資源中強行剝奪一些資源。也就是說當一個進程佔有了一些資源,它又去申請新的資源,但不能立即被滿足它必須釋放所佔有的資源,等到以後再重新申請。它所釋放的資源可以分配給其它進程。這就相當於該進程佔有的資源被隱蔽地強佔了。這種預防死鎖的方法實現起來困難,會降低系統性能。    

(三)打破請求與保持條件:可以實行資源預先分配策略。即進程在運行前一次性地向系統申請它所需要的全部資源。如果某個進程所需的全部資源得不到滿足,則不分配任何資源,此進程暫不運行。只有當系統能夠滿足當前進程的全部資源需求時,才一次性地將所申請的資源全部分配給該進程。由於運行的進程已佔有了它所需的全部資源,所以不會發生佔有資源又申請資源的現象,因此不會發生死鎖。但是在許多情況下,一個進程在執行之前不可能知道它所需要的全部資源。這是由於進程在執行時是動態的,不可預測的;而且資源利用率低。無論所分資源何時用到,一個進程只有在佔有所需的全部資源後才能執行。即使有些資源最後才被該進程用到一次,但該進程在生存期間卻一直佔有它們,造成長期佔着不用的狀況。這顯然是一種極大的資源浪費;降低了進程的併發性。因爲資源有限,又加上存在浪費,能分配到所需全部資源的進程個數就必然少了。    

(四)打破循環等待條件:實行資源有序分配策略。採用這種策略,即把資源事先分類編號,按號分配,使進程在申請,佔用資源時不會形成環路。所有進程對資源的請求必須嚴格按資源序號遞增的順序提出。進程佔用了小號資源,才能申請大號資源,就不會產生環路,從而預防了死鎖。這種策略與前面的策略相比,資源的利用率和系統吞吐量都有很大提高,但是也存在缺點:即限制了進程對資源的請求,同時給系統中所有資源合理編號也是件困難事,並增加了系統開銷;爲了遵循按編號申請的次序,暫不使用的資源也需要提前申請,從而增加了進程對資源的佔用時間。

死鎖的避免>>

死鎖的避免,它不限制進程有關申請資源的命令,而是對進程所發出的每一個申請資源命令加以動態地檢查,並根據檢查結果決定是否進行資源分配。就是說,在資源分配過程中若預測有發生死鎖的可能性,則加以避免。這種方法的關鍵是確定資源分配的安全性。

死鎖的檢測與恢復>>

一般來說,由於操作系統有併發,共享以及隨機性等特點,通過預防和避免的手段達到排除死鎖的目的是很困難的。這需要較大的系統開銷,而且不能充分利用資源。爲此,一種簡便的方法是系統爲進程分配資源時,不採取任何限制性措施,但是提供了檢測和解脫死鎖的手段:能發現死鎖並從死鎖狀態中恢復出來。因此,在實際的操作系統中往往採用死鎖的檢測與恢復方法來排除死鎖。

死鎖檢測與恢復是指系統設有專門的機構,當死鎖發生時,該機構能夠檢測到死鎖發生的位置和原因,並能通過外力破壞死鎖發生的必要條件,從而使得併發進程從死鎖狀態中恢復出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章