發(fā)布時間:2015-03-06所屬分類:科技論文瀏覽:1次
摘 要: 摘要:當一個進程申請資源得不到滿足時,可從另一個擁有這種資源的進程那里去搶奪,然后繼續(xù)運行。這種策略可以預防死鎖的發(fā)生是由于其破壞了非搶奪式分配的條件,從而系統(tǒng)中的所有進程必然不會發(fā)生死鎖。 關鍵詞:計算機系統(tǒng),預防技術,處理器, 計算機論文發(fā)
摘要:當一個進程申請資源得不到滿足時,可從另一個擁有這種資源的進程那里去搶奪,然后繼續(xù)運行。這種策略可以預防死鎖的發(fā)生是由于其破壞了“非搶奪式分配”的條件,從而系統(tǒng)中的所有進程必然不會發(fā)生死鎖。
關鍵詞:計算機系統(tǒng),預防技術,處理器,計算機論文發(fā)表
預防死鎖發(fā)生的有效方法,但是它們也有不足之處。例如,靜態(tài)分配策略和按序分配資源策略都有可能會出現(xiàn)進程在占有了資源后在相當一段時間里并不使用的情況,從而導致了系統(tǒng)資源利用率的下降;剝奪式分配資源策略在當前卻只適合于應用在對處理器和主存資源的分配,適用范圍較小。
在死鎖預防的策略中,通常的做法是防止死鎖發(fā)生的四個條件中的任意一個發(fā)生。但是死鎖預防的缺點是降低了資源利用率和系統(tǒng)吞吐率。解決死鎖的另一個方法是死鎖避免,在死鎖避免中,需要知道如何請求資源,它動態(tài)檢查資源分布狀態(tài),以保證沒有循環(huán)等待發(fā)生。實際上,死鎖避免算法的一個潛在問題是需要及時地收集到一致的全局狀態(tài)信息,一般來說,在分布系統(tǒng)中,很少使用死鎖避免,因為它對請求進程和可用資源的數(shù)量這些信息的要求太嚴格了,而且對系統(tǒng)進行安全性狀態(tài)的檢查也會涉及到大量的計算,這些都會引起巨大的開銷。當死鎖不可避免地發(fā)生的時候,采取相應的死鎖檢測算法進行檢測與處理。
1 分布式計算系統(tǒng)中的死鎖
分布式計算機系統(tǒng)是一種具有多處理器并且各個處理器之間通過互連網(wǎng)絡構建成一個具有整體功能的計算機系統(tǒng)。系統(tǒng)工作的原理是采用分布式計算結構,即將傳統(tǒng)計算機系統(tǒng)內中央處理器處理的任務分散給相應的各個處理器,實現(xiàn)不同功能的各個處理器可以相互協(xié)調合作,達到共享系統(tǒng)中外設與軟件的效果。系統(tǒng)具有的優(yōu)點是加快了處理的速度,簡化了主機的邏輯結構,特別適合于應用在工業(yè)生產(chǎn)線自動控制和企事業(yè)單位的管理,同時具有成本低和易于維護的特點,并且成為計算機應用領域發(fā)展中的一個重要方向。但是,在分布式環(huán)境下,由于通訊延遲的不確定性、地域的分布性以及資源和數(shù)據(jù)的高度共享性等影響因素的存在,使得死鎖預防和檢測變得極為困難。
1.1 死鎖的定義
在分布式計算系統(tǒng)中,有兩個以上的進程在并發(fā)執(zhí)行,每個進程都在等待被其它的進程所占用的系統(tǒng)資源(每個進程都在等待其它的進程釋放所持有的鎖)而不能繼續(xù)運行,即導致系統(tǒng)中任何一個進程都無法運行下去(死循環(huán)),這就產(chǎn)生了死鎖[1]。
1.2 死鎖發(fā)生的條件
Peterson[2]指出了發(fā)生死鎖的必要條件,確切地說,當且僅當以下四個條件同時成立時,死鎖才會發(fā)生。
1) 互斥。同一個資源在同一時刻最多只能被一個進程占用。
2) 占有并等待。必然有一個進程至少占用了系統(tǒng)中的一個資源,同時在等待獲取被其他進程占用的資源。
3) 不可剝奪。一個進程不能剝奪被其他進程占用的資源。
4) 循環(huán)等待。在等待圖中有一個循環(huán)。
其中條件4) 是關于一組進程的特定動態(tài)行為的陳述[3]。
2 分布式計算系統(tǒng)中死鎖的預防
2.1 一般方法
1) 靜態(tài)分配資源
這種方法是要求進程必須在開始執(zhí)行前就申請它所需要的全部資源,并且只有當系統(tǒng)能滿足進程的資源申請要求并把資源分配給進程之后,該進程才開始執(zhí)行。這種策略可以預防死鎖的發(fā)生是由于其破壞了“占有且等待資源”和“循環(huán)等待資源”的條件,從而系統(tǒng)中的所有進程必然不會發(fā)生死鎖。
2) 按序分配資源
這種方法是指在系統(tǒng)中的每一個資源都會給出一個編號。分配資源的時候作了以下規(guī)定:任何進程在申請兩個以上資源時,總是按照編號的大小順序申請。這種策略可以預防死鎖的發(fā)生是由于其破壞了“循環(huán)等待資源”的條件,從而系統(tǒng)中的所有進程必然不會發(fā)生死鎖。
2.2 基于時間戳的方法
這里主要介紹兩種基于時間戳的死鎖預防方法。
1) “傷害-等待”的方法
該方法基于剝奪方法。其主要思想是:當進程Pi請求的系統(tǒng)資源正被進程Pj占有時,只有當進程Pi比Pj年輕(即它們的時間戳關系是Li>Lj)時,進程Pi才能處于等待狀態(tài);否則進程Pj會被取消(即Pj被Pi傷害)并帶有同一時間戳重新啟動,而Pi則可以獲得鎖后繼續(xù)執(zhí)行。該方法是以進程啟動的時間戳來快速判斷進程的優(yōu)先級,并以此決定進程是應該終止、繼續(xù)執(zhí)行還是等待。
2) “等待-死亡”的方法
該方法基于非剝奪方法。其主要思想是:當進程Pi請求的系統(tǒng)資源被進程Pj占有時,只有當進程Pi比Pj老(即它們的時間戳關系是Li 3 分布式計算系統(tǒng)中死鎖的檢測
基于事先預防死鎖的方法基本上都會增加系統(tǒng)的開銷,降低資源的利用率,因此在實踐中并不太適用。在分布式系統(tǒng)中,為了降低系統(tǒng)開銷,在分配資源時會不加限制,只要系統(tǒng)中有剩余的資源,總是把資源分配給申請者。顯然,這樣的結果是可能會出現(xiàn)死鎖。那么,為了使系統(tǒng)能夠正常工作,在系統(tǒng)中會采用定時運行一個“死鎖檢測”程序的方法,當檢測到死鎖時該程序再將會設法將其排除。在分布式系統(tǒng)中的死鎖檢測法不會造成很多不必要的進程流產(chǎn),但是也會增加了系統(tǒng)的額外開銷和復雜度。
在分布式的死鎖檢測算法[4]中,每個機器都保持它們的獨立性,一個局部的失效不會對算法產(chǎn)生致命的影響。通常可以將其劃分成兩種:第一種是每個機器都有一個全局等待圖的復制,即每個機器都有一個關于分布式系統(tǒng)的全局視圖;第二種是把系統(tǒng)的全局等待圖分解后分布在不同的機器上。
Knapp提出把分布式的死鎖檢測算法分成如下四類[5]。
1) 路徑推動算法。該算法的基本思想是:首先在每個機器上都構建形式簡單的全局等待圖,當進行死鎖檢測時,各個機器就將全局等待圖的復制發(fā)送給一定數(shù)量的鄰近節(jié)點,若局部復制有更新則會被傳播下去。重復以上這一過程,直到某個節(jié)點獲得了足夠的信息并能夠構造出一個全局等待圖并可以判斷出系統(tǒng)是否存在死鎖的結論。
2) 邊跟蹤算法。該算法的基本思想是:通過沿分布式網(wǎng)絡結構圖的邊發(fā)送一種叫探測器的特殊信息來檢測是否存在回路。當一個發(fā)起者得到一個與自己發(fā)送的探測器相匹配的探測器時,它就可以知道它是在該結構圖中的一個回路里。
3) 擴散計算。該算法的基本思想是:若懷疑系統(tǒng)發(fā)生死鎖的時候,進程管理器將會通過向依賴于它的進程發(fā)送查詢啟動一個擴散進程,使得系統(tǒng)不會生成全局等待圖。當處于發(fā)送查詢信息時,擴散計算就會增加;當接收回答之后,擴散計算就會減少。最后由所得信息,發(fā)起者會檢測到死鎖的發(fā)生。
4) 全局狀態(tài)檢測。該算法的基本思想是:通過建立一個統(tǒng)一的全局狀態(tài)但不需要暫停當前的計算來獲得一個一致的全局等待圖。
SCISSCIAHCI