銀行家算法實驗報告_第1頁
銀行家算法實驗報告_第2頁
銀行家算法實驗報告_第3頁
銀行家算法實驗報告_第4頁
銀行家算法實驗報告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

南華大學(xué)計算機學(xué)院試驗匯報(春季學(xué)期)課程名稱操作系統(tǒng)試驗名稱銀行家算法姓名學(xué)號專業(yè)網(wǎng)絡(luò)工程班級1班地點教師曹軍一、試驗題目:系統(tǒng)中有m個同類資源被n個進程共享,每個進程對資源最大需求數(shù)分別為S1,S2,…,Sn,且Max(Si)<=m,(i=1,2,…n)。進程能夠動態(tài)地申請資源和釋放資源。編寫一個程序,實現(xiàn)銀行家算法,當(dāng)系統(tǒng)將資源分配給某一進程而不會死鎖時,就分配之。不然,推遲分配,并顯示適當(dāng)信息。二、試驗?zāi)繕?biāo):當(dāng)系統(tǒng)總資源數(shù)m小于或等于全部進程對資源最大需求Snni∑i?=1時,就可能產(chǎn)生死鎖。死鎖會引發(fā)計算機系統(tǒng)癱瘓。銀行家算法是在實現(xiàn)資源分配時防止死鎖一個著名算法,該算法是在能確保系統(tǒng)處于安全狀態(tài)時才把資源分配給申請者。經(jīng)過本試驗深入了解死鎖概念,并選擇一個算法來防止死鎖。深入了解利用銀行家算法防止死鎖問題;在了解和掌握銀行家算法。了解和掌握安全序列、安全性算法。三、試驗內(nèi)容及要求:1、設(shè)計進程對各類資源最大申請表示及初值確實定。2、設(shè)定系統(tǒng)提供資源初始情況。3、設(shè)定每次某個進程對各類資源申請表示。4、編制程序,依據(jù)銀行家算法,決定其資源申請是否得到滿足。5、顯示資源申請和分配時改變情況。四、試驗過程:程序要求:

1.判斷當(dāng)前狀態(tài)是否安全,假如安全,給出安全序列;假如不安全給出理由。

2.對于下一個時刻T1,某個進程Pk會提出請求Request(R1,…,Rm),判斷分配給Pk進程請求資源之后是否安全。假如安全,給出安全序列;假如不安全給出理由。3.輸入:進程個數(shù)n,資源種類m,T0時刻各個進程資源分配情況(能夠運行輸入,也能夠在程序中設(shè)置)。

4.輸出:假如安全輸出安全進程序列,不安全提醒信息。

進程調(diào)度實現(xiàn)過程:1.變量初始化;

2.接收用戶輸入n,m,(輸入或者默認(rèn))Allocationij,Needij;

3.按照銀行家算法判斷當(dāng)前狀態(tài)安全是否,安全給出安全序列,不安全給出提醒;

4.假如安全,提醒用戶輸入下一時刻進程Pk資源請求Request(R1,…,Rm);

5.假如不安全或者無新請求則退出。源代碼:#include<stdio.h>#include<iostream>#include<iomanip>#include<fstream>#include<windows.h>usingnamespacestd;#defineMaxNumber20staticintn;staticintm;staticintAvailable[MaxNumber];staticintMax[MaxNumber][MaxNumber];staticintAllocation[MaxNumber][MaxNumber];staticintNeed[MaxNumber][MaxNumber];staticintRequest[MaxNumber];staticintSafeOrder[MaxNumber];staticboolFinish[MaxNumber];staticboolisDisplayAvaliable=true;staticcharsourceName[]={'A','B','C','D','E','F','G','H','I','J','K'};//資源名稱voidinput();boolisSystemSafe();voidbankerAlgorithm();voiddisplay();intmain(){input();bankerAlgorithm();system("pause");return0;}voidinput(){//intn=6;//intm=3;ifstreaminData;inData.open("C:/476.txt");//讀取數(shù)據(jù)inData>>n;inData>>m;for(inti=0;i<m;i++){inData>>Available[i];}for(inti=0;i<n;i++){for(intj=0;j<m;j++){inData>>Allocation[i][j];}}for(inti=0;i<n;i++){for(intj=0;j<m;j++){inData>>Need[i][j];}}for(inti=0;i<n;i++){for(intj=0;j<m;j++){Max[i][j]=Need[i][j]+Allocation[i][j];}}cout<<"*****************************程序開始*******************************"<<endl;display();}boolisSystemSafe(){intwork[MaxNumber];for(inti=0;i<m;i++)//m是資源個數(shù)A,B,C{work[i]=Available[i];}for(inti=0;i<n;i++)//n是進程個數(shù){Finish[i]=false;SafeOrder[i]=-1;//初始化安全序列}intFinishNumebr=0;intisSafe;inti=0,j;while(i<n){isSafe=0;for(j=0;j<m;j++){if(Finish[i]==false&&Need[i][j]<=work[j]){isSafe++;}elsebreak;}if(isSafe==m)//當(dāng)且僅當(dāng)進程對應(yīng)全部資源數(shù)量都滿足時候才成立{Finish[i]=true;SafeOrder[FinishNumebr]=i;FinishNumebr++;for(j=0;j<m;j++){work[j]+=Allocation[i][j];}i=0;//找到滿足條件進程后,從頭開始再進行尋找}elsei++;if(FinishNumebr==n){cout<<"**********************************Safe!******************************"<<endl;cout<<"對應(yīng)安全序列為:"<<endl;cout<<"P"<<SafeOrder[0];for(inti=1;i<n;i++){cout<<"-->"<<"P"<<SafeOrder[i];}cout<<endl;returntrue;}}cout<<"******************************unSafe!******************************"<<endl;returnfalse;}voidbankerAlgorithm(){intchooseProcess;charisContinue;while(true){//設(shè)置兩個布爾變量:判別請求向量是等候還是系統(tǒng)已經(jīng)不再分配新資源boolisRequestNeedOK=true;boolisRequestAvailableOK=true;cout<<"請輸入要申請資源進程號(注意:第一個進程為0號,第二個進程為1號,以這類推?。?<<endl<<"chooseProcess=";cin>>chooseProcess;cout<<"請輸入進程所請求各類資源數(shù)量:(ABC)"<<endl;for(inti=0;i<m;i++){cin>>Request[i];}//輸入錯誤判斷for(inti=0;i<m;i++){if(Request[i]>Need[chooseProcess][i]){cout<<"**************************當(dāng)前運行結(jié)果*****************************"<<endl;cout<<"您輸入請求進程所對應(yīng)資源數(shù)量超出最大需求量,請重新輸入!"<<endl;//cout<<"****************************************************************"<<endl;isRequestNeedOK=false;continue;}if(Request[i]>Available[i]){cout<<"**************************當(dāng)前運行結(jié)果*****************************"<<endl;cout<<"您輸入請求進程資源數(shù)量超出系統(tǒng)所供給最大資源數(shù)量pi必須等候,請重新輸入!"<<endl;//cout<<"****************************************************************"<<endl;isRequestAvailableOK=false;continue;}}for(intj=0;j<m;j++){Available[j]-=Request[j];Allocation[chooseProcess][j]+=Request[j];Need[chooseProcess][j]-=Request[j];}cout<<"**********************************************************************"<<endl;if(!isSystemSafe())//怎樣不滿足系統(tǒng)安全性算法,將此次試探作廢,恢復(fù)到原來值{for(intj=0;j<m;j++){Available[j]+=Request[j];Allocation[chooseProcess][j]-=Request[j];Need[chooseProcess][j]+=Request[j];}//當(dāng)請求向量Request滿足和Need、Available關(guān)系時,證實系統(tǒng)已不能再分配資源if(isRequestAvailableOK&&isRequestNeedOK){cout<<"**************************當(dāng)前運行結(jié)果*****************************"<<endl;cout<<"當(dāng)前可利用資源已經(jīng)不能滿足任何進程需求,故系統(tǒng)進入不安全狀態(tài),系統(tǒng)不分配資源!"<<endl;cout<<"****************************************************************"<<endl;}}cout<<"嘗試依照p(i)發(fā)出請求向量后資源情況:"<<endl;display();cout<<"*******************************************************************"<<endl;cout<<"是否繼續(xù)輸入請求變量request進行測試,是(Y),否(N)"<<endl;cout<<"isContinue=";cin>>isContinue;if(isContinue=='Y'||isContinue=='y'){//input();//實現(xiàn)數(shù)次請求(保留上一次請求狀態(tài))continue;}elseif(isContinue=='N'||isContinue=='n'){cout<<"******************************程序結(jié)束*****************************"<<endl;break;}}}voiddisplay(){charprocessName[]={'1','2','3','4','5','6'};cout<<"----------------------------------------------------------------------"<<endl;cout<<"當(dāng)前進程個數(shù)為n="<<n<<endl;cout<<"當(dāng)前資源個數(shù)為m="<<m<<endl;cout<<"系統(tǒng)可利用資源數(shù)情況以下:"<<endl;for(inti=0;i<m;i++){cout<<setw(5)<<sourceName[i]<<"";}cout<<endl;cout<<setw(5)<<Available[0]<<"";cout<<setw(5)<<Available[1]<<"";cout<<setw(5)<<Available[2]<<""<<endl;cout<<"------------------------------------------------------------------------"<<endl;cout<<"processName";cout<<setw(10)<<"Max[][]"<<"";cout<<setw(15)<<"Allocation[][]"<<"";cout<<setw(10)<<"Need[][]"<<"";if(isDisplayAvaliable){cout<<setw(15)<<"available[][]";}cout<<endl;cout<<setw(15);for(inti=0;i<m;i++){cout<<sourceName[i]<<setw(3);}cout<<setw(5);for(inti=0;i<m;i++){cout<<sourceName[i]<<setw(3);}cout<<setw(10);for(inti=0;i<m;i++){cout<<sourceName[i]<<setw(3);}if(isDisplayAvaliable){cout<<setw(5);for(inti=0;i<m;i++){cout<<sourceName[i]<<setw(3);}}cout<<

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論