學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 操作系統(tǒng) > 操作系統(tǒng)基礎(chǔ)知識 >

操作系統(tǒng)為什么會出現(xiàn)死鎖

時間: 加城1195 分享

  操作系統(tǒng)中死鎖很可能會導(dǎo)致進(jìn)程堵塞,甚至電腦死機(jī)出現(xiàn),產(chǎn)生的原因一般有多種,那有沒有什么解決方法呢。具體是哪幾種呢?下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)的死鎖的相關(guān)知識,希望對大家有幫助!

  一、操作系統(tǒng)死鎖的概念

  死鎖是指多個進(jìn)程在運(yùn)行過程中因爭奪資源造成的一種僵局。若無外力作用,它們都將無法推進(jìn)下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。

  二、操作系統(tǒng)死鎖產(chǎn)生的原因

  原因1:進(jìn)程推進(jìn)順序不當(dāng)引起死鎖

  由于進(jìn)程在運(yùn)行中具有異步性特征,這可能使P1和P2兩個進(jìn)程按下述兩種順序向前推進(jìn)。

  當(dāng)進(jìn)程P1和P2并發(fā)執(zhí)行時,如果按照下述順序推進(jìn):

  P1:Request(R1);

  P1:Request(R2);

  P1: Relese(R1);

  P1: Relese(R2);

  P2:Request(R2);

  P2:Request(R1);

  P2: Relese(R2);

  P2: Relese(R1);

  這兩個進(jìn)程便可順利完成,這種不會引起進(jìn)程死鎖的推進(jìn)順序是合法的。

  但若P1保持了資源R1,P2保持了資源R2,系統(tǒng)處于不安全狀態(tài),因?yàn)檫@兩個進(jìn)程再向前推進(jìn),便可能發(fā)生死鎖。

  原因2:競爭資源引起進(jìn)程死鎖

  a.競爭不可剝奪資源

  在系統(tǒng)中所配置的不可剝奪資源,由于它們的數(shù)量不能滿足諸進(jìn)程運(yùn)行的需要,會使進(jìn)程在運(yùn)行過程中,因爭奪這些資源而陷于僵局。例如,系統(tǒng)中只有一臺打印機(jī)R1和一臺磁帶機(jī)R2,可供進(jìn)程P1和P2共享。假定PI已占用了打印機(jī)R1,P2已占用了磁帶機(jī)R2,若P2繼續(xù)要求打印機(jī)R1,P2將阻塞;P1若又要求磁帶機(jī),P1也將阻塞。于是,在P1和P2之間就形成了僵局,兩個進(jìn)程都在等待對方釋放自己所需要的資源,但是它們又都因不能繼續(xù)獲得自己所需要的資源而不能繼續(xù)推進(jìn),從而也不能釋放自己所占有的資源,以致進(jìn)入死鎖狀態(tài)。

  b.競爭臨時資源

  上面所說的打印機(jī)資源屬于可順序重復(fù)使用型資源,稱為永久資源。還有一種所謂的臨時資源,這是指由一個進(jìn)程產(chǎn)生,被另一個進(jìn)程使用,短時間后便無用的資源,故也稱為消耗性資源,如硬件中斷、信號、消息、緩沖區(qū)內(nèi)的消息等,它也可能引起死鎖。例如,SI,S2,S3是臨時性資源,進(jìn)程P1產(chǎn)生消息S1,又要求從P3接收消息S3;進(jìn)程P3產(chǎn)生消息S3,又要求從進(jìn)程P2處接收消息S2;進(jìn)程P2產(chǎn)生消息S2,又要求從P1處接收產(chǎn)生的消息S1。如果消息通信按如下順序進(jìn)行:

  P1: ···Relese(S1);Request(S3); ···//P1先Relese(S1),在Request(S3)時阻塞

  P2: ···Relese(S2);Request(S1); ···//P2順利執(zhí)行

  P3: ···Relese(S3);Request(S2); ···//P3順利執(zhí)行,P3執(zhí)行之后P1被喚起就緒-執(zhí)行

  并不可能發(fā)生死鎖。但若改成下述的運(yùn)行順序:

  P1: ···Request(S3);Relese(S1);···//P1在Request(S3)時發(fā)生阻塞,不執(zhí)行Relese(S1)

  P2: ···Request(S1);Relese(S2); ···//P2在Request(S1)時發(fā)生阻塞,不執(zhí)行Relese(S2)

  P3: ···Request(S2);Relese(S3); ···//同上。故發(fā)生死鎖

  三、操作系統(tǒng)死鎖解決方法

  (1) 使用協(xié)議以預(yù)防或避免死鎖,確保系統(tǒng)不會進(jìn)入死鎖狀態(tài);

  (2) 系統(tǒng)可進(jìn)入死鎖狀態(tài),但可檢測死鎖狀態(tài),然后進(jìn)行恢復(fù);

  (3) 忽視該問題,而認(rèn)為死鎖不可能在系統(tǒng)內(nèi)發(fā)生。 ——即應(yīng)用程序開發(fā)人員來處理死鎖問題

3974754