




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、操作系統課程設計銀行家算法專 業:網絡工程學 號:110613119姓 名: 伊 兵指導老師: 姜 紅一、實驗名稱: 模擬實現銀行家算法二、實驗目的:用程序語言模擬實現銀行家算法。銀行家算法是避免死鎖的一種重要方法,通過編寫一個簡單的銀行家算法程序,加深了解有關資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。三、問題分析與設計1、算法思路:先對用戶提出的請求進行合法性檢查,即檢查請求是否大于需要的,是否大于可利用的。若請求合法,則進行預分配,對分配后的狀態調用安全性算法進行檢查。若安全,則分配;若不安全,則拒絕申請,恢復到原來的狀態,拒絕申請。2、銀行家算法步驟:(1)如果
2、Requestior =Need,則轉向步驟(2);否則,認為出錯,因為它所需要的資源數已超過它所宣布的最大值。(2)如果Requestor=Available,則轉向步驟(3);否則,表示系統中尚無足夠的資源,進程必須等待。(3)系統試探把要求的資源分配給進程Pi,并修改下面數據結構中的數值: Available=Available-Requesti; Allocation=Allocation+Request;Need=Need-Request;(4)系統執行安全性算法,檢查此次資源分配后,系統
3、是否處于安全狀態。3、安全性算法步驟:(1)設置兩個向量工作向量Work。它表示系統可提供進程繼續運行所需要的各類資源數目,執行安全算法開始時,Work=Allocation;布爾向量Finish。它表示系統是否有足夠的資源分配給進程,使之運行完成,開始時先做Finishi=false,當有足夠資源分配給進程時,令Finishi=true。(2)從進程集合中找到一個能滿足下述條件的進程:Finishi=falseNeed<or=Work如找到,執行步驟(3);否則,執行步驟(4)。(3)當進程P獲得資源后,可順利執行,直至完成,并釋放出分配給它的資源,故應執行:Work=Work+All
4、ocation;Finishi=true; 轉向步驟(2)。(4)如果所有進程的Finishi=true,則表示系統處于安全狀態;否則,系統處于不安全狀態。4、流程圖:系統主要過程流程圖:銀行家算法流程圖:安全性算法流程圖:5、實現過程:一、開發環境編程語言:java開發環境:windows & eclipse二、開發過程:1、display()用于初始化資源矩陣和初始化進程,available、allocation、need、resource、process。2、print(int)用于打印T時刻的資源矩陣。3、cal()用于進行安全性算法。4、changeStatu()通過requ
5、est向量改變資源使用情況并進行安全性檢測。5、main()用于初始化程序。三 、 關鍵代碼 1.銀行家算法while(flag)int req=new int5;System.out.print("請輸入您要請求資源的 編號:");int choose=scan.nextInt();System.out.print("請輸入該進程的請求向量:");for (int i = 0; i < resource; i+) reqi=scan.nextInt();/將請求向量存入數組boolean flag1 = (req0<=needchoose0
6、&&req1<=needchoose1&&req2<=needchoose2&&req3<=needchoose3&&req4<=needchoose4);boolean flag2 = (req0<=available0&&req1<=available1&&req2<=available2&&req3<=available3&&req4<=available4); System.out.println(flag
7、1); System.out.println(flag2);if(flag1)if(flag2)/判斷請求向量是否小于可用資源數 for (int i = 0; i < resource; i+) availablei=availablei-reqi; /改變可用資源數 allocationchoosei=allocationchoosei+reqi; needchoosei=needchoosei-reqi; /改變所需資源數3int work=new int5;/資源種類數量大小的數組 boolean finish1=new booleanprocess; /設置finish標志數組
8、 for (int i = 0; i < process; i+) finish1i=false;int array1=new intprocess;int num1=1;int count11=0; while(num1<process)for (int i = 0; i < process; i+) if(finish1i=false)if(needi0<=work0&&needi1<=work1&&needi2<=work0&&needi3<= work3&&needi4<=w
9、ork4)for (int j2 = 0; j2 < resource; j2+) availablej2=availablej2+allocationij2; availablej2 = workj2; finish1i=true; array1count11=i; count11+;num1+; /安全性算法3int count2=0;for (int i = 0; i < array1.length; i+) if(finish1i=true)count2+; /判斷有多少個進程已經成功得到所需進程并結束if(count2=process)System.out.println
10、("存在一個安全序列:");for (int i = 0; i < array1.length; i+) System.out.print("P"+array1i+""); /判斷整個進程序列書否全部完成 并打印輸出安全序列elseSystem.out.println("系統處于不安全狀態!");System.out.println();elseSystem.out.println("資源不夠清等待!");/if結束elseSystem.out.println("請求資源已超過所
11、需資源!");/while結束/end of method changeStatupublic static void main(String args) throws IOException work w = new work(); int count2 = 1; w.display(); w.print(count2+); w.cal(); w.changeStatu(); /end of method main2.安全性算法boolean finish = new booleanprocess;for (int i = 0; i < process; i+) finish
12、i=false;/初始化數組finishint array = new intprocess;/定義一個數組保存安全序列int num=1;int count1=1; while(num<process)for (int i = 0; i < process; i+) if(finishi=false)if(needi0<=available0&&needi1<=available1&&needi2<=available0&&needi3<=available3&&needi4<=avai
13、lable4)for (int j2 = 0; j2 < resource; j2+) availablej2=availablej2+allocationij2;finishi=true;arraycount1-1=i;count1+;num+; /安全性算法3、實驗結果6、程序清單package banker;import java.io.IOException;import java.util.Scanner;public class work public int resource; int process; int available; int max; int allocat
14、ion; int need;/定義基本的數據 boolean flag1; boolean flag2; Scanner scan = new Scanner(System.in);public void display()System.out.println("tt"+"操作系統課程設計-銀行家算法");System.out.print("請輸入進程數:");process = scan.nextInt();System.out.print("請輸入資源種類數:");resource = scan.nextInt
15、();System.out.print("請輸入可用資源數:");available = new int5;for(int i = 0;i<resource;i+)availablei = scan.nextInt();System.out.println("請輸入資源分配矩陣");allocation = new int 55;for(int i = 0;i<process;i+)System.out.print("請輸入"+ i + "號進程已分配資源數:");for(int j =0;j<r
16、esource;j+)allocationij = scan.nextInt();/end of resource /end of processneed = new int55;for(int i = 0;i<process;i+)System.out.print("請輸入"+ i + "號進程還需要資源數:");for(int j =0;j<resource;j+)needij = scan.nextInt();/end of resource /end of processmax = new int55;for(int i = 0;i&
17、lt;process;i+)System.out.print("請輸入"+ i + "號進程最大需求資源數:");for(int j = 0;j<resource;j+)maxij = scan.nextInt(); / end of resource/ end of for process /end of method displaypublic void print(int g)System.out.println();/* * 打印資源分配表 * */System.out.println("T"+g+"時刻的資源
18、分配矩陣");System.out.println("進程tmaxttallocationtneedttavailable");System.out.print("P0 ");for (int i = 0; i <resource; i+) System.out.print(max0i+" ");System.out.print(" ");for (int i = 0; i <resource; i+) System.out.print(allocation0i+" ");
19、System.out.print(" ");for (int i = 0; i <resource; i+) System.out.print(need0i+" ");System.out.print(" ");for (int i = 0; i <resource; i+) System.out.print(availablei+" ");System.out.println();for (int i = 1; i < process; i+) System.out.print("P&
20、quot;+i+" ");for (int j = 0; j < resource; j+) System.out.print(maxij+" ");System.out.print(" ");for (int j = 0; j < resource; j+) System.out.print(allocationij+" ");System.out.print(" ");for (int j = 0; j < resource; j+) System.out.print(ne
21、edij+" ");System.out.println(); /此段程序輸出已輸入數據s /end of method printpublic void cal()/* * 檢查安全序列 * */boolean finish = new booleanprocess;for (int i = 0; i < process; i+) finishi=false;/初始化數組finishint array = new intprocess;/定義一個數組保存安全序列int num=1;int count1=1; while(num<process)for (int
22、 i = 0; i < process; i+) if(finishi=false)if(needi0<=available0&&needi1<=available1&&needi2<=available0&&needi3<=available3&&needi4<=available4)for (int j2 = 0; j2 < resource; j2+) availablej2=availablej2+allocationij2;finishi=true;arraycount1-1=i
23、;count1+;num+; /安全性算法int count=0;for (int i = 0; i < array.length; i+) if(finishi=true)count+;/檢查已完成的進程數目if(count=process)System.out.println("存在一個安全序列:");for (int i = 0; i < array.length; i+) System.out.print("P"+arrayi+"");/輸出安全序列elseSystem.out.println("系統處于
24、不安全狀態!");System.out.println();/end of calpublic void prinSecurityList()/end of method prinSecurityListpublic void changeStatu()boolean flag=true;while(flag)int req=new int5;System.out.print("請輸入您要請求資源的 編號:");int choose=scan.nextInt();System.out.print("請輸入該進程的請求向量:");for (int
25、 i = 0; i < resource; i+) reqi=scan.nextInt();/將請求向量存入數組boolean flag1 = (req0<=needchoose0&&req1<=needchoose1&&req2<=needchoose2&&req3<=needchoose3&&req4<=needchoose4);boolean flag2 = (req0<=available0&&req1<=available1&&req2<
26、;=available2&&req3<=available3&&req4<=available4); System.out.println(flag1); System.out.println(flag2);if(flag1)if(flag2)/判斷請求向量是否小于可用資源數 for (int i = 0; i < resource; i+) availablei=availablei-reqi; /改變可用資源數 分配資源allocationchoosei=allocationchoosei+reqi; /由于已分配資源 needchoose
27、i=needchoosei-reqi; /改變所需資源數3int work=new int5;/資源種類數量大小的數組 用來構建available的數boolean finish1=new booleanprocess; /設置finish標志數組 for (int i = 0; i < process; i+) finish1i=false;int array1=new intprocess;int num1=1;int count11=0; while(num1<process)for (int i = 0; i < process; i+) if(finish1i=false)if(needi0<=work0&&needi1<=work1&&needi2<=work0&&needi3<=work3&&needi4<=work4)for (int j2 = 0; j2 < resource; j2+) availablej2=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微博營銷的魅力與挑戰
- 建筑工程項目管理與技術應用
- 微博營銷與品牌影響力提升
- 技術文檔的撰寫與管理技巧
- 影視產業的文化創意價值探索
- 教育信息化環境下的學生學習評估
- 南方醫科大學《西方文化導論》2023-2024學年第一學期期末試卷
- 中國計量大學現代科技學院《鋼琴與即興伴奏二》2023-2024學年第一學期期末試卷
- 新鄉工程學院《園藝學研究進展》2023-2024學年第一學期期末試卷
- 拼多多市場競爭態勢分析
- 《宏觀經濟學原理》課件
- 2025新人教版七下英語單詞默寫表
- 2024年保山市小升初英語考試模擬試題及答案解析
- 《急性胰腺炎診治》課件
- 變壓器知識點培訓課件
- 《《資本論》第一卷導讀》課件
- 池州八中英才班數學試卷
- 老年照護培訓課件
- 幕墻工程項目演練
- 大學英語(B)(1) 江蘇開放大學考試資料
- 中資企業在哈薩克斯坦發展報告(2023-2024)【簡本】
評論
0/150
提交評論