作業系統中的死鎖


當兩個或多個程序需要某些資源才能完成執行,而這些資源卻被其他程序持有時,就會在作業系統中發生死鎖。

Deadlock in Operating System

在上圖中,程序1擁有資源1,需要獲取資源2。同樣,程序2擁有資源2,需要獲取資源1。程序1和程序2處於死鎖狀態,因為它們都需要對方的資源才能完成執行,但兩者都不願意釋放其資源。

Coffman條件

如果四個Coffman條件都成立,則會發生死鎖。但這些條件並非相互排斥的。

Coffman條件如下:

  • 互斥

    應該有一個資源,一次只能被一個程序持有。在下圖中,資源1只有一個例項,並且僅被程序1持有。

    Mutual Exclusion
  • 持有並等待

    一個程序可以持有多個資源,並且仍然可以向持有這些資源的其他程序請求更多資源。在下圖中,程序2持有資源2和資源3,並正在請求程序1持有的資源1。

    Hold and Wait
  • 不可搶佔

    不能強行從程序中搶佔資源。程序只能自願釋放資源。在下圖中,程序2無法從程序1搶佔資源1。只有在程序1完成執行後自願釋放資源1時,程序2才能獲得資源1。

    >No preemption
  • 迴圈等待

    一個程序正在等待第二個程序持有的資源,而第二個程序正在等待第三個程序持有的資源,以此類推,直到最後一個程序正在等待第一個程序持有的資源。這形成了一個迴圈鏈。例如:程序1被分配了資源2,並正在請求資源1。同樣,程序2被分配了資源1,並正在請求資源2。這形成了一個迴圈等待迴圈。

    Circular Wait

死鎖檢測

資源排程程式可以檢測死鎖,因為它會跟蹤分配給不同程序的所有資源。檢測到死鎖後,可以使用以下方法解決:

  • 終止所有參與死鎖的程序。這不是一個好方法,因為所有程序已經完成的工作都將被破壞。
  • 可以從某些程序中搶佔資源,並將其提供給其他程序,直到解決死鎖為止。

死鎖預防

在死鎖發生之前預防死鎖非常重要。因此,系統在執行每個事務之前都會檢查它,以確保它不會導致死鎖。如果即使有一點點可能性,一個事務將來可能會導致死鎖,那麼它將永遠不會被執行。

死鎖避免

最好避免死鎖,而不是在死鎖發生後採取措施。等待圖可用於避免死鎖。然而,這隻對較小的資料庫有用,因為它在較大的資料庫中可能會變得相當複雜。

更新於:2023年9月10日

42K+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.