死鎖簡介


每個進程都需要一些資源來完成它的執行。 但是,該資源是按順序授予的。

  • 該進程請求一些資源。
  • 如果可用,作業系統會授予資源,否則請等待進程。
  • 該過程使用它並在完成時釋放。

死鎖是每個計算機進程等待分配給另一個進程的資源的情況。在這種情況下,由於它所需的資源不被執行,因此其他進程也在等待其他資源被釋放。

假設有三個進程P1,P2和P3。有三種不同的資源R1,R2和R3。 R1分配給P1,R2分配給P2,R3分配給P3。

過了一段時間後,P1要求P2正在使用R1。 P1停止執行,因為它不能在沒有R2的情況下完成。 P2也需要P3正在使用的R3。 P2也停止執行,因為沒有R3就不能繼續執行。 P3也要求R1使用P1,因此P3也停止執行。

在這種情況下,三個流程之間正在形成一個迴圈。沒有一個進程正在進行,它們都在等待。由於所有進程都被阻止,計算機變得無響應。

飢餓和死鎖的區別

編號 死鎖 飢餓
1 死鎖是一種沒有進程被阻塞而沒有進程繼續的情況 飢餓是低優先順序進程被阻止並且高優先順序進程繼續進行的情況。
2 死鎖是一個無限的等待。 飢餓是漫長的等待,但不是無限的。
3 每個死鎖始終是一個飢餓。 每一個飢餓不一定是死鎖。
4 請求的資源被其他進程阻塞。 請求的資源不斷被更高優先順序的進程使用。
5 當相互排斥,保持和等待,同時不發生搶占和迴圈等待時,發生死鎖。 它由於不受控制的優先權和資源管理而發生。

死鎖的必要條件

相互排斥

資源只能以互斥方式共用。 這意味著,如果兩個進程不能同時使用相同的資源。

保持並等待

進程等待一些資源,同時持有另一個資源。

沒有搶先
原定的過程將一直執行到完成。 排程程式不能同時排程其他進程。

迴圈等待
所有進程都必須以迴圈方式等待資源,以便最後一個進程正在等待第一個進程持有的資源。