操作系统中死锁避免算法 --- 银行家算法
1. 背景
在銀行系統中, 客戶完成項目需要申請貸款的數量是有限的, 每個客戶在第一次申請貸款時要聲明完成該項目所需的最大資金量, 在滿足所有貸款要求并完成項目時, 客戶應及時歸還. 銀行家在客戶申請的貸款數量不超過自己擁有的最大值時, 都應盡量滿足客戶的需要. 在這樣的描述中, 銀行家就好比操作系統, 資金就是資源, 客戶就相當與要申請資源的進程.
2. 原理
當有一個進程請求各種資源時, 銀行家算法會根據當前系統情況給你返回一個如果分配給你的話系統處于safe還是unsafe的結果, 如果返回safe, 那么就會分配給你, 如果返回unsafe, 那么請求進程就需要等待.
2.1 前提條件
- 多個實例
- 每個進程都必須能最大限度地利用資源
- 當一個進程請求一個資源, 就不得不等待
- 當一個進程獲得所有的資源就必須在一段有限的時間釋放它們
基于上述前提條件, 銀行家算法通過嘗試尋找允許每個進程獲得的最大資源并結束(把資源返還給系統)的進程請求的一個理想執行時序, 來決定一個狀態是否是安全的.
不存在這滿足要求的執行時序的狀態都是不安全的.
2.2 數據結構
- : 進程數量
- : 資源類型數量
- (總需求量): 矩陣. 如果, 表示進程最多請求資源類型的個實例.
- (剩余空閑量): 長度為的向量. 如果, 有個類型的資源實例可用.
- (已分配量):?矩陣. 如果, 則當前分配了個類型的資源實例.
- (未來需要量):?矩陣. 如果, 則可能需要至少個類型的資源實例完成任務.
2.3 判斷過程
1. 定義和分別是長度為和的向量.
初始化:
- ?=?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//當前資源剩余空閑量
- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//代表當前線程是否結束, 初始化均為false
2. 找這樣的進程:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //接下來找出?比小的進程
需要找到具有以下特點的進程:
- ? ? ? ? ? ? ? ? ? ? ? ?//這個線程結束所需要的所有資源都能被滿足
如果找到了, 就跳到3, 如果沒有找到這樣的進程, 轉到4.
3. 找到了當前能被滿足的進程, 就執行并回收
- ;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //回收進程執行結束后所分配的資源
- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//所以配置給他再回收
轉到2.
4. 因為4是由2轉過來的, 到達了4, 就會出現兩種情況
- if??for all , then the system is in a safe state.? ? ? ? ?//如果所有進程的, 那么表明系統處于安全狀態, 那么銀行家判斷算法就會返回safe.
- 否則就是第二種狀態, 找不到一個系統當前能直接結束的進程了
2.4 算法執行過程
1. 如果?, 轉到步驟2. 否則, 提出錯誤條件, 因為進程已經超過了其最大要求.
2. 如果, 轉到步驟3. 否則必須等待, 因為資源不可用.
3. 假裝給分配給它需要的資源; //生成一個需要判斷狀態是否安全的資源分配環境:
Call safety state Estimating Algorithm:
- 如果返回sage, 將資源分配給.
- 如果返回unsafe,?必須等待, 舊的資源分配狀態被恢復.
2.5 舉例說明
- safe state:
初始狀態如圖:
1. 首先先確定有沒有進程其, 找到了, 然后把其finish置為true, 然后把其占用的資源回收(資源分配向量加回到中):
?
2. 然后又找到了, 發現可以被滿足, 重復上面步驟, 如下:
3.?然后又找到了, 發現可以被滿足, 重復上面步驟, 如下:?
4. 最后也可以被滿足, 于是我們就找到了一個安全序列,?, 那么此時的system state就是一個safe state.
- unsafe state:
初始狀態如圖:
1. 假如此時發出為[1, 0, 1], 系統會假設先分配給, 那么此時的狀態變成了:
2. 然后此時發現系統已經找不到一個可以被滿足的線程了, 所以此時銀行家算法返回unsafe, 也就不會給線程分配資源.
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的操作系统中死锁避免算法 --- 银行家算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arcgis xml 下载 切片_xml
- 下一篇: 计算机的定点运算器原理,计算机组成原理第