版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì) 題 目 銀行家算法分析 學(xué) 院 計(jì)算機(jī)與軟件學(xué)院專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí) 學(xué) 號(hào) 姓 名 指導(dǎo)教師 起止時(shí)間 1、 算法綜述 銀行家算法:在進(jìn)程向系統(tǒng)提出資源分配請(qǐng)求時(shí),算法會(huì)先對(duì)進(jìn)程提出的請(qǐng)求進(jìn)行合法性檢查,即檢查請(qǐng)求的是不大于需要的,是否不大于可利用的。若請(qǐng)求合法,則進(jìn)行試分配。最后對(duì)試分配后的狀態(tài)調(diào)用安全性檢查算法進(jìn)行安全性檢查。若安全,則分配,否則,不分配,恢復(fù)原來狀態(tài),拒絕申請(qǐng)。2 算法分析2.1 銀行家算法中的數(shù)據(jù)結(jié)構(gòu)為資源的種類 i進(jìn)程的數(shù)量 j可利用資源向量 int Availablej 最大需求矩陣 int Maxij
2、分配矩陣 int Allocationij 需求矩陣 int needij= Maxij- Allocationij申請(qǐng)各類資源數(shù)量 int Request ij i進(jìn)程申請(qǐng)j資源的數(shù)量工作向量 int Workx int Finishy 2.2銀行家算法設(shè)Requesti是進(jìn)程Pi的請(qǐng)求向量,如果Requestij=K,表示進(jìn)程Pi需要k個(gè)Rj類型的資源,當(dāng)Pi發(fā)出資源請(qǐng)求后,系統(tǒng)按照下述步驟進(jìn)行檢查:(1)如果RequestijNeedj,便轉(zhuǎn)向步驟(2);否則認(rèn)為出錯(cuò),因?yàn)樗枰馁Y源數(shù)已經(jīng)超過它所宣布的最大值。(2)如果RequestijAvailablej,便轉(zhuǎn)向步驟(3);否則,
3、表示尚無足夠資源,Pi須等待。(3)系統(tǒng)試探著將資源分配給進(jìn)程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)。若安全,才正式將資源分配給進(jìn)程Pi,以完成本次分配;否則本次的試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓進(jìn)程Pi等待。2.3安全性檢查算法(Check_safe()函數(shù))(1)設(shè)置兩個(gè)向量:工作向量Work,它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需
4、的各類資源數(shù)目,在執(zhí)行安全性算法開始時(shí),Work= Available。Finish,它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成。開始時(shí)先做Finishi=0;當(dāng)有足夠的資源分配給進(jìn)程時(shí),再令Finishi=1。(2)在進(jìn)程中查找符合以下條件的進(jìn)程:條件1:Finishi=0;條件2:needij<=Workj若找到,則執(zhí)行步驟(3)否則,執(zhí)行步驟(4)(3)當(dāng)進(jìn)程獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Workj= Workj+ Allocationij;Finishi=1;goto step 2;(4) 如果所有的Finishi=1都滿足,則表示系
5、統(tǒng)處于安全狀態(tài),否則,處于不安全狀態(tài)。3、 算法設(shè)計(jì)初始化算法流程圖:銀行家算法流程圖:(1)采用動(dòng)態(tài)輸入的方法對(duì)進(jìn)程個(gè)數(shù)Pnum,資源種類數(shù)Stype,資源總數(shù)Ssum,最大需求Max,已分配Allocation進(jìn)行初始化;(2)根據(jù)已輸入數(shù)據(jù)計(jì)算出需求矩陣Need,可用資源數(shù)Available;(3)利用Check_safe()函數(shù)對(duì)此刻系統(tǒng)的安全性進(jìn)行檢測(cè),如果安全,給出安全序列;(4)進(jìn)程i提出資源請(qǐng)求,利用Ask_Distribution()函數(shù)檢測(cè)請(qǐng)求是否合理;合理則滿足請(qǐng)求,并給出安全序列;不合理則給出錯(cuò)誤提示;(5)做出開始界面、選擇界面、退出界面,使程序美觀、易操作;4、 編
6、碼實(shí)現(xiàn)(實(shí)驗(yàn)的java代碼)import java.util.Scanner;public class YinHang Scanner in = new Scanner(System.in);int Pnum; / 進(jìn)程個(gè)數(shù)int Stype; / 資源種類數(shù)int Ssum;/ 各類資源總數(shù)int Max;/ 最大需求矩陣int Allocation;/ 已分配矩陣int Need;/ 需求矩陣int Available; / 可用資源數(shù)int Work;/ Available的試分配向量boolean Finish = new boolean50;/ 試分配結(jié)果標(biāo)識(shí)向量public Yin
7、Hang() start();public void start() System.out.println("*");System.out.println(" 歡迎使用銀行家算法");System.out.println(" 羅巾英 ");System.out.println("*");System.out.println("請(qǐng)選擇操作:nt1.開始使用nt2.退出");int a;a = in.nextInt();if (a = 1) input(); else quit();public v
8、oid input() System.out.println("請(qǐng)輸入T0時(shí)刻進(jìn)程個(gè)數(shù)Pnum:");this.Pnum = in.nextInt();System.out.println("請(qǐng)輸入資源種類數(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("該時(shí)刻的資源分配表:");output();this.Check_Safe(Available);this.Ask_Distribution(false);public int getSsum() Ssum = new intStype;System.out.println("請(qǐng)輸入各類資源總數(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("請(qǐng)輸入最大需求矩陣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("請(qǐng)輸入已分配資源情況矩陣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("進(jìn)程的可用資源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("此時(shí)系統(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("請(qǐng)輸入請(qǐng)求分配的進(jìn)程編號(hào):");int m = in.nextInt();System.out.println("請(qǐng)輸入請(qǐng)求的各資源數(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("出錯(cuò)!請(qǐng)求資源數(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("出錯(cuò)!請(qǐng)求資源數(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("(進(jìn)程P"+m+"對(duì)資源的最大需求已滿足,對(duì)其占有資源進(jìn)行回收)");for (int j = 0; j <Stype;
19、 j+) Availablej = Availablej + Allocationmj;break;System.out.println("因此可以滿足" + m + "進(jìn)程的請(qǐng)求,分配后的各種變量值更新為:");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(" 進(jìn)程 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 綠色有機(jī)肥料購(gòu)銷合同
- 獵頭招聘服務(wù)合同權(quán)益法律服務(wù)
- 羊絨毛皮購(gòu)銷合同
- 工程居間合作合同范本
- 代理人權(quán)益保證函
- 散裝貨物運(yùn)輸合同
- 企業(yè)團(tuán)隊(duì)建設(shè)培訓(xùn)條款
- 商業(yè)服務(wù)合同終止
- 報(bào)效國(guó)家的軍人諾言
- 汽車租賃合同協(xié)議范本
- 國(guó)家開放大學(xué)電大本科《小學(xué)數(shù)學(xué)教學(xué)研究》期末題庫(kù)和答案
- 預(yù)防住院患者跌倒墜床的防范措施及宣教
- GB/T 3279-2023彈簧鋼熱軋鋼板和鋼帶
- 《學(xué)習(xí)共同體-走向深度學(xué)習(xí)》讀書分享
- 大班健康《小小營(yíng)養(yǎng)師》
- 產(chǎn)品4五子衍宗丸
- 吉林省運(yùn)動(dòng)員代表協(xié)議書
- BSCI驗(yàn)廠全套程序文件
- 《人工智能與計(jì)算機(jī)基礎(chǔ)》課程考試復(fù)習(xí)題庫(kù)(含答案)
- 2023-2024學(xué)年四川省樂山市小學(xué)語(yǔ)文三年級(jí)期末自測(cè)試題詳細(xì)參考答案解析
- 對(duì)外漢語(yǔ)教學(xué)法知到章節(jié)答案智慧樹2023年西北師范大學(xué)
評(píng)論
0/150
提交評(píng)論