操作系統(tǒng)-銀行家算法實驗報告(共15頁)_第1頁
操作系統(tǒng)-銀行家算法實驗報告(共15頁)_第2頁
操作系統(tǒng)-銀行家算法實驗報告(共15頁)_第3頁
操作系統(tǒng)-銀行家算法實驗報告(共15頁)_第4頁
操作系統(tǒng)-銀行家算法實驗報告(共15頁)_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上計算機操作系統(tǒng)課程設計 題 目 銀行家算法分析 學 院 計算機與軟件學院專 業(yè) 計算機科學與技術班 級 學 號 姓 名 指導教師 起止時間 1、 算法綜述 銀行家算法:在進程向系統(tǒng)提出資源分配請求時,算法會先對進程提出的請求進行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進行試分配。最后對試分配后的狀態(tài)調(diào)用安全性檢查算法進行安全性檢查。若安全,則分配,否則,不分配,恢復原來狀態(tài),拒絕申請。2 算法分析2.1 銀行家算法中的數(shù)據(jù)結(jié)構(gòu)為資源的種類 i進程的數(shù)量 j可利用資源向量 int Availablej 最大需求矩陣 int Maxij

2、分配矩陣 int Allocationij 需求矩陣 int needij= Maxij- Allocationij申請各類資源數(shù)量 int Request ij i進程申請j資源的數(shù)量工作向量 int Workx int Finishy 2.2銀行家算法設Requesti是進程Pi的請求向量,如果Requestij=K,表示進程Pi需要k個Rj類型的資源,當Pi發(fā)出資源請求后,系統(tǒng)按照下述步驟進行檢查:(1)如果RequestijNeedj,便轉(zhuǎn)向步驟(2);否則認為出錯,因為它所需要的資源數(shù)已經(jīng)超過它所宣布的最大值。(2)如果RequestijAvailablej,便轉(zhuǎn)向步驟(3);否則,

3、表示尚無足夠資源,Pi須等待。(3)系統(tǒng)試探著將資源分配給進程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:Availablej:=Availablej-Requestij;Allocationi,j:=Allocationi,j+Requestij;Needi,j:=Needi,j-Requestij;(4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進程Pi,以完成本次分配;否則本次的試探分配作廢,恢復原來的資源分配狀態(tài),讓進程Pi等待。2.3安全性檢查算法(Check_safe()函數(shù))(1)設置兩個向量:工作向量Work,它表示系統(tǒng)可提供給進程繼續(xù)運行所需

4、的各類資源數(shù)目,在執(zhí)行安全性算法開始時,Work= Available。Finish,它表示系統(tǒng)是否有足夠的資源分配給進程,使之運行完成。開始時先做Finishi=0;當有足夠的資源分配給進程時,再令Finishi=1。(2)在進程中查找符合以下條件的進程:條件1:Finishi=0;條件2:needij<=Workj若找到,則執(zhí)行步驟(3)否則,執(zhí)行步驟(4)(3)當進程獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應執(zhí)行:Workj= Workj+ Allocationij;Finishi=1;goto step 2;(4) 如果所有的Finishi=1都滿足,則表示系

5、統(tǒng)處于安全狀態(tài),否則,處于不安全狀態(tài)。3、 算法設計初始化算法流程圖:銀行家算法流程圖:(1)采用動態(tài)輸入的方法對進程個數(shù)Pnum,資源種類數(shù)Stype,資源總數(shù)Ssum,最大需求Max,已分配Allocation進行初始化;(2)根據(jù)已輸入數(shù)據(jù)計算出需求矩陣Need,可用資源數(shù)Available;(3)利用Check_safe()函數(shù)對此刻系統(tǒng)的安全性進行檢測,如果安全,給出安全序列;(4)進程i提出資源請求,利用Ask_Distribution()函數(shù)檢測請求是否合理;合理則滿足請求,并給出安全序列;不合理則給出錯誤提示;(5)做出開始界面、選擇界面、退出界面,使程序美觀、易操作;4、 編

6、碼實現(xiàn)(實驗的java代碼)import java.util.Scanner;public class YinHang Scanner in = new Scanner(System.in);int Pnum; / 進程個數(shù)int Stype; / 資源種類數(shù)int Ssum;/ 各類資源總數(shù)int Max;/ 最大需求矩陣int Allocation;/ 已分配矩陣int Need;/ 需求矩陣int Available; / 可用資源數(shù)int Work;/ Available的試分配向量boolean Finish = new boolean50;/ 試分配結(jié)果標識向量public Yin

7、Hang() start();public void start() System.out.println("*");System.out.println(" 歡迎使用銀行家算法");System.out.println(" 羅巾英 ");System.out.println("*");System.out.println("請選擇操作:nt1.開始使用nt2.退出");int a;a = in.nextInt();if (a = 1) input(); else quit();public v

8、oid input() System.out.println("請輸入T0時刻進程個數(shù)Pnum:");this.Pnum = in.nextInt();System.out.println("請輸入資源種類數(shù)Stype:");this.Stype = in.nextInt();this.Ssum = getSsum();this.Max = getMax();this.Allocation = getAllocation();this.Need = getNeed();this.Available = getAvailable(Pnum, Stype);

9、System.out.println("該時刻的資源分配表:");output();this.Check_Safe(Available);this.Ask_Distribution(false);public int getSsum() Ssum = new intStype;System.out.println("請輸入各類資源總數(shù)Ssum:");for (int i = 0; i < Stype; i+) Ssumi = in.nextInt();return Ssum;public int getMax() Max = new intPnum

10、Stype;System.out.println("請輸入最大需求矩陣Max:");for (int i = 0; i < Pnum; i+) for (int j = 0; j < Stype; j+) Maxij = in.nextInt();return Max;public int getAllocation() Allocation = new intPnumStype;System.out.println("請輸入已分配資源情況矩陣Allocation");for (int i = 0; i < Pnum; i+) for

11、(int j = 0; j < Stype; j+) Allocationij = in.nextInt();return Allocation;public int getNeed() Need = new intPnumStype;for (int i = 0; i < Pnum; i+) for (int j = 0; j < Stype; j+) Needij = Maxij - Allocationij;return Need;public int getAvailable(int x, int y) Available = new intStype;Availab

12、le = Ssum;System.out.println("進程的可用資源Available為:");for (int j = 0; j < Stype; j+) for (int i = 0; i < Pnum; i+) Availablej = Availablej - Allocationij;System.out.print(Availablej + " ");System.out.println("");return Available;public void setFinish(int x) for (int

13、i = 0; i < Pnum; i+) Finishi = false;public boolean Check_Safe(int avail) boolean boo = false;int k = new intPnum;int a = 0;Work = new intStype;for (int i = 0; i < avail.length; i+) Worki = availi;setFinish(Pnum);for (int s = 0; s < Pnum; s+) for (int i = 0; i < Pnum; i+) if (Finishi = f

14、alse) for (int j = 0; j < Stype; j+) if (Needij <= Workj) if (j + 1 = Stype) Finishi = true;ka = i;a+;for (int m = 0; m < Stype; m+) Workm = Workm + Allocationim; else continue; else break; else continue;if (a = Pnum) System.out.println("此刻系統(tǒng)處于安全狀態(tài),存在安全序列為:");for (int i = 0; i <

15、; Pnum; i+) System.out.print("P" + ki + "t");System.out.println("");boo = true; else System.out.println("此時系統(tǒng)處于非安全狀態(tài)");choice();boo = false;return boo;public void Ask_Distribution(boolean b) int a = 0;int a0=0;int a1 = 0;boolean bo = false;for (int i = 0; i &l

16、t; Stype; i+) Worki = Availablei;System.out.println("請輸入請求分配的進程編號:");int m = in.nextInt();System.out.println("請輸入請求的各資源數(shù)");int dis = new intStype;for (int i = 0; i < Stype; i+) disi = in.nextInt();for (int i = 0; i < Stype; i+) if (disi <= Needmi) a+;continue; else Syste

17、m.out.println("出錯!請求資源數(shù)大于需求資源數(shù)!");choice();break;if (a = Stype) for (int i = 0; i < Stype; i+) if (disi <= Worki) a0=a0+1;if(a0=Stype)for (int j = 0; j < dis.length; j+) Workj = Workj - disj;Allocationmj = Allocationmj + disj;Needmj = Needmj - disj;bo = Check_Safe(Work);continue;

18、else System.out.println("出錯!請求資源數(shù)大于可用資源數(shù)!");choice();break;if (bo) for (int i = 0; i < Stype; i+) Availablei = Availablei-disi;if (Allocationmi = Maxmi) a1 = a1 + 1;while (a1 = Stype) System.out.println("(進程P"+m+"對資源的最大需求已滿足,對其占有資源進行回收)");for (int j = 0; j <Stype;

19、 j+) Availablej = Availablej + Allocationmj;break;System.out.println("因此可以滿足" + m + "進程的請求,分配后的各種變量值更新為:");output();choice();elsefor (int i = 0; i < dis.length; i+) Worki = Worki + disi;Allocationmi = Allocationmi - disi;Needmi = Needmi + disi;public void output() System.out.p

20、rintln(" 進程 maxttallocationt needttavailable");System.out.print("P0 ");for (int i = 0; i < Stype; i+) System.out.print(Max0i + " ");System.out.print(" ");for (int i = 0; i < Stype; i+) System.out.print(Allocation0i + " ");System.out.print("

21、; ");for (int i = 0; i < Stype; i+) System.out.print(Need0i + " ");System.out.print(" ");for (int i = 0; i < Stype; i+) System.out.print(Availablei + " ");System.out.println();for (int i = 1; i < Pnum; i+) System.out.print("P" + i + " "

22、);for (int j = 0; j < Stype; j+) System.out.print(Maxij + " ");System.out.print(" ");for (int j = 0; j < Stype; j+) System.out.print(Allocationij + " ");System.out.print(" ");for (int j = 0; j < Stype; j+) System.out.print(Needij + " ");System.out.println();public void choice() System.out.println("*");System.out.println("“Y”選擇再次輸入n“N”返回銀行家算法初始位置");System.out.println("*");String str = in.next();if (str.equals("y") Ask_Distribution(false); else new YinHang();public void qui

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論