操作系統(tǒng)銀行家算法_第1頁
操作系統(tǒng)銀行家算法_第2頁
操作系統(tǒng)銀行家算法_第3頁
操作系統(tǒng)銀行家算法_第4頁
操作系統(tǒng)銀行家算法_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

淮海工學院計算機工程學院實驗報告書課程名:《計算機操作系統(tǒng)》題目:實驗二銀行家算法班級:^^姓名:^^實驗二銀行家算法實驗目的和要求應用銀行家算法驗證進程平安性檢查及分配資源編制模擬銀行家算法的程序,并以以下例子驗證程序的正確性。實驗環(huán)境1.PC微機。2.Windows操作系統(tǒng)。3.C/C++/VB開發(fā)集成環(huán)境。實驗學時2學時,必做實驗實驗內(nèi)容和步驟1)根據(jù)算法流程圖編制可執(zhí)行程序2)用以下兩個例子驗證程序的正確性。3)按照上述兩個例子,輸出執(zhí)行的結果。算法流程圖銀行家算法:平安性算法:【例1】某系統(tǒng)有A、B、C、D這4類資源供5個進程共享,進程對資源的需求和分配情況如下表所示?,F(xiàn)在系統(tǒng)中A、B、C、D類資源分別還剩1、5、2、0個,請按銀行家算法答復以下問題:

進程已占資源最大需求數(shù)ABCDABCDP100120012P210001750P313542356P406320652P500140656

(1)

現(xiàn)在系統(tǒng)是否處于平安狀態(tài)?(2)如果現(xiàn)在進程P2提出需要(0,4,2,0)個資源的請求,系統(tǒng)能否滿足它的請求?【例2】用銀行家算法考慮以下系統(tǒng)狀態(tài):進程

分配矩陣

最大需求矩陣

資源總數(shù)矩陣

A

3

0

1

1

4

1

1

1

6

3

4

2

B

0

1

0

0

0

2

1

2

C

1

1

1

0

4

2

1

0

D

1

1

0

1

1

1

1

1

E

0

0

0

0

2

1

1

0問系統(tǒng)是否平安?若進程B請求(0,0,1,0),可否立即分配?此后進程E也請求(0,0,1,0),可否分配給它?通過運行程序發(fā)現(xiàn),例1當中的系統(tǒng)處于不平安狀態(tài),進程P2提出的請求無法實現(xiàn);例2當中的系統(tǒng)處于平安狀態(tài),進程B提出的請求能實現(xiàn),此后進程E的請求也能實現(xiàn)。源代碼#include<iostream>#defineN20#defineM20usingnamespacestd;intf(inta[N][M],intb[N][M],intm,intk){intj;for(j=0;j<m;j++)if(a[k-1][j]>b[k-1][j])return0;return1;}intg(inta[N][M],intb[],intm,intk){intj;for(j=0;j<m;j++)if(a[k][j]>b[j])return0;return1;}inth(inta[],intn){for(inti=0;i<n;i++)if(!a[i])return0;return1;}intp(inta[],intb[N][M],intm,intk){intj;for(j=0;j<m;j++)if(a[j]>b[k-1][j])return0;return1;}intq(inta[],intb[],intm){intj;for(j=0;j<m;j++)if(a[j]>b[j])return0;return1;}intsafe(intFinish[N],intWork[M],intNeed[N][M],intAllocation[N][M],intn,intm){inti,j,k;intt[N];for(i=0;i<n;i++)t[i]=1;cout<<"平安性檢查!"<<endl;for(i=0;i<n;)//首先找到一個滿足條件的進程{if((Finish[i]==0)&&g(Need,Work,m,i)){k=i;t[i]=0;cout<<"p("<<k+1<<"):"<<endl;cout<<"Work["<<m<<"]:";for(j=0;j<m;j++){cout<<Work[j]<<"";Work[j]=Work[j]+Allocation[i][j];Finish[i]=1;}cout<<endl;cout<<"Need["<<m<<"]:";for(j=0;j<m;j++)cout<<Need[i][j]<<"";cout<<endl;cout<<"Allocation["<<m<<"]:";for(j=0;j<m;j++)cout<<Allocation[i][j]<<"";cout<<endl;cout<<"(Work+Allocation)["<<m<<"]:";for(j=0;j<m;j++)cout<<Work[j]<<"";cout<<endl;cout<<"Finish["<<k+1<<"]:";cout<<Finish[i]<<"";cout<<endl;break;}else{i++;}}if(g(Need,Work,m,k))//依次找到滿足條件的后面幾個進程{for(i=0;i<n;i++){if(t[i]){if(g(Need,Work,m,i)){cout<<"p("<<i+1<<"):"<<endl;cout<<"Work["<<m<<"]:";for(j=0;j<m;j++){cout<<Work[j]<<"";Work[j]=Work[j]+Allocation[i][j];Finish[i]=1;}cout<<endl;cout<<"Need["<<m<<"]:";for(j=0;j<m;j++)cout<<Need[i][j]<<"";cout<<endl;cout<<"Allocation["<<m<<"]:";for(j=0;j<m;j++)cout<<Allocation[i][j]<<"";cout<<endl;cout<<"(Work+Allocation)["<<m<<"]:";for(j=0;j<m;j++)cout<<Work[j]<<"";cout<<endl;cout<<"Finish["<<i+1<<"]:";cout<<Finish[i]<<"";cout<<endl;t[i]=0;}}}}else{return0;}if(h(Finish,n))return1;//系統(tǒng)處于平安狀態(tài)elsereturn0;//系統(tǒng)處于不平安狀態(tài)}voidr(intFinish[N],intWork[M],intAvailable[M],intNeed[N][M],intAllocation[N][M],intMax[N][M],intn,intm){intRequest[M];charb;inti,j,k;cout<<"\n要申請資源,請按'y'或'Y',否則按'n'或'N'"<<endl;//是立即進行平安性檢查,還是進行資源申請cin>>b;if(b!='y'&&b!='Y'){if(safe(Finish,Work,Need,Allocation,n,m)){cout<<"此時刻系統(tǒng)平安!\n";}else{cout<<"此時刻系統(tǒng)不平安!\n";}}else{{cout<<"\n請輸入申請資源的進程編號(1,2,…,"<<n<<"):"<<endl;cin>>k;while(k>n){cout<<"您輸入了錯誤的進程號,請核查后重新輸入:"<<endl;cin>>k;}cout<<"\n請輸入進程p("<<k<<")申請各類資源的數(shù)量:"<<endl;for(j=0;j<m;j++)cin>>Request[j];if(p(Request,Need,m,k)){if(q(Request,Available,m)){for(j=0;j<m;j++){Available[j]=Available[j]-Request[j];Allocation[k-1][j]=Allocation[k-1][j]+Request[j];Need[k-1][j]=Need[k-1][j]-Request[j];Work[j]=Available[j];}cout<<"試分配!"<<endl;cout<<"各種資源可利用的數(shù)量Available["<<m<<"]:"<<endl;for(j=0;j<m;j++){cout<<Available[j]<<"";}cout<<endl;cout<<"\n已分配資源Allocation["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Allocation[i][j]<<"";}cout<<endl;}cout<<"\n最大需求矩陣Max["<<n<<"]["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Max[i][j]<<"";}cout<<endl;}cout<<"\n需求矩陣Need["<<n<<"]["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Need[i][j]<<"";}cout<<endl;}if(safe(Finish,Work,Need,Allocation,n,m)){//判斷當前狀態(tài)的平安性cout<<"系統(tǒng)處于平安狀態(tài)!";cout<<"\n申請資源成功!!!"<<endl;}else{cout<<"\n當前狀態(tài)不平安!!!!!!";//恢復數(shù)據(jù)for(j=0;j<m;j++){Available[j]=Available[j]+Request[j];Allocation[k-1][j]=Allocation[k-1][j]-Request[j];Need[k-1][j]=Need[k-1][j]+Request[j];Work[j]=Available[j];}for(i=0;i<n;i++)Finish[i]=0;cout<<"\n恢復數(shù)據(jù):"<<endl;//顯示輸入各數(shù)組的值cout<<"各種資源可利用的數(shù)量Available["<<m<<"]:"<<endl;for(j=0;j<m;j++){cout<<Available[j]<<"";}cout<<endl;cout<<"\n已分配資源Allocation["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Allocation[i][j]<<"";}cout<<endl;}cout<<"\n最大需求矩陣Max["<<n<<"]["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Max[i][j]<<"";}cout<<endl;}cout<<"\n需求矩陣Need["<<n<<"]["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Need[i][j]<<"";}cout<<endl;}cout<<"系統(tǒng)中尚無足夠的資源滿足進程p["<<k<<"]的申請,p["<<k<<"]必須等待!"<<endl;}}elsecout<<"系統(tǒng)中尚無足夠的資源滿足進程p["<<k<<"]的申請,p["<<k<<"]必須等待!"<<endl;}elsecout<<"出錯,進程所需要的資源數(shù)目已超過它所宣布的最大值!"<<endl;}}}voidmain(){cout<<"---------------------------------------------------------"<<endl;cout<<"------------------模擬銀行家算法------------------"<<endl;cout<<"---------------------------------------------------------"<<endl;cout<<"--------------------江之風海之韻-------------------"<<endl;cout<<"------------------------QuQu-------------------------"<<endl;cout<<"---------------------------------------------------------"<<endl;intAvailable[M];intMax[N][M];intAllocation[N][M];intNeed[N][M];intWork[M];intFinish[N];inti,j,n,m;//定義全局變量cout<<"輸入進程的數(shù)量:";//從此開始輸入有關數(shù)據(jù)cin>>n;cout<<"輸入資源種類數(shù):";cin>>m;cout<<"輸入各種資源可利用的數(shù)量Available["<<m<<"]:"<<endl;for(j=0;j<m;j++){cin>>Available[j];Work[j]=Available[j];//初始化Work[j]}cout<<"\n輸入各進程對各類資源的最大需求數(shù)Max["<<n<<"]["<<m<<"]:"<<endl;

溫馨提示

  • 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

提交評論