您好,登錄后才能下訂單哦!
如何理解C語言實現的操作系統銀行家算法,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
這次課程設計要求完成一個資源管理系統,掌握使用銀行家算法管理系統資源分配的工作原理。深入認識在多道程序系統中合理資源分配的重要性,加深死鎖有關概念的理解。模擬實現銀行家算法對系統資源進行分配,以防止死鎖的出現。本課題肯定不可能實現對實際操作系統的資源管理,而是通過對模擬資源數據的處理,檢測銀行家算法在防止死鎖出現的作用。
模擬實現銀行家算法對系統資源進行分配,以防止死鎖的出現。本課題肯定不可能實現對實際操作系統的資源管理,而是通過對模擬資源數據的處理,檢測銀行家算法在防止死鎖出現的作用。先對用戶提出的請求進行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進行試分配。最后對試分配后的狀態調用安全性檢查算法進行安全性檢查。若安全,則分配,否則,不分配,恢復原來狀態,拒絕申請。
Windows操作系統
VS 2013
C語言
先對用戶提出的請求進行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進行試分配。最后對試分配后的狀態調用安全性檢查算法進行安全性檢查。若安全,則分配,否則,不分配,恢復原來狀態,拒絕申請。
可利用資源向量Available。這是一個含有m個元素的數組,其中的每一個元素代表一類可利用的資源數目,其初始值是系統中所配置的該類全部可用資源的數目,其數值隨該類資源的分配和回收而動態改變。如果Available[j]=K,則表示系統中現有Rj類資源K個。
最大需求矩陣Max。這是一個 的矩陣,它定義了系統中 個進程中的每一個進程對 類資源的最大需求。如果Max[I,j]=K,則進程i需要Rj類資源的最大數目為K。
分配矩陣Allocation。這也是一個 的矩陣,它定義了系統中每一類資源當前已分配給每一個進程的資源數。如果Allocation[i,j]=K,則表示進程i當前已經分得Rj類資源的數目為K。
需求矩陣Need。這也是一個 的矩陣,用以表示每一個進程尚需的各類資源數。如果Need[i,j]=K,則表示進程i還需要Rj類資源K個,方能完成任務。
即:
int M ; // 總進程數
int N ; // 資源種類
int ALL_RESOURCE[W]; // 各種資源的數目總和
int Max[W][R]; // 最大需求矩陣,M個進程對N類資源最大資源需求
int Available[R]; // 可利用資源向量,
int Allocation[W][R];// 分配矩陣,各個進程M已經得到N類資源的資源數
int Need[W][R]; // M個進程還需要N類資源的資源量
int Request[R]; // 進程的請求資源個數
以上三個矩陣間存在下述關系:
設Request i是進程Pi的請求向量,如果Requesti[j]=K,表示進程Pi需要K個Rj類型的資源。發出請求后,系統按下述步驟進行檢查:
(1)檢查申請量是否不大于需求量。如果Request i[j]<=Need[i,j],便轉向步驟(2);否則認為出錯,因為他所需要的資源數已經超過它所宣布的最大值。
(2)檢查申請量是否小于系統中的可利用資源數量。如果Requesti[j]<=Available[i,j],便轉向步驟(2);否則認為尚無足夠資源,Pi必須等待。
(3)若以上兩個條件都滿足,則系統試探著將資源分配給申請的進程,并修改下面數據結構中的數值:
Available[j]=Available[j]-Request[j];
Allocation[k][j]=Allocation[k][j]+Request[j];
Need[k][j]=Need[k][j]-Request[j];
(1)試分配后,系統執行安全性算法,調用safe()函數檢查此次資源分配后系統是否處于安全狀態。若安全,才正式將資源分配給進程,以完成本次分配,并將安全序列打印出來;否則本次試探分配作廢,恢復原來的資源分配狀態,讓該進程等待。
(1)設置兩個向量
工作向量:Work,它表示系統可提供給進程繼續運行所需要的各類資源數目,它含有m個元素,在執行安全性算法開始時,Work: =Available
Finish,它表示系統是否有足夠資源分配給進程,使之運行完成。開始時先做Finish[i]:=false;當有足夠的資源分配給進程時,再令Finish[i]:=true
(2)從進程集合中找到一個滿足下述條件的進程
Finish[i]:=false;
Need[i,j]<=Work[j];若找到,執行步驟(3),否則,執行步驟(4)
(3)當進程Pi獲得資源后,可順利執行,直至完成,并釋放出分配給它的資源,故應執行
銀行家算法就是一個分配資源的過程,使分配的序列不會產生死鎖。此算法的中心思想是:按該法分配資源時,每次分配后總存在著一個進程,如果讓它單獨運行下去,必然可以獲得它所需要的全部資源,也就是說,它能結束,而它結束后可以歸還這類資源以滿足其他申請者的需要。
關于如何理解C語言實現的操作系統銀行家算法問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。