死鎖預防
限制申請方式
互斥
占用並等待
不搶占
殺死占用資源的進程
循環等待 對所有資源類型進行排序,並要求每個進程按照資源的順序進行申請
死鎖避免
需要系統具有一些額外的先驗信息提供。
1. 最簡單和最有效的模式是要求每個進程聲明它可能需要的每個類型資源的最大數目。
2. 資源的分配狀態是通過限定提供與分配的資源數量,和進程的最大需求。
3. 死鎖避免算法動態檢查的資源分配狀態,以確保永遠不會有一個環形等待狀態。
判斷分配之后是否是安全狀態,若是,則分配
系統安全狀態:指所有進程,存在安全序列
處於安全狀態=》 沒有死鎖
不安全狀態=》可能死鎖
避免死鎖的話=》確保系統永遠不會進入不安全狀態
銀行家算法
前提條件
1. 多個實例
2. 每個進程都能最大限度的利用資源
3. 當一個進程請求一個資源,就不得不等待
4. 當一個進程獲得所有資源,就必須再一段有限的時間內釋放他們
基於上述條件,算法長師尋找每一個進程獲得的最大資源並且結束的進程請求執行時序,來決定狀態是否安全。不存在這樣執行時序,就是不安全的。
數據結構
n=進程數量,m=資源類型數量
Max(總需求量):n*m矩陣,如果Max[i,j] = k,表示進程Pi最多請求資源類型Rj的k個實例
Available(剩余空閑量):長度為m的向量。如果Available[j]=k,有k個類型Rj的資源實例可用
Allocation(已分配量):n*m矩陣。如果Allocation[i,j]=k,則Pi當前非賠了k個Rj的實例
need(未來需要量):n*m矩陣,如果Need[i,j]=k,則Pi可能需要至少k個Rj實例完成任務
Need[i,j]=Max[i,j]-Allocation[i,j];
