死鎖:是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。
產生死鎖的原因主要是: (1) 因為系統資源不足。 (2) 進程運行推進的順序不合適。 (3) 資源分配不當等。 如果系統資源充足,進程的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則 就會因爭奪有限的資源而陷入死鎖。其次,進程運行推進順序與速度不同,也可能產生死鎖。
產生死鎖的四個必要條件: (1) 互斥條件:一個資源每次只能被一個進程使用。 (2) 占有且等待:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。 (3)不可強行占有:進程已獲得的資源,在末使用完之前,不能強行剝奪。 (4) 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。 這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之 一不滿足,就不會發生死鎖。
死鎖的解除與預防: 理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和 解除死鎖。所以,在系統設計、進程調度等方面注意如何不讓這四個必要條件成立,如何確 定資源的合理分配算法,避免進程永久占據系統資源。此外,也要防止進程在處于等待狀態 的情況下占用資源。因此,對資源的分配要給予合理的規劃
處理死鎖的基本方法: *死鎖預防:通過設置某些限制條件,去破壞死鎖的四個條件中的一個或幾個條件,來預防發生死鎖。但由于所施加的限制條件往往太嚴格,因而導致系統資源利用率和系統吞吐量降低。 *死鎖避免:允許前三個必要條件,但通過明智的選擇,確保永遠不會到達死鎖點,因此死鎖避免比死鎖預防允許更多的并發。 *死鎖檢測:不須實現采取任何限制性措施,而是允許系統在運行過程發生死鎖,但可通過系統設置的檢測機構及時檢測出死鎖的發生,并精確地確定于死鎖相關的進程和資源,然后采取適當的措施,從系統中將已發生的死鎖清除掉。 *死鎖解除:與死鎖檢測相配套的一種措施。當檢測到系統中已發生死鎖,需將進程從死鎖狀態中解脫出來。常用方法:撤銷或掛起一些進程,以便回收一些資源,再將這些資源分配給已處于阻塞狀態的進程。死鎖檢測盒解除有可能使系統獲得較好的資源利用率和吞吐量,但在實現上難度也最大。
二 死鎖預防:破壞死鎖的四個條件中的一個或幾個。 (1)互斥:它是設備的固有屬性所決定的,不僅不能改變,還應該加以保證。 (2)占有且等待: 為預防占有且等待條件,可以要求進程一次性的請求所有需要的資源,并且阻塞這個進程直到所有請求都同時滿足。這個方法比較低效。 (3)不可搶占: 預防這個條件的方法: *如果占有某些資源的一個進程進行進一步資源請求時被拒絕,則該進程必須釋放它最初占有的資源。 *如果一個進程請求當前被另一個進程占有的一個資源,則操作系統可以搶占另外一個進程,要求它釋放資源。 (4)循環等待:通過定義資源類型的線性順序來預防。 *如果一個進程已經分配了R類資源,那么接下來請求的資源只能是那些排在R類型之后的資源類型。該方法比較低效。
三 死鎖避免: (1)兩種死鎖避免算法: *進程啟動拒絕:如果一個進程的請求會導致死鎖,則不啟動該進程。 *資源分配拒絕:如果一個進程增加的資源請求會導致死鎖,則不允許此分配(銀行家算法)。
(2)銀行家算法: 1.如果request<=need,轉向步驟2;否則認為出錯,因為請求資源大于需要資源。 2.如果request<=available,轉向步驟3,;否則尚無足夠資源,進程p阻塞; 3.系統嘗試為把資源分配給進程P,并修改available、allocation和need的數值。 4.系統執行安全性算法,檢查此次分配后系統是否處于安全狀態,若安全,才正式將資源分配給進程P,否則將本次試探性分配作廢,讓進程P等待。 *安全狀態:系統能按照某種進程順序,為每個進程分配資源,直至滿足每個進程對資源的最大需求,使每個進程都可順利完成。
(3)安全性算法: 1.設置兩個向量: *工作向量work:表示系統可提供給進程繼續運行的所需的各類資源的數目,執行安全算法開始時,work=available。 *finish:表示系統是否有足夠資源分配給進程,使之運行完成。開始時先做finish[i]=false;當有足夠資源分配給進程時再令finish[i]=true。 2.從進程集合找到一個滿足下列條件的進程: *finish[i]=false; *need<=work; *若找到執行步驟3;否則執行步驟4; 3.當進程P獲得資源后,可順利執行,直至完成,并釋放出分配給它的資源,故應執行: *work=work+allocation(P); *finish[i]=true; *循環執行步驟2; 4.如果所有進程的finish=true,則表示系統處于安全狀態;否則,系統處于不安全狀態。
四 死鎖檢測和解除 (1)死鎖檢測算法。 (2)死鎖的解除: *兩種常用的死鎖解除方法:剝奪資源和撤銷進程。
新聞熱點
疑難解答