


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告何美西 1一、實(shí)驗(yàn)名稱: 銀行家算法二、實(shí)驗(yàn)?zāi)康模?銀行家算法是避免死鎖的一種重要方法,通過編寫 一個簡單的銀行家算法程序,加深了解有關(guān)資源申請、避免死 鎖等概念,并體會和了解死鎖和避免死鎖的具體實(shí)施方法。三、問題分析與設(shè)計(jì):1、算法思路 :先對用戶提出的請求進(jìn)行合法性檢查,即檢查 請求是否大于需要的,是否大于可利用的。若請求合法,則進(jìn) 行預(yù)分配,對分配后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安 全,則分配;若不安全,則拒絕申請,恢復(fù)到原來的狀態(tài),拒 絕申請。2、銀行家算法步驟:(1)如果Requestk or二Need則轉(zhuǎn)向步驟(2);否則,認(rèn)為出錯,因?yàn)樗枰馁Y源數(shù)已超
2、過它所宣布的最大值。(2) 如果Request or二Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)中尚無足夠的資源,進(jìn)程必須等待。(3) 系統(tǒng)試探把要求的資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:Available=Available-Requesti;Allocation=Allocation+Request;Need=Need-Request;(4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于 安全狀態(tài)。3、安全性算法步驟:(1)設(shè)置兩個向量工作向量 Work 。它表示系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)行所需要的各類資 源數(shù)目,執(zhí)行安全算法開始時, Work=Allocation;
3、布爾向量Finish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使 之運(yùn)行完成,開始時先做 Finishi=false ,當(dāng)有足夠資源分配給進(jìn)程 時,令 Finishi=true 。(2)從進(jìn)程集合中找到一個能滿足下述條件的進(jìn)程: Finishi=false Need<or=Work如找到,執(zhí)行步驟( 3);否則,執(zhí)行步驟( 4)。(3)當(dāng)進(jìn)程 P 獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Work=Work+Allocation;Finishi=true;ooRequesti Avai1ablei?轉(zhuǎn)向步驟(2)4、流程圖:系統(tǒng)主要過程流程圖(4)如果所有進(jìn)程的F
4、inishi=true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)傾分配2421111T印輸出*t時刻資源分配惰況賓陥分AHI打m輸岀進(jìn)行和始化i進(jìn)人泰址li銀行家算法流程圖安全性算法流程圖四、實(shí)驗(yàn)代碼:#i nclude<iostream.h>#i ncludevstri ng.h>#in clude<stdio.h>#defi ne False 0#define True 1int Max100100=0;/ 大需求int Avaliable100=0;/char name100=0;/各進(jìn)程所需各類資源的最系統(tǒng)可用資源資源的名稱還需要資源請求資源向量存
5、放安全序列 存放系統(tǒng)可提供資源int Allocation100100=0;/ 系統(tǒng)已分配資源int Need100100=0;/int Request100=0;/int temp100=0;/int Work100=0;/int p100=0;int q100100=0;int z100100=0;int M=100;/ 作業(yè)的最大數(shù)為 100int N=100;/ 資源的最大數(shù)為 100int gg=1;void showdata()/顯示資源矩陣int i,j;cout<<endl<<" 此時刻的資源分配情況為: "<<endl;
6、cout<<" Max Allocation Need Avaliable"<<endl;cout<<" 進(jìn)程名for(j=0;j<4;j+)for(i=0;i<N;i+) cout<<namei<<" "cout<<" "cout<<endl;for(i=0;i<M;i+)cout<<" "<<i<<" "for(j=0;j<N;j+) co
7、ut<<Maxij<<" " cout<<" "for(j=0;j<N;j+) cout<<Allocationij<<" " cout<<" "for(j=0;j<N;j+) cout<<Needij<<" "if(i=0)cout<<" "for (j=0;j<N;j+)輸出分配資源cout<<Avaliablej<<&qu
8、ot; "/ cout<<endl;int changdata(int i)/進(jìn)行資源分配int j;for (j=0;j<M;j+) /pj=Avaliablej;Avaliablej=Avaliablej-Requestj;/qij=Allocationij;Allocationij=Allocationij+Requestj;/zij=Needij; Needij=Needij-Requestj;return 1;int safe()/ 安全性算法int i,d,k=0,m,h,s,apply,Finish100=0;int j;int flag=0;for(
9、i=0;i<N;i+)Worki=Avaliablei;cout<<endl<<" 安全性檢查 "<<endl;cout<<" Work Need AllocationWork+Allocation Finish"<<endl;cout<<" 進(jìn)程名 "for(h=0;h<4;h+)for(s=0;s<N;s+)cout<<names<<" "cout<<" "cout&
10、lt;<endl;for(i=0;i<M;i+)apply=0;for(j=0;j<N;j+)if (Finishi=False&&Needij<=Workj)apply+;if(apply=N) cout<<" "<<i<<" "for(d=0;d<N;d+)cout<<Workd<<" "cout<<" "for(d=0;d<N;d+)cout<<Needid<<&
11、quot; "cout<<" "for(d=0;d<N;d+)cout<<Allocationid<<" "cout<<" "for(m=0;m<N;m+)Workm=Workm+Allocationim;cout<<Workm<<" " / 變分配數(shù)Finishi=True;tempk=i;cout<<" "cout<<"true"<<"
12、; "cout<<endl;i=-1;k+;flag+;for(i=0;i<M;i+)if(Finishi=False)for(j=0;j<N;j+)Avaliablej=Avaliablej+Requestj;Allocationij=Allocationij-Requestj;Needij=Needij+Requestj;cout<<endl<<" 系統(tǒng)進(jìn)入不安全狀態(tài)!此時系統(tǒng)不 分配資源! "<<endl;/ 不成功系統(tǒng)不安全return 0;cout<<endl<<&quo
13、t; 此時系統(tǒng)是安全的 !"<<endl;/ 如果 安全,輸出成功cout<<" 安全序列為 :"for(i=0;i<M;i+)/ 輸出運(yùn)行進(jìn)程數(shù)組cout<<tempi;if(i<M-1) cout<<"->"cout<<endl;return 0;void share()/ 利用銀行家算法對申請資源對進(jìn)行判定char ch;int i=0,j=0;ch='y'cout<<endl<<" 請輸入要求分配的資源進(jìn)程號
14、(0- "<<M-1<<"):"cin>>i;/ 輸入須申請的資源號cout<<endl<<" 請輸入進(jìn)程 "<<i<<"申請的資源:"<<e ndl;for(j=0;j<N;j+)cout<<namej<<":"cin>>Requestj;/ 輸入需要申請的資源for (j=0;j<N;j+)if(Requestj>Needij)/判斷申請是否大于需求,若
15、大于則出錯cout<<endl<<" 進(jìn)程 "<<i<<" 申請的資源大于它 需要的資源 "cout<<" 分配不合理,不予分配! "<<endl;ch='n'break;else if(Requestj>Avaliablej)/判斷申請是否大于當(dāng)前資源,若大于則cout<<endl<<"進(jìn)程 "<<i<<" 申請的資源大于系統(tǒng)現(xiàn)在可利用的資源 "cout
16、<<" 分配出錯,不予分配 !"<<endl;ch='n'break;if(ch='y') changdata(i);/ 根據(jù)進(jìn)程需求量變換資源showdata();/ 根據(jù)進(jìn)程需求量顯示變換后的資源safe();/ 根據(jù)進(jìn)程需求量進(jìn)行銀行家算法判斷int main()/ 主函數(shù)int t=1,i,j,number,choice,m,n,flag; char ming;cout<<"*銀行家算法的設(shè)計(jì)與實(shí)現(xiàn)<<endl;cout<<endl<<" 請首
17、先輸入系統(tǒng)可供資源種類的數(shù)量 cin>>n;N=n;for(i=0;i<n;i+)coutvv" 資源"<<i+1<<" 的名稱:"cin>>ming;namei=ming;cout<<" 資源的數(shù)量 :"cin>>number;Avaliablei=number;cout<<endl;cout<<" 請輸入作業(yè)的數(shù)量 :"cin>>m;M=m;cout<<endl<<"
18、;("<<m<<"*"<<n<<"請輸入各進(jìn)程的最大需求量矩陣)Max:"«e ndl;for(i=0;i<m;i+)for(j=0;j<n;j+)cin>>Maxij;doflag=0;cout<<endl<<"請輸入各進(jìn)程已經(jīng)申請的資源量("<<m<<"*"<<n<<"矩陣)Allocati on :"<<e ndl;
19、for(i=0;i<m;i+)for(j=0;j<n;j+)cin>>Allocationij; if(Allocationij>Maxij) flag=1;Needij=Maxij-Allocationij;if(flag)cout<<endl<<" 申請的資源大于最大需求量,請重 新輸入 !n"<<endl;while(flag);showdata();/ 顯示各種資源safe();/ 用銀行家算法判定系統(tǒng)是否安全while(1)if(t=1)cout<<endl<<"
20、利用銀行家算法預(yù)分配資源 "<<endl;share();t=0;else break;cout<<endl<<" 是否繼續(xù)銀行家算法? (按 1 鍵繼續(xù) , 按其它任意鍵退出 ):"cin>>t;cout<<endl;return 1;五、程序執(zhí)行結(jié)果:Fitft B CrrR : 3 - 3 : 222 0請輸入作業(yè)的數(shù)量汚請輸入各進(jìn)程的最大需求量鴿旳矩陣”帕小32此時刻的資源分配情祝為:tl-axA Hoc且t icmNeedAvailable進(jìn)程名R B ABCft B CAUG67 S 30 1
21、 7 4 3S 3 213 2 22 » a12 229 fl 23 0 2£0932 2 22 11Oil44 3 30 0 24 3 1進(jìn)程名13024WorkABC 3 3 2 5 3 2 7 4 3 7 5 3 10 5 5NeedABC 12 2 0 11 7 4 3 6 0 04 3 1HllocationABC2 110IJouk" llocat 1.0 nABC5 3 27 4 37 5 310 5 510 5 7Finishtrue true true true true此時垂統(tǒng)是安全的? 安全序列為:1->3->0->2->4利用銀行家算法預(yù)分配資源請輸入要求分配的資源進(jìn)程號<0-4>:1請輸入進(jìn)程1申請的資源:A:1B:0C:2此時刻的資源分配懵況為:AualiahleMaxA 1locationNeed進(jìn)程名ABCABCABCABC0? 5 30 107 4 32 3 013 2 23 R 2D 2 D29 0 23 0 26 0 032 2 22 110 1144 3 30 0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020英語試卷小學(xué)
- 統(tǒng)編版(2024)七年級上冊道德與法治《探究與分享+運(yùn)用你的經(jīng)驗(yàn)+單元思考與行動》 參考答案
- 熱力管網(wǎng)施工方案
- 廣西北流市2025屆中考生物考試模擬沖刺卷含解析
- 臨時施工便道合同范本
- 廠家采購原料合同范本
- 前臺文員的跨文化溝通能力提升計(jì)劃
- 加強(qiáng)市場定位與品牌策略的計(jì)劃
- 行業(yè)變化對團(tuán)隊(duì)的影響計(jì)劃
- 提升企業(yè)安全管理水平的措施計(jì)劃
- 抵押個人汽車借款合同范本
- 統(tǒng)編版(2024)七年級下冊語文期末復(fù)習(xí):第一單元素養(yǎng)提升測試卷(含答案)
- Deepseek 學(xué)習(xí)手冊分享
- 電網(wǎng)工程設(shè)備材料信息參考價(2024年第四季度)
- 髖關(guān)節(jié)脫位2教學(xué)課件
- 耳式支座計(jì)算
- IMS基本信令流程課件
- 酒精擦拭試驗(yàn)
- 供應(yīng)商社會準(zhǔn)則符合性自審問卷
- ERP項(xiàng)目建議書
- 4925095728國內(nèi)外中小學(xué)作業(yè)研究綜述
評論
0/150
提交評論