當前位置:首頁 » 操作系統 » 避免死鎖的演算法

避免死鎖的演算法

發布時間: 2022-11-15 06:54:44

1. 避免死鎖演算法和死鎖檢測演算法的區別

死鎖的條件互斥條件(Mutual exclusion):資源不能被共享,只能由一個進程使用。請求與保持條件(Hold and wait):已經得到資源的進程可以再次申請新的資源。非剝奪條件(No pre-emption):已經分配的資源不能從相應的進程中被強制地剝奪。循環等待條件(Circular wait):系統中若干進程組成環路,改環路中每個進程都在等待相鄰進程正佔用的資源。處理死鎖的策略1.忽略該問題。例如鴕鳥演算法,該演算法可以應用在極少發生死鎖的的情況下。為什麼叫鴕鳥演算法呢,因為傳說中鴕鳥看到危險就把頭埋在地底下,可能鴕鳥覺得看不到危險也就沒危險了吧。跟掩耳盜鈴有點像。2.檢測死鎖並且恢復。3.仔細地對資源進行動態分配,以避免死鎖。4.通過破除死鎖四個必要條件之一,來防止死鎖產生。

2. 死鎖及死鎖的處理策略

  死鎖是指兩個或兩個以上的進程因競爭資源而造成的一種互相等待的現象,若無外力作用,這些進程都將無法向前推進。

  飢餓:由於長期得不到想要的資源而導致進程無法向前推進的現象。如在進程調度演算法中的短進程優先演算法中,若有源源不斷的短進程到來,則長進程一直得不到處理機,從而發生了長進程飢餓。
  死循環:某進程執行的過程中一直跳不出某種循環的現象。死循環可能是因為程序bug或者程序員有意為之。

  (1) 互斥條件。 只有對必須互斥使用的資源爭搶(如列印機設備)才能導致死鎖。
  (2) 不剝奪條件。 進程所獲得的資源在未使用完之前,不能由其他進程強行奪走,只能主動釋放。如果進程可以搶奪其他進程持有自己需要的資源的話,也就不會產生死鎖了,需要資源直接搶就行了。
  (3) 請求和保持條件。 進程已經保持了至少一個資源,但是又提出了新的資源需求,而該資源又被其他進程佔有,此時請求進程被阻塞,但是又對自己持有的資源保持不放。也是很簡單的道理,如果一個進程請求的資源被阻塞,就釋放了自己持有的資源,其他進程就可以獲取它釋放的資源,也就不會發生相互等待而導致死鎖了。
  (4) 循環等待條件。 存在一種進程資源的循環等待鏈,鏈中的每一個進程已經獲得的資源同時被下一個進程所請求。

  (1) 對系統資源的爭搶。各進程對不可剝奪資源的競爭可能會引起死鎖。
  (2) 進程推進順序非法。如果請求資源的順序不當也會導致死鎖,如上面的圖,雙方請求的資源被對方佔有而導致死鎖。
  (3) 信號量的使用不當。並發執行進程時,如果信號量使用的順序不當也會到導致死鎖。
  總之,對不可剝奪的資源的不合理分配,可能導致死鎖。

  (1) 預防死鎖。 破壞死鎖產生的四個必要條件中的一個或幾個。
  (2) 避免死鎖。 用某種方法防止系統進入安全狀態,從而避免死鎖(銀行家演算法)。
  (3) 死鎖的檢測和解除。 允許死鎖的發生,不過操作系統會負責檢測出死鎖的發生,然後才去某種措施解除死鎖。

  如果把只能互斥使用的資源改造成允許共享使用,則系統不會進入死鎖狀態。如 SPOOLing技術 。操作系統可以採用SPOOLing技術吧獨占設備在邏輯上改造成共享設備。 它由專門負責 I/O 的常駐內存進程以及輸入、輸出井組成。 比如,用SPOOLing技術將列印機改造為共享設備...

  缺點:並不是所有的資源都可以改造成共享使用的資源。並且為了系統安全,有時候還需要保護這種互斥性。

  方案一:當某個進程請求新的資源得不到滿足時,它必須立即釋放保持的所有資源,待以後需要時重新申請。
  方案二:申請的資源被其他進程佔用時,藉助操作系統的協助,剝奪進程資源,至於剝奪哪個進程資源可以根據優先順序考慮。
  缺點:實現復雜。暫時請求不到某個資源,之前獲取的資源就需要釋放,以後重新申請,如果一直這樣可能會導致飢餓。

  可以採用 靜態分配方法 ,即進程在運行前一次申請完它所需要的全部資源,在它的資源未滿足之前,不讓它運行。一旦運行,這些資源在運行期間一直歸它所有,該進程就不會再請求別的任何資源。
  缺點:如果有些資源只需要用很短的時間,因此如果進程運行時間長,在運行期間都會保持持有所有資源,就會造成資源浪費, 資源利用率低。 此外,該策略可能導致某些進程飢餓。如下,如果C類進程需要資源1和資源2,如果有大量的A或B類進程,就會導致C類進程一直不能一次獲取全部需要的資源,導致飢餓。

  可採用 順序資源分配法。 首先給系統中的資源編號,規定每個進程必須按編號遞增的順序請求資源,同類資源一次申請完。
  原理:一個進程只要已佔有我號的資源時,才有資格申請更大號編號的資源。按照這樣的規則,已持有大編號的資源就不會逆向回來申請我號的資源,從而就不會產生循環等待的現象。
  缺點:
  (1) 實現復雜。
  (2) 不方便增加新的設備,因為要重新分配所有編號。
  (3) 進程實際使用資源的順序可能和資源編號遞增順序不一致,會導致資源浪費。例如列印機設備編號2,輸出設備編號為1,那麼一個進程請求列印機設備前,必須先請求輸出設備,而輸出設備在請求列印機設備這一段時間內根本沒有發揮作用,其他進程也不能訪問,造成資源浪費。

  假如你是一個成功的銀行家,手裡有100個小目標資金....現在有三家公司A、B、C分別向從你貸款

  然而,有個規則,如果借給企業的錢達不到企業提出的最大需求,那麼錢可能就一去不復返了.....
  剛開始,三家公司分別從你這里借了20、10、30億.......

  此時,手裡還要40億,此時B表示還要借20億,那麼你需要考慮可以借嗎?
  如果給B借了20億.....此時手裡還要有20億。

  之後看手裡剩下的錢能不能周轉過來,現在可以將剩下的20億借給C,C就達到了最大需求,之後C還錢50億,然後借給A,A達到最大需求,最後A還70億,最後A........還好借給B20億後,可以通過 C->A->B 這個順序周轉,所以這20億可以借。
  現在看另一種情況,回到最初狀態,現在手裡還有40億

  對於上面的第一種借給B20億是安全的,因為會存在C->A->B這樣的周轉路徑(安全序列),不會血本無歸。
   安全序列:如果系統按照這種序列分配資源,則每個進程都能順利完成。 只要能找出一個安全序列,系統就是 安全的 。一個系統的 安全序列可能有多個
  如果分配了資源之後,系統中找不到任何一個安全序列,系統進入了 不安全狀態 ,這就意味著之後可能所有的進程都無法順序執行下去。當然,如果有進程提前歸還了一些資源(如對上面的第二中情況,如果B提前還10億,那麼就可以周轉了....),那系統也可能 重新回到安全狀態 ,不過在分配資源之前總是考慮最壞情況 。
  如果系統處於 安全狀態 ,就 一定不會發生死鎖 。如果系統進入了不安全狀態未必一定發生死鎖,但是發生了死鎖一定是在不安全狀態。

   銀行家演算法 核心思想: 在進程提出資源請求時,先預先判斷此次分配是否會導致系統進入不安全狀態,如果進入不安全狀態,就暫時不答應這次請求,讓該進程先阻塞。
  銀行家演算法步驟:

  如果系統中既不採取預防死鎖的措施,也不採取避免死鎖的措施,系統就很可能發生死鎖。在這種情況下,系統應當提供兩個演算法:
  (1) 死鎖檢測演算法:用於檢測系統狀態,以確定系統中是否發生了死鎖。
  (2) 死鎖解除演算法:當認定系統中已經發生了死鎖,利用該演算法可將系統從死鎖狀態中解脫出來。

  系統死鎖可利用 資源分配圖 來描述。

  上圖可以看到,R1類資源的資源數已經全部分配完了,R2類資源還有一個資源。P1進程向R2類資源請求一個資源,P2進程向R1類資源請求一個資源。
  如果系統中剩餘可用的資源數足夠滿足進程的需求,那麼這個進程暫時是不會阻塞的,可以順利的執行下去。如果這個進程執行結束了把資源歸還給系統,就可能使某些正在等待的資源的進程重新被激活,並順利的執行下去。相應的,這些被激活的進程執行完後又會歸還一些資源,這樣可能又會激活另外一些阻塞的進程...

  按照上面的過程分析,最終 能消除所有邊 ,就稱這個圖是 可完全簡化的 。此時一定 沒有發生死鎖 (相當於找到一個安全序列)。如果最終 不能消除所有邊 ,那麼此時就是 發生死鎖了。
   最終還連著邊的進程就是處於死鎖狀態的進程。
  檢測死鎖的演算法:

   死鎖定理:如果某時刻系統的資源分配圖是不可完全簡化的,那麼此時系統死鎖。
  下圖是一個系統死鎖的圖:

  即使P3釋放了資源,P1和P2進程都不滿足繼續運行的條件,所以此時P1和P2就是死鎖進程。

  解除死鎖的方法有:
  (1) 資源剝奪法。 掛起(暫時放在外存上)某些死鎖進程,並搶占它的資源,將這些資源分配給其他進程,但是應防止被掛起長時間導致飢餓。
  (2) 撤銷進程法。 強制撤銷部分、甚至全部死鎖進程,並剝奪這些進程的資源。這中方法實現簡單,但是也是有代價的,如果有些已經運行了很長時間了,離成功只有一步之遙了,此時撤銷導致功虧一簣,還需要從頭再來....
  (3) 進程回退法。 讓一個或多個死鎖進程回退到足以避免死鎖的地步。這就要求系統要記錄進程的歷史信息,設置還原點。

  那麼對哪些進程動手呢?可以考慮優先對以下的進程處理:
  (1) 優先順序低的進程。
  (2) 執行時間段的進程。
  (3) 距離運行結束剩餘時間長的進程。
  (4) 使用資源多的進程。
  (5) 批處理式而不是互動式的進程。

3. 解決死鎖的4種基本方法(值得收藏)

解決死鎖的4種基本方法(文末有驚喜)

1、預防死鎖:通過設置一些限制條件,去破壞產生死鎖的必要條件

2、避免死鎖:在資源分配過程中,使用某種方法避免系統進入不安全的狀態,從而避免發生死鎖

3、檢測死鎖:允許死鎖的發生,但是通過系統的檢測之後,採取一些措施,將死鎖清除掉

4、解除死鎖:該方法與檢測死鎖配合使用

死鎖介紹

死鎖是指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。

產生條件

雖然進程在運行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個必要條件。

1)互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個進程佔用。如果此時還有其它進程請求資源,則請求者只能等待,直至佔有資源的進程用畢釋放。

2)請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程佔有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。

3)不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

4)環路等待條件:指在發生死鎖時,必然存在一個進程——資源的環形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1佔用的資源;P1正在等待P2佔用的資源,……,Pn正在等待已被P0佔用的資源。

小關注來一波,我為你們准備了最新java學習資料文檔以及高清視頻教程,有需要的小夥伴掃一掃更直接

4. 計算機死鎖是什麼意思

所謂死鎖<DeadLock>:
是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等竺的進程稱為死鎖進程.
由於資源佔用是互斥的,當某個進程提出申請資源後,使得有關進程在無外力協助下,永遠分配不到必需的資源而無法繼續運行,這就產生了一種特殊現象死鎖。
一種情形,此時執行程序中兩個或多個線程發生永久堵塞(等待),每個線程都在等待被其他線程佔用並堵塞了的資源。例如,如果線程A鎖住了記錄1並等待記錄2,而線程B鎖住了記錄2並等待記錄1,這樣兩個線程就發生了死鎖現象。
計算機系統中,如果系統的資源分配策略不當,更常見的可能是程序員寫的程序有錯誤等,則會導致進程因競爭資源不當而產生死鎖的現象。
理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、進程調度等方面注意如何不讓這四個必要條件成立,如何確定資源的合理分配演算法,避免進程永久占據系統資源。此外,也要防止進程在處於等待狀態的情況下佔用資源,在系統運行過程中,對進程發出的每一個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,若分配後系統可能發生死鎖,則不予分配,否則予以分配
。因此,對資源的分配要給予合理的規劃。
一、有序資源分配法
這種演算法資源按某種規則系統中的所有資源統一編號(例如列印機為1、磁帶機為2、磁碟為3、等等),申請時必須以上升的次序。系統要求申請進程:
1、對它所必須使用的而且屬於同一類的所有資源,必須一次申請完;
2、在申請不同類資源時,必須按各類設備的編號依次申請。例如:進程PA,使用資源的順序是R1,R2;
進程PB,使用資源的順序是R1,R2;若採用動態分配有可能形成環路條件,造成死鎖。
採用有序資源分配法:R1的編號為1,R2的編號為2;
PA:申請次序應是:R1,R2
PB:申請次序應是:R1,R2
這樣就破壞了環路條件,避免了死鎖的發生
二、銀行演算法
避免死鎖演算法中最有代表性的演算法是Dijkstra
E.W
於1968年提出的銀行家演算法:
該演算法需要檢查申請者對資源的最大需求量,如果系統現存的各類資源可以滿足申請者的請求,就滿足申請者的請求。
這樣申請者就可很快完成其計算,然後釋放它佔用的資源,從而保證了系統中的所有進程都能完成,所以可避免死鎖的發生。

5. 死鎖怎麼解決

處理死鎖的思路如下:

預防死鎖:破壞四個必要條件中的一個或多個來預防死鎖。

避免死鎖:在資源動態分配的過程中,用某種方式防止系統進入不安全的狀態。

檢測死鎖:運行時產生死鎖,及時發現思索,將程序解脫出來。

解除死鎖:發生死鎖後,撤銷進程,回收資源,分配給正在阻塞狀態的進程。

預防死鎖的辦法:

破壞請求和保持條件:

1、一次性的申請所有資源。之後不在申請資源,如果不滿足資源條件則得不到資源分配。

2、只獲得初期資源運行,之後將運行完的資源釋放,請求新的資源。

破壞不可搶占條件:當一個進程獲得某種不可搶占資源,提出新的資源申請,若不能滿足,則釋放所有資源,以後需要,再次重新申請。

破壞循環等待條件:對資源進行排號,按照序號遞增的順序請求資源。若進程獲得序號高的資源想要獲取序號低的資源,就需要先釋放序號高的資源。

(5)避免死鎖的演算法擴展閱讀

形成死鎖的四個必要條件:

(1) 互斥條件:一個資源每次只能被一個進程使用。

(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。

(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。

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

如果一組進程中每一個進程都在等待僅由該組進程中的其他進程才能引發的事件,那麼該組進程是死鎖的。

舉例來說:有兩個進程A和B,A持有資源a等待b資源,B持有資源b等待a資源,兩個進程都在等待另一個資源的同時不釋放資源,就形成死鎖。

6. 避免死鎖的一個著名演算法

避免死鎖的著名演算法是銀行家演算法。

演算法有四個條件:

1、分批向銀行貸款時,申請的總額不能超過一開始申請的額度;

2、申請貸款時不能超過銀行現有資金數目;

3、當銀行資金不能滿足顧客貸款需求時,可以推遲支付,但是肯定會讓顧客在需求時間內得到貸款;

4、顧客拿到貸款後必須在規定時間內歸還。

7. 預防死鎖的方法


1、避免一個線程同時獲取多個鎖。
2、避免一個線程在鎖內同時佔用多個資源,盡量保證每個鎖只佔用一個資源。
3、嘗試使用定時鎖,使用Lock.tryLock(timeout)來替代使用內部鎖機制。
4、對於資料庫鎖,加鎖和解鎖須在一個資料庫連接里,否則會出現解鎖失敗的情況。

8. 什麼是死鎖請給出預防死鎖的方法(預防死鎖的方法有哪些)

1、預防死鎖的方法有哪些。

2、預防死鎖的方法。

3、預防死鎖的方法兩種。

4、預防死鎖的方法有哪兩種。

1.避免一個線程同時獲取多個鎖。

2.避免一個線程在鎖內同時佔用多個資源,盡量保證每個鎖只佔用一個資源。

3.嘗試使用定時鎖,使用Lock.tryLock(timeout)來替代使用內部鎖機制。

4.對於資料庫鎖,加鎖和解鎖須在一個資料庫連接里,否則會出現解鎖失敗的情況。

5.產生死鎖的原因主要是:因為系統資源不足。

6.進程運行推進的順序不合適。

7.資源分配不當等。

8.如果系統資源充足,進程的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則就會因爭奪有限的資源而陷入死鎖。

9.第二,進程運行推進順序和速度不同,也可能產生死鎖。

10.產生死鎖的四個必要條件:互斥條件:一個資源每次只能被一個進程使用。

11.請求和保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。

12.不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。

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

14.這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

9. 解決死鎖的4種基本方法

解決死鎖的4種基本方法:

1、預防死鎖:通過設置一些限制條件,去破壞產生死鎖的必要條件。

2、避免死鎖:在資源分配過程中,使用某種方法避免系統進入不安全的狀態,從而避免發生死鎖。

3、檢測死鎖:允許死鎖的發生,但是通過系統的檢測之後,採取一些措施,將死鎖清除掉。

4、解除死鎖:該方法與檢測死鎖配合使用。

產生條件

進程在運行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個必要條件。

1)互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個進程佔用。如果此時還有其它進程請求資源,則請求者只能等待,直至佔有資源的進程用畢釋放。

2)請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程佔有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。

3)不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

4)環路等待條件:指在發生死鎖時,必然存在一個進程——資源的環形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1佔用的資源;P1正在等待P2佔用的資源,……,Pn正在等待已被P0佔用的資源。

熱點內容
刪除sqlserver服務 發布:2024-05-18 16:47:06 瀏覽:322
密碼盒的密碼是多少錢 發布:2024-05-18 16:43:52 瀏覽:94
linux哪個c語言編譯器好用 發布:2024-05-18 16:30:03 瀏覽:468
搜狐視頻無法緩存 發布:2024-05-18 16:30:03 瀏覽:309
小鳥雲伺服器值不值得買 發布:2024-05-18 16:30:01 瀏覽:898
durbin演算法 發布:2024-05-18 16:29:57 瀏覽:555
qq郵箱訪問受限 發布:2024-05-18 16:23:27 瀏覽:472
電信光纖上傳限制 發布:2024-05-18 16:08:05 瀏覽:910
sql中的limit 發布:2024-05-18 16:05:57 瀏覽:895
啟動ug時伺服器無響應是怎麼回事 發布:2024-05-18 15:48:24 瀏覽:372