網(wǎng)絡(luò)工程師第一章輔導(dǎo):死鎖問題

字號:

各進程在使用系統(tǒng)資源時,應(yīng)注意系統(tǒng)產(chǎn)生死鎖問題。下面先介紹什么是死鎖。
    1 死鎖的概念
    1. 死鎖的定義
     所謂死鎖,是指各并發(fā)進程彼此互相等待對方所擁有的資源,且這些并發(fā)進程在得到對方的資源之前不會釋放自己所擁有的資源。從而造成大家都想得到資源而又都得不到資源,各并發(fā)進程不能繼續(xù)向前推進的狀態(tài)。
     2. 死鎖的起因
     死鎖發(fā)生原因:死鎖的起因是并發(fā)進程的資源競爭。產(chǎn)生死鎖的根本原因在于系統(tǒng)提供的資源個數(shù)少于并發(fā)進程所要求的該類資源數(shù)。顯然,由于資源的有限性,我們不可能為所有要求資源的進程無限制地提供資源。但是,我們可以采用適當(dāng)?shù)馁Y源分配算法,以達到消除死鎖的目的。
     3. 產(chǎn)生死鎖的必要條件
     只有4個條件都滿足時,才會出現(xiàn)死鎖。
     (1) 互斥條件:并發(fā)進程所要求和占有的資源是不能同時被兩個以上進程使用或操作的,進程對它所需要的資源進行排它性控制。
     (2) 不剝奪條件:進程所獲得的資源在未使用完畢之前,不能被其它進程強行剝奪,而只能由獲得該資源的進程自己釋放。
     (3) 部分分配:進程每次申請它所需要的一部分資源,在等待新資源的同時,繼續(xù)占用已分配到的資源。
     (4) 環(huán)路條件:存在一種進程循環(huán)鏈,鏈中每一個進程已獲得的資源同時被下一個進程所請求。
    2 死鎖的排除方法
     處理死鎖的基本方法可歸結(jié)為以下3種:
     方法
     資源分配策略
     各種可能模式
     主要優(yōu)點
     主要缺點
    預(yù)防
    Prevention
     保守的;寧可資源閑置
     一次請求所有資源<條件1>
    資源剝奪
    <條件3>
    資源按序申請
    <條件4>
     適用于作突發(fā)式處理的進程;不必剝奪
    適用于狀態(tài)可以保存和恢復(fù)的資源
    可以在編譯時(而不必在運行時)就進行檢查
     效率低;進程初始化時間延長
    剝奪次數(shù)過多;多次對資源重新起動
    不便靈活申請新資源
    避免
    Avoidance
     是“預(yù)防”和“檢測”的折衷(在運行時判斷是否可能死鎖)
     尋找可能的安全的運行順序
     不必進行剝奪
     必須知道將來的資源需求;進程可能會長時間阻塞
    檢測
    Detection
     寬松的;只要允許,就分配資源
     定期檢查死鎖是否已經(jīng)發(fā)生
     不延長進程初始化時間;允許對死鎖進行現(xiàn)場處理
     通過剝奪解除死鎖,造成損失
    1. 死鎖的預(yù)防
    死鎖的預(yù)防:是采用某種策略,限制并發(fā)進程對資源的請求,使系統(tǒng)在任何時刻都不滿足死鎖的必要條件。
    預(yù)防死鎖的三種策略:
    打破死鎖資源的互斥和不可剝奪這兩個條件
    缺點:不能解決訪問那些不允許被同時訪問的資源時所帶來的死鎖問題。
    打破資源的部分分配這個死鎖產(chǎn)生的必要條件
    缺點:在許多情況下,一個進程在執(zhí)行之前不可能提出它所需要的全部資源。
    無論所需資源何時用到,一個進程只有在所有要求資源都得到滿足后才開始執(zhí)行。
    對于那些不經(jīng)常使用的資源,進程在生存過程期間一直占用它們是一種極大的浪費。
    降低了進程的并發(fā)性。
    打破死鎖的環(huán)路條件
    缺點:限制了進程對資源的請求,而且對資源的分類編序也耗去一定的系統(tǒng)開銷。
    2. 死鎖的避免
     死鎖的避免:在系統(tǒng)運行過程中,對進程發(fā)出的每一個系統(tǒng)能夠滿足的資源申請進行動態(tài)檢查,并根據(jù)檢查結(jié)果決定是否分配資源,若分配后系統(tǒng)可能發(fā)生死鎖,則不予分配,否則予以分配。
    在分配資源時判斷是否會出現(xiàn)死鎖,如不會死鎖,則分配資源。
     死鎖避免的一種基本模式是把進程分為多個步,其中每個步所使用的資源是固定的,且在一個步內(nèi),進程所保持的資源數(shù)不變。即進程的資源請求、使用與釋放要依靠不同的步完成。
     3. 死鎖的檢測和恢復(fù)
    保存資源的請求和分配信息,利用某種算法對這些信息加以檢查,以判斷是否存在死鎖。
    死鎖檢測算法主要是檢查是否有循環(huán)等待。