瀏覽量:141次
什么是死鎖,產(chǎn)生死鎖的原因和必要條件是什么,什么是死鎖,產(chǎn)生死鎖的原因是什么?
什么是死鎖:
是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過程中爭奪資源或互相通信而導(dǎo)致的阻塞現(xiàn)象。如果沒有外力,他們就無法前進(jìn)。此時(shí),系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)出現(xiàn)死鎖。這些總是互相等待的進(jìn)程稱為死鎖進(jìn)程。
死鎖危險(xiǎn)
(1)死鎖會(huì)阻止進(jìn)程得到正確的結(jié)果。因?yàn)樗梨i的進(jìn)程得不到所需的資源,無法前進(jìn),所以得不到結(jié)果。
(2)死鎖會(huì)降低資源的利用率。由于死鎖的進(jìn)程不釋放被占用的資源,使得這些資源不能被其他進(jìn)程使用,系統(tǒng)資源利用率降低。
(3)死鎖也會(huì)導(dǎo)致新的死鎖。死鎖也會(huì)發(fā)生,因?yàn)槠渌M(jìn)程無法請(qǐng)求死鎖進(jìn)程占用的資源,無法前進(jìn)。
所以進(jìn)程出現(xiàn)死鎖,可能會(huì)產(chǎn)生多米諾骨牌效應(yīng),最終導(dǎo)致操作系統(tǒng)崩潰。
進(jìn)程死鎖有如此嚴(yán)重的副作用,那么它是在什么條件下發(fā)生的呢?
死鎖條件
1.互斥:資源不能共享,只能被一個(gè)進(jìn)程使用。
2.等待條件:已經(jīng)獲得資源的進(jìn)程可以再次申請(qǐng)新的資源。
3.無預(yù)剝奪:分配的資源不能從相應(yīng)的進(jìn)程中被強(qiáng)制剝奪。
4.循環(huán)等待條件:系統(tǒng)中的幾個(gè)進(jìn)程形成一個(gè)循環(huán),循環(huán)中的每個(gè)進(jìn)程都在等待被相鄰進(jìn)程占用的資源。
僵局的原因
操作電腦時(shí),最常見的問題就是系統(tǒng)的進(jìn)程死鎖。出現(xiàn)這種問題,電腦就會(huì)卡死,甚至無法在其他方面操作。進(jìn)程被卡住的問題有兩個(gè)原因。讓我們和系統(tǒng)之家邊肖一起探索和學(xué)習(xí)吧。
1.有限資源的競爭導(dǎo)致進(jìn)程死鎖。
當(dāng)系統(tǒng)中多個(gè)進(jìn)程共享的資源在相同的大小下無法滿足各自的需求時(shí),它們就會(huì)爭奪資源,出現(xiàn)死鎖。一般情況下,系統(tǒng)中的資源分為可脫離、不可脫離和臨時(shí)資源,不同類型的資源有不同的死鎖處理方式。
(CPU、主存等可剝奪資源。在系統(tǒng)中,優(yōu)先級(jí)高的進(jìn)程可以剝奪優(yōu)先級(jí)低的進(jìn)程對(duì)這些資源的占用。
(2)非剝奪資源,如打印機(jī)、讀卡器和磁帶機(jī),是按英寸順序重復(fù)使用的資源。這類資源的特點(diǎn)是,當(dāng)系統(tǒng)分配給某個(gè)進(jìn)程一個(gè)資源時(shí),不能強(qiáng)行收回,只能在進(jìn)程用完之后自動(dòng)釋放。圖1顯示了一個(gè)典型的死鎖示例,它是由多個(gè)進(jìn)程爭用非剝奪資源引起的。具體來說,如果有一組P1、P2,Pn,其中P1,P2,Pn分別占用資源R1、R2、Rn、P1同時(shí)申請(qǐng)資源R2、P2同時(shí)申請(qǐng)資源R3、Pn-1同時(shí)申請(qǐng)資源Rn,Pn占用資源Rn同時(shí)申請(qǐng)資源R1。此時(shí),這一組進(jìn)程因?yàn)橘Y源得不到滿足而處于互相等待的阻塞狀態(tài),永遠(yuǎn)無法前進(jìn)到達(dá)終點(diǎn)。這個(gè)時(shí)候,據(jù)說系統(tǒng)出現(xiàn)了死鎖現(xiàn)象,P1、P2、Pn這組進(jìn)程處于死鎖狀態(tài)。
(3)臨時(shí)資源是指流程產(chǎn)生的,使用后無用的資源。例如,如果對(duì)信件的發(fā)送和接收沒有限制,進(jìn)程通信中使用的信件可能會(huì)導(dǎo)致死鎖。如圖2所示,S1、S2和S3是臨時(shí)資源,分別由流程P1、P2和P3生成。進(jìn)程之間的通信是P1請(qǐng)求接收來自P3的信件,P3請(qǐng)求接收來自P2的信件,P2請(qǐng)求接收來自P1的信件。實(shí)際操作過程是:流程P1等待流程P3的郵件S3到達(dá),然后向流程P2發(fā)送郵件S1;進(jìn)程P2等待進(jìn)程P1的郵件S1到達(dá),然后將郵件S2發(fā)送給進(jìn)程P3;并且進(jìn)程P3也在發(fā)送郵件S3之前等待進(jìn)程P2的郵件S2到達(dá)。在這種情況下,就會(huì)形成循環(huán)等待,出現(xiàn)死鎖。
可以看出,很多進(jìn)程都在爭奪資源,系統(tǒng)提供的資源數(shù)量并不能完全滿足進(jìn)程的需求,所以資源不足是死鎖的主要原因。但是需要注意的是,不能確定多個(gè)進(jìn)程需要多個(gè)資源才能產(chǎn)生死鎖。上面的例子還表明,進(jìn)程運(yùn)行中的資源需求沖突也是死鎖的一個(gè)原因。
2.僵局是由不正確的進(jìn)度順序造成的。
因?yàn)檫M(jìn)程的調(diào)度是獨(dú)立的,所以它們請(qǐng)求和釋放資源的順序有很多,有些是不安全的,比如上面提到的臨時(shí)資源的占用;但是,有些序列是安全的,例如,進(jìn)程P1和P2需要資源R1和R2。如果兩個(gè)進(jìn)程的推進(jìn)順序是進(jìn)程P1占領(lǐng)資源R1,那么在申請(qǐng)R2時(shí),進(jìn)程P2沒有占領(lǐng)R2,這樣就不會(huì)出現(xiàn)僵局。這說明死鎖是一個(gè)與時(shí)間相關(guān)的錯(cuò)誤,與每個(gè)進(jìn)程的速度和清除資源的順序有關(guān)。
通過以上兩個(gè)教程的詳細(xì)分析,可以簡單的解決系統(tǒng)中死鎖這個(gè)惱人的故障。這是系統(tǒng)最常見的故障,通過學(xué)習(xí)本教程,我們很容易成為計(jì)算機(jī)專家。
[聲明]本網(wǎng)轉(zhuǎn)載網(wǎng)絡(luò)媒體稿件是為了傳播更多的信息,此類稿件不代表本網(wǎng)觀點(diǎn),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。故此,如果您發(fā)現(xiàn)本網(wǎng)站的內(nèi)容侵犯了您的版權(quán),請(qǐng)您的相關(guān)內(nèi)容發(fā)至此郵箱【779898168@qq.com】,我們?cè)诖_認(rèn)后,會(huì)立即刪除,保證您的版權(quán)。
官網(wǎng)優(yōu)化
整站優(yōu)化
渠道代理
400-655-5776