銀行家算法c++語言(流程圖代碼全)_第1頁
銀行家算法c++語言(流程圖代碼全)_第2頁
銀行家算法c++語言(流程圖代碼全)_第3頁
銀行家算法c++語言(流程圖代碼全)_第4頁
銀行家算法c++語言(流程圖代碼全)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上操作系統(tǒng)教程 銀行家算法院 系計(jì)算機(jī)與軟件學(xué)院班 級08軟件工程2班學(xué) 號姓 名何麗茗一、實(shí)驗(yàn)?zāi)康你y行家算法是避免死鎖的一種重要方法。通過編寫一個(gè)模擬動態(tài)資源分配的銀行家算法程序,進(jìn)一步深入理解死鎖、產(chǎn)生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握避免死鎖的具體實(shí)施方法。二、實(shí)驗(yàn)內(nèi)容根據(jù)銀行家算法的基本思想,編寫和調(diào)試一個(gè)實(shí)現(xiàn)動態(tài)資源分配的模擬程序,并能夠有效地防止和避免死鎖的發(fā)生。三、實(shí)驗(yàn)方法開 始輸入資源數(shù)m, 及各類資源總數(shù),初始化Available向量輸入進(jìn)程數(shù)n,i=1輸入進(jìn)程i的最大需求向量max。inmax資源總數(shù)提示錯(cuò)誤重新輸入i加1任選一個(gè)進(jìn)程作為當(dāng)前

2、進(jìn)程輸入該進(jìn)程的資源請求量Request 調(diào)用銀行家算法,及安全性算法,完成分配,或并給出提示Need向量為0該進(jìn)程已運(yùn)行結(jié)束Need矩陣為0所有進(jìn)程運(yùn)行都結(jié)束結(jié) 束NYYNNY初始化need 矩陣NY1. 算法流程圖 2. 算法數(shù)據(jù)結(jié)構(gòu)1) 可利用資源向量Available ,它是一個(gè)最多含有100個(gè)元素的數(shù)組,其中的每一個(gè)元素代表一類可利用的資源的數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源數(shù)目。其數(shù)值隨該類資源的分配和回收而動態(tài)地改變。如果Available(j)=k,標(biāo)是系統(tǒng)中現(xiàn)有j類資源k個(gè)。2) 最大需求矩陣Max,這是一個(gè)nm的矩陣,它定義了系統(tǒng)中n個(gè)進(jìn)程中的每一個(gè)進(jìn)程對m類資

3、源的最大需求。如果Max(i,j)=k,表示進(jìn)程i需要j類資源的最大數(shù)目為k。3) 分配矩陣Allocation,這也是一個(gè)nm的矩陣,它定義了系統(tǒng)中的每類資源當(dāng)前一分配到每一個(gè)進(jìn)程的資源數(shù)。如果Allocation(i,j)=k,表示進(jìn)程i當(dāng)前已經(jīng)分到j(luò)類資源的數(shù)目為k。Allocation i表示進(jìn)程i的分配向量,有矩陣Allocation的第i行構(gòu)成。4) 需求矩陣Need,這還是一個(gè)nm的矩陣,用以表示每個(gè)進(jìn)程還需要的各類資源的數(shù)目。如果Need(i,j)=k,表示進(jìn)程i還需要j類資源k個(gè),才能完成其任務(wù)。Need i表示進(jìn)程i的需求向量,由矩陣Need的第i行構(gòu)成。5) 上述三個(gè)矩陣

4、間存在關(guān)系:Need(i,j)=Max(i,j)-Allocation(i,j);3. 銀行家算法設(shè)Requesti 是進(jìn)程i的請求向量,如果Requesti,j=K,表示進(jìn)程i需要K個(gè)j類型的資源。當(dāng)i發(fā)出資源請求后,系統(tǒng)按下述步驟進(jìn)行檢查:1) 如果Request i Need,則轉(zhuǎn)向步驟2;否則,認(rèn)為出錯(cuò),因?yàn)樗埱蟮馁Y源數(shù)已超過它當(dāng)前的最大需求量。2) 如果Request i Available,則轉(zhuǎn)向步驟3;否則,表示系統(tǒng)中尚無足夠的資源滿足i的申請,i必須等待。3) 系統(tǒng)試探性地把資源分配給進(jìn)程i,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:Available = Available - Req

5、uest iAllocation i= Allocation i+ Request iNeed i= Need i - Request i4) 系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。如果安全才正式將資源分配給進(jìn)程i,以完成本次分配;否則,將試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓進(jìn)程i等待。四、實(shí)驗(yàn)代碼以及運(yùn)行示例1. 源代碼:#include#include#include#define False 0#define True 1using namespace std;int Max100100=0;/各進(jìn)程所需各類資源的最大需求int Avaliable100=0;

6、/系統(tǒng)可用資源char name100=0;/資源的名稱int Allocation100100=0;/系統(tǒng)已分配資源int Need100100=0;/還需要資源int Request100=0;/請求資源向量int temp100=0;/存放安全序列int Work100=0;/存放系統(tǒng)可提供資源int M=100;/進(jìn)程的最大數(shù)為int N=100;/資源的最大數(shù)為void showdata()/顯示資源矩陣int i,j;cout系統(tǒng)目前可用的資源Avaliable:endl;for(i=0;iN;i+) coutnamei ;coutendl;for (j=0;jN;j+) cout

7、Avaliablej ;/輸出分配資源coutendl;cout Max Allocation Needendl;cout進(jìn)程名 ;for(j=0;j3;j+)for(i=0;iN;i+)coutnamei ;cout ;coutendl;for(i=0;iM;i+)cout i ;for(j=0;jN;j+)coutMaxij ;cout ;for(j=0;jN;j+)coutAllocationij ;cout ;for(j=0;jN;j+)coutNeedij ;coutendl;int changdata(int i)/進(jìn)行資源分配 int j;for (j=0;jM;j+) Aval

8、iablej=Avaliablej-Requestj;Allocationij=Allocationij+Requestj;Needij=Needij-Requestj;return 1;int safe()/安全性算法int i,k=0,m,apply,Finish100=0;int j;int flag=0;Work0=Avaliable0;Work1=Avaliable1;Work2=Avaliable2;for(i=0;iM;i+) apply=0;for(j=0;jN;j+)if (Finishi=False&Needij=Workj) apply+;if(apply=N)for(m

9、=0;mN;m+)Workm=Workm+Allocationim;/變分配數(shù)Finishi=True;tempk=i;i=-1; k+;flag+;for(i=0;iM;i+)if(Finishi=False)cout系統(tǒng)不安全endl;/不成功系統(tǒng)不安全return -1; cout系統(tǒng)是安全的!endl;/如果安全,輸出成功 cout分配的序列:;for(i=0;iM;i+)/輸出運(yùn)行進(jìn)程數(shù)組couttempi;if(iM-1) cout;coutendl;return 0;void share()/利用銀行家算法對申請資源對進(jìn)行判定char ch;int i=0,j=0;ch=y;co

10、ut請輸入要求分配的資源進(jìn)程號(0-M-1i;/輸入須申請的資源號cout請輸入進(jìn)程i 申請的資源:endl;for(j=0;jN;j+)coutnamejRequestj;/輸入需要申請的資源 for (j=0;jNeedij)/判斷申請是否大于需求,若大于則出錯(cuò) cout進(jìn)程i申請的資源大于它需要的資源;cout 分配不合理,不予分配!Avaliablej)/判斷申請是否大于當(dāng)前資源,若大于則 /出錯(cuò)cout進(jìn)程i申請的資源大于系統(tǒng)現(xiàn)在可利用的資源;cout 分配出錯(cuò),不予分配!endl;ch=n;break; if(ch=y) changdata(i);/根據(jù)進(jìn)程需求量變換資源showd

11、ata();/根據(jù)進(jìn)程需求量顯示變換后的資源safe();/根據(jù)進(jìn)程需求量進(jìn)行銀行家算法判斷 void addresources()/添加資源 int n,flag;coutn;flag=N;N=N+n;for(int i=0;in;i+)coutnameflag;coutAvaliableflag+;showdata();safe();void delresources()/刪除資源char ming;int i,flag=1;coutming;for(i=0;iN;i+)if(ming=namei)flag=0;break;if(i=N)cout該資源名稱不存在,請重新輸入:;while(

12、flag);for(int j=i;jN-1;j+)namej=namej+1;Avaliablej=Avaliablej+1;N=N-1;showdata();safe();void changeresources()/修改資源函數(shù)cout系統(tǒng)目前可用的資源Avaliable:endl; for(int i=0;iN;i+) coutnamei:Avaliableiendl;cout輸入系統(tǒng)可用資源Avaliable:Avaliable0Avaliable1Avaliable2;cout經(jīng)修改后的系統(tǒng)可用資源為endl;for (int k=0;kN;k+)coutnamek:Avaliab

13、lekendl;showdata();safe();void addprocess()/添加作業(yè) int flag=M;M=M+1;cout請輸入該作業(yè)的最大需求量Maxendl;for(int i=0;iN;i+)coutnameiMaxflagi;Needflagi=Maxflagi-Allocationflagi;showdata();safe();int main()/主函數(shù) int i,j,number,choice,m,n,flag; char ming;coutt-endl;coutt| |endl;coutt| 銀行家算法的實(shí)現(xiàn) |endl;coutt| |endl;coutt

14、| 08軟工何麗茗 |endl;coutt| |endl;coutt| |endl;coutt-endl;coutn;N=n;for(i=0;in;i+)cout資源i+1ming;namei=ming;coutnumber;Avaliablei=number;coutendl;coutm;M=m;cout請輸入各進(jìn)程的最大需求量(m*n矩陣)Max:endl;for(i=0;im;i+)for(j=0;jMaxij;doflag=0;cout請輸入各進(jìn)程已經(jīng)申請的資源量(m*n矩陣)Allocation:endl;for(i=0;im;i+)for(j=0;jAllocationij;if(

15、AllocationijMaxij) flag=1;Needij=Maxij-Allocationij;if(flag)cout申請的資源大于最大需求量,請重新輸入!n;while(flag); showdata();/顯示各種資源 safe();/用銀行家算法判定系統(tǒng)是否安全 while(choice)coutt-銀行家算法演示-endl;cout 1:增加資源 endl;cout 2:刪除資源 endl;cout 3:修改資源 endl;cout 4:分配資源 endl;cout 5:增加作業(yè) endl;cout 0:離開 endl;coutt-endl;coutchoice;switch(choice)case 1: addresources();break;case 2: delresources();break;case 3: changeresources();break;case 4: share();break;case 5: addprocess();break;case 0: choice

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論