作業系統為什麼會出現死鎖

  作業系統中死鎖很可能會導致程序堵塞,甚至電腦宕機出現,產生的原因一般有多種,那有沒有什麼解決方法呢。具體是哪幾種呢?下面由小編為大家整理了作業系統的死鎖的相關知識,希望對大家有幫助!

  一、作業系統死鎖的概念

  死鎖是指多個程序在執行過程中因爭奪資源造成的一種僵局。若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。

  二、作業系統死鎖產生的原因

  原因1:程序推進順序不當引起死鎖

  由於程序在執行中具有非同步性特徵,這可能使P1和P2兩個程序按下述兩種順序向前推進。

  當程序P1和P2併發執行時,如果按照下述順序推進:

  P1:Request***R1***;

  P1:Request***R2***;

  P1: Relese***R1***;

  P1: Relese***R2***;

  P2:Request***R2***;

  P2:Request***R1***;

  P2: Relese***R2***;

  P2: Relese***R1***;

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

  但若P1保持了資源R1,P2保持了資源R2,系統處於不安全狀態,因為這兩個程序再向前推進,便可能發生死鎖。

  原因2:競爭資源引起程序死鎖

  a.競爭不可剝奪資源

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

  b.競爭臨時資源

  上面所說的印表機資源屬於可順序重複使用型資源,稱為永久資源。還有一種所謂的臨時資源,這是指由一個程序產生,被另一個程序使用,短時間後便無用的資源,故也稱為消耗性資源,如硬體中斷、訊號、訊息、緩衝區內的訊息等,它也可能引起死鎖。例如,SI,S2,S3是臨時性資源,程序P1產生訊息S1,又要求從P3接收訊息S3;程序P3產生訊息S3,又要求從程序P2處接收訊息S2;程序P2產生訊息S2,又要求從P1處接收產生的訊息S1。如果訊息通訊按如下順序進行:

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

  P2: ···Relese***S2***;Request***S1***; ···//P2順利執行

  P3: ···Relese***S3***;Request***S2***; ···//P3順利執行,P3執行之後P1被喚起就緒-執行

  並不可能發生死鎖。但若改成下述的執行順序:

  P1: ···Request***S3***;Relese***S1***;···//P1在Request***S3***時發生阻塞,不執行Relese***S1***

  P2: ···Request***S1***;Relese***S2***; ···//P2在Request***S1***時發生阻塞,不執行Relese***S2***

  P3: ···Request***S2***;Relese***S3***; ···//同上。故發生死鎖

  三、作業系統死鎖解決方法

  ***1*** 使用協議以預防或避免死鎖,確保系統不會進入死鎖狀態;

  ***2*** 系統可進入死鎖狀態,但可檢測死鎖狀態,然後進行恢復;

  ***3*** 忽視該問題,而認為死鎖不可能在系統內發生。 ——即應用程式開發人員來處理死鎖問題