飢餓和死鎖
飢餓和死鎖是當需要資源的程序被延遲很長時間時發生的情況。但是它們是截然不同的概念。
關於飢餓和死鎖的詳細資訊如下所示:
飢餓
如果一個程序被無限期地推遲,就會發生飢餓。如果程序需要一個執行所需的資源,但從未分配給它,或者由於某種原因從未為該程序提供處理器,則可能會發生這種情況。
飢餓的一些常見原因如下:
- 如果由於資源分配決策錯誤,一個程序從未獲得執行所需的資源,則可能發生飢餓。
- 如果高優先順序程序持續獨佔處理器,則低優先順序程序可能永遠等待。
- 如果資源不足以滿足每個程序的需求,則可能發生飢餓。
- 如果使用隨機程序選擇,則由於未被選中,一個程序可能會等待很長時間。
可以在系統中實現的一些用於處理飢餓的解決方案如下:
- 可以使用獨立的管理器來分配資源。此資源管理器公平地分配資源並試圖避免飢餓。
- 應避免隨機選擇程序進行資源分配或處理器分配,因為它們會助長飢餓。
- 資源分配的優先順序方案應包含諸如老化之類的概念,其中程序的優先順序隨著其等待時間的增加而增加。這可以避免飢餓。
死鎖
當兩個或多個程序需要某些資源來完成其執行,而這些資源被其他程序持有時,就會發生死鎖。
在上圖中,程序 1 持有資源 1 並需要獲取資源 2。同樣,程序 2 持有資源 2 並需要獲取資源 1。程序 1 和程序 2 處於死鎖狀態,因為它們各自都需要對方的資源才能完成其執行,但它們都不願意釋放其資源。
只有當四個 Coffman 條件都成立時,才會發生死鎖。這些條件不一定是互斥的。它們如下所示:
- 互斥
互斥意味著應該有一個資源,一次只能由一個程序持有。這意味著資源應該是不可共享的。
- 持有並等待
一個程序可以持有多個資源,並且仍然可以向持有這些資源的其他程序請求更多資源。
- 不可搶佔
資源不能被強制從程序中搶佔。程序只能自願釋放資源。
- 迴圈等待
一個程序正在等待第二個程序持有的資源,而第二個程序正在等待第三個程序持有的資源,依此類推,直到最後一個程序正在等待第一個程序持有的資源。這形成了一個迴圈鏈。
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP