進程死鎖及解決辦法:
一:死鎖的概念:
死鎖是進程死鎖的簡稱
什么是死鎖:
死鎖是指多個進程循環等待他方占有的資源而無限的僵持下去的局面。很顯然,沒有外力作用,那么死鎖涉及到的各個進程都將永遠處於>封鎖狀態。計算機系統產生死鎖的根本原因就是資源有限且操作不當。即為:一種原因是系統提供的資源太少了,遠不能滿足並發進程對資源的需求。這種競爭資源>引起的死鎖是我們將要討論的核心。例如:一種臨時性資源。某一時刻,進程A等待進程B發來的信息,進程B等待進程C發來的信息,而進程C又等待進程A發來的信息>。信息未到,A、B、C三個進程均無法向前推進,也會發生進程通信上的死鎖。另一種原因是進程推進順序不合適而引發的死鎖。資源少也未必一定產生死鎖。就如同
兩個人過獨木橋,如果兩個人同時過必然會競爭資源而產生死鎖。
產生死鎖的四個必要條件:
1,互斥條件:即為某個資源在一段時間內只能由一個進程占有,不能同時被兩個或者兩個以上的進程占有。
2,不可搶占條件:進程所獲得的資源在未使用完畢之前,資源申請者不能強行從資源占有者手中奪取資源,而只能由該資源占有者自行釋放。
3,占有且申請條件:進程至少已經占有一個條件,但又申請新的資源;由於該資源已被另外進程占有,此時該進程阻塞;但是,他在等待新的資源之時,
仍然繼續占有已占用的資源。
4,換路等待:存在一個進程等待序列{P1,p2,..,pn}其中P1等待P2所占有的資源,P2等待P3占有的資源,.....,而Pn等待P1所占有的資源,形成一個
進程循環等待環。
上面我們說這四個條件在死鎖時會同時發生。也就是說,只要有一個辟謠條件不滿足,則死鎖就可以排除。
二:死鎖的預防:
一般的,解決死鎖的方法分為死鎖的預防,避免,檢測與恢復三種。
死鎖的預防是保證系統不進入死鎖狀態的一種策略。它的基本思想就是要求進程申請資源時遵循某種協議,從而打破產生死鎖的四個必要條件中的>一個或者多個,保證系統不會進入死鎖狀態。
1)打破互斥條件。即為允許進程同時訪問某些資源。
2)打破不可搶占條件。即為允許進程強行從占有者那里奪取某些資源。
3)打破占有且申請條件。即為可以實行資源預分配策略。
缺點:
1,在許多情況下,進程在執行之前不可能知道它所需要的全部資源。
2,資源利用率低。
3,降低了進程的並發性。
4)打破循環等待條件,實行資源有序分配策略。
缺點:
1,限制了進程對資源的請求
2,為了遵循按編號申請的次序,暫不使用的資源也需要提前申請,從而增加了進行對資源的占用時間。
三: 死鎖的避免:
對進程發出的每一個申請資源命令加以動態的檢查,並根據檢查結果決定是否進行資源分配。就是說,在資源分配的過程中若預測有發生死鎖的可>能性,則加以避免。這種方法的關鍵是確定資源分配的安全性。
1,安全序列:
所謂系統是安全的,是指系統中的所有進程能夠按照某一種次序分配資源,並且依次的運行完畢,這種進程序列{P1,P2,..,Pn}就是安全序
列。安全序列是這樣組成的:若對於每一個進程Pi,它需要的附加資源可以被系統中當前可用資源加上所有進程Pj當前占有資源之和所滿足,則{P1,P2,...,Pn}為一個
安全序列,這時系統處於安全狀態,不會進入死鎖狀態。
2,銀行家算法:
銀行家算法就是從當前狀態出發,逐個按安全序列檢查各客戶誰能完成其工作,然后嘉定其完成工作且歸還全部貸款,再檢查下一個能完>成工作的客戶,....。如果所有客戶都能完成工作,則找到一個安全序列,銀行家才安全
四:死鎖的檢測與恢復:
死鎖檢測與恢復是指系統設有專門機構,當死鎖發生時,該機構能夠檢測到死鎖發生的位置和原因,並能通過外力破壞死鎖發生的必要條件,從而>使得進程從死鎖的狀態中恢復出來。