什么是死鎖?死鎖產生的條件?


1). 死鎖的概念

 

通俗的講,就是兩個或多個進程無限期的阻塞、相互等待的一種狀態。

 

2). 死鎖產生的四個必要條件

 

互斥:至少有一個資源必須屬於非共享模式,即一次只能被一個進程使用;若其他申請使用該資源,那么申請進程必須等到該資源被釋放為止;

 

占有並等待:一個進程必須占有至少一個資源,並等待另一個資源,而該資源為其他進程所占有;

 

非搶占:進程不能被搶占,即資源只能被進程在完成任務后自願釋放

 

循環等待:若干進程之間形成一種頭尾相接的環形等待資源關系

 

3). 死鎖的處理基本策略和常用方法

 

解決死鎖的基本方法主要有 預防死鎖、避免死鎖、檢測死鎖、解除死鎖 、鴕鳥策略 等。

 

 (1). 死鎖預防

死鎖預防的基本思想是 只要確保死鎖發生的四個必要條件中至少有一個不成立,就能預防死鎖的發生,具體方法包括:

 

打破互斥條件:允許進程同時訪問某些資源。但是,有些資源是不能被多個進程所共享的,這是由資源本身屬性所決定的,因此,這種辦法通常並無實用價值。

 

打破占有並等待條件:可以實行資源預先分配策略(進程在運行前一次性向系統申請它所需要的全部資源,若所需全部資源得不到滿足,則不分配任何資源,此進程暫不運行;只有當系統能滿足當前進程所需的全部資源時,才一次性將所申請資源全部分配給該線程)或者只允許進程在沒有占用資源時才可以申請資源(一個進程可申請一些資源並使用它們,但是在當前進程申請更多資源之前,它必須全部釋放當前所占有的資源)。但是這種策略也存在一些缺點:在很多情況下,無法預知一個進程執行前所需的全部資源,因為進程是動態執行的,不可預知的;同時,會降低資源利用率,導致降低了進程的並發性。

 

打破非搶占條件:允許進程強行從占有者哪里奪取某些資源。也就是說,但一個進程占有了一部分資源,在其申請新的資源且得不到滿足時,它必須釋放所有占有的資源以便讓其它線程使用。這種預防死鎖的方式實現起來困難,會降低系統性能。

 

打破循環等待條件:實行資源有序分配策略。對所有資源排序編號,所有進程對資源的請求必須嚴格按資源序號遞增的順序提出,即只有占用了小號資源才能申請大號資源,這樣就不回產生環路,預防死鎖的發生。

 

 (2). 死鎖避免的基本思想

死鎖避免的基本思想是動態地檢測資源分配狀態,以確保循環等待條件不成立,從而確保系統處於安全狀態。所謂安全狀態是指:如果系統能按某個順序為每個進程分配資源(不超過其最大值),那么系統狀態是安全的,換句話說就是,如果存在一個安全序列,那么系統處於安全狀態。資源分配圖算法和銀行家算法是兩種經典的死鎖避免的算法,其可以確保系統始終處於安全狀態。其中,資源分配圖算法應用場景為每種資源類型只有一個實例(申請邊,分配邊,需求邊,不形成環才允許分配),而銀行家算法應用於每種資源類型可以有多個實例的場景。

 

(3). 死鎖解除

 

死鎖解除的常用兩種方法為進程終止和資源搶占。所謂進程終止是指簡單地終止一個或多個進程以打破循環等待,包括兩種方式:終止所有死鎖進程和一次只終止一個進程直到取消死鎖循環為止;所謂資源搶占是指從一個或多個死鎖進程那里搶占一個或多個資源,此時必須考慮三個問題:

(I). 選擇一個犧牲品

(II). 回滾:回滾到安全狀態

(III). 飢餓(在代價因素中加上回滾次數,回滾的越多則越不可能繼續被作為犧牲品,避免一個進程總是被回滾)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM