計算機操作系統課設 銀行家算法 Java版

銀行家算法——Java版本

設計思路

操作系統按照銀行家制定的規則爲進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統現存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。當進程在執行中繼續申請資源時,先測試該進程已佔用的資源數與本次申請的資源數之和是否超過了該進程對資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測試系統現存的資源能否滿足該進程尚需的最大資源量,若能滿足則按當前的申請量分配資源,否則也要推遲分配。

本次課程設計通過用JAVA語言編寫和調試實現銀行家算法的程序,達到進一步掌握銀行家算法,理解系統產生死鎖的原因以及系統避免死鎖的方法,增強理論聯繫實際的能力的目的。

運行環境

編譯工具:Eclipse
jdk1.8

分析設計

可利用資源向量矩陣available[ ]

這是一個含有m個元素的數組,其中的每一個元素代表一類可利用的資源數目,其初始值是系統中所配置的該類全部可用資源的數目,其數值隨該類資源的分配和回收而動態地改變。如果available [j]= K,則表示系統中現有R類資源K個

最大需求矩陣max[ ][ ]

這是一個n*m的矩陣,用以表示每一個進程對m類資源的最大需求。如果max[i,j]=K,則表示進程i需要R類資源的數目爲K。

分配矩陣allocation[ ][ ]

這也是一個n*m的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。如果allocation [i,j]=K,則表示進程i當前已分得R類資源的數目爲K。

需求矩陣need[ ][ ]

這也是一個n*m的矩陣,用以表示每一個進程尚需的各類資源數。如果need [i,j]=K,則表示進程i還需要R類資源K個,才能完成其任務。
上述矩陣存在下述關係:
need[i,j]= max[i,j]﹣ allocation[i,j]

算法的實現

初始化

1.創建available[]數組,用以存放系統中可用的資源數目;
2.創建max[][]數組,用以存放各個進程對各類資源的最大需求數目;
3.創建allocation[][]數組,用以存放各個進程已經分得的各類資源數目;
4.創建need[][]數組,用以存放各個進程還需要的各類資源數目;
5.創建 allocation1[][];need1[][];available1[],用以存放系統試分配 資源前系統資源分配情況;

銀行家算法

設Requesti是進程Pi的請求向量,Requesti=K表示進程Pi需要K個j類資源。Pi發出資源請求後,按下列步驟進行檢查:
1.如果requesti[j]≤need[i,j],轉向步驟②;
否則報錯,所需要的資源數已超過它所宣佈的最大值;
2.如果requesti[j]≤available[j],轉向步驟③;
否則報錯,尚無足夠資源Pi需等待;
3.嘗試將資源分配給進程Pi,並修改下面數據結構中的數值:
available[j]:=available[j]-raquesti[j];
allocation[i,j]:=allocation[i,j]+raquesti[j];
need[i,j]:=need[i,j]-raquesti[j];
4. 執行安全性算法,檢查此次資源分配後,系統是否出於安全狀態。若安全,
才正式將資源分配給進程Pi,已完成本次分配;否則,將本次試探分配作廢,
恢復原來的資源分配狀態,讓Pi等待。

安全性檢查算法

1.設置兩個向量:
一、工作向量work:表示系統可提供給進程繼續運行所需的各類資源數目,執行安全性算法開始時work:=available;
二、finish標誌:表示系統是否有足夠的資源分配給進程,使之運行完成。初始化finish[i]:=false;有足夠資源分配給進程時,令finish[i]:=true。
2.從進程集合中找到一個能滿足下述條件的進程
finish[i]=false;Need[i,j]≤work[j];找到執行步驟③,否則執行步驟④
3.當進程Pi獲得資源後,可順利執行,直至完成,並釋放出分配給它的資源,故應執行:
Work[j]:=work[i]+allocation[i,j];
Finish[i]:=true;
Go to step ②;
4.如果所有進程的finish[i]=true都滿足,則表示系統處於安全狀態;否則,系統處於不安全狀態。

參考文獻

1.湯子瀛,哲鳳屏,湯小丹. 計算機操作系統 .西安電子科技大學出版社,2006
2.(美)威爾頓,麥可匹克. Java入門經典(第3版). 施宏斌譯. 北京:清華大學出版社,2009
3.(美)Bruce Eckel. Java編程思想. 陳昊鵬譯. 北京:機械工業出版社,2007

源碼

https://github.com/cjw7177/Banker-s_Algorithm
在copy源碼的同時,順便來個star唄
測試文件和輸出的文件都在裏面

測試文件
輸出文件
覺得不錯的話,點個贊再走唄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章