操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告_第1頁(yè)
操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告_第2頁(yè)
操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告_第3頁(yè)
操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告_第4頁(yè)
操作系統(tǒng)銀行家算法實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)四死鎖實(shí)驗(yàn)?zāi)康漠?dāng)系統(tǒng)的總資源數(shù)m小于或等于所有進(jìn)程對(duì)對(duì)資源的最大需求時(shí),就可能產(chǎn)生死鎖。死鎖會(huì)引起計(jì)算機(jī)系統(tǒng)的癱瘓。銀行家算法是在實(shí)現(xiàn)資源分配時(shí)避免死鎖的一個(gè)著名算法,該算法是在能確保系統(tǒng)處于安全狀態(tài)時(shí)才把資源分配給申請(qǐng)者。通過(guò)本實(shí)驗(yàn)使學(xué)生能進(jìn)一步理解死鎖的概念,并能選擇一個(gè)算法來(lái)避免死鎖。二、實(shí)驗(yàn)題目系統(tǒng)中有m個(gè)同類(lèi)資源被n個(gè)進(jìn)程共享,每個(gè)進(jìn)程對(duì)資源的最大需求數(shù)分別為S1,S2,…,Sn,且Max(Si)<=m,(i=1,2,…n)。進(jìn)程可以動(dòng)態(tài)地申請(qǐng)資源和釋放資源。編寫(xiě)一個(gè)程序,現(xiàn)銀行家算法,當(dāng)系統(tǒng)將資源分配給某一進(jìn)程而不會(huì)死鎖時(shí),就分配之。否則,推遲分配,并顯示適當(dāng)?shù)男畔?。三、?shù)據(jù)結(jié)構(gòu)主要數(shù)據(jù)結(jié)構(gòu):Structaa{voidPrint();//用于打印輸出表格的函數(shù)voidInput();//用于輸入的函數(shù)voidtryfenpei(inti);//試分配函數(shù)voidrefenpei(inti);//恢復(fù)數(shù)據(jù)函數(shù)voidchecksafe(ints);//安全檢測(cè)函數(shù)};四、銀行家算法的流程圖五、源代碼#include<iostream.h>#include"stdio.h"constunsignedshortc=3;//資源類(lèi)數(shù)constunsignedshortt=5;//進(jìn)程數(shù)voidPrint();//用于打印輸出表格的函數(shù)voidInput();//用于輸入的函數(shù)voidtryfenpei(inti);//試分配函數(shù)voidrefenpei(inti);//恢復(fù)數(shù)據(jù)函數(shù)voidchecksafe(ints);//安全檢測(cè)函數(shù)//定義初始化數(shù)組intAvailable[c],Max[t][c],Allocation[t][c],Need[t][c],Request[c];intin;//用戶(hù)選擇的進(jìn)程號(hào)intmain(intargc,char*argv[]){inti;charch='Y';cout<<"初始化數(shù)據(jù)如下:"<<endl;Input();//輸入相關(guān)數(shù)據(jù)函數(shù)Print();//打印輸出相關(guān)數(shù)據(jù)表函數(shù)cout<<"初始化完成!"<<endl<<endl;do{if(ch=='Y'||ch=='y'){cout<<"歡迎進(jìn)入實(shí)驗(yàn)!"<<endl;cout<<"請(qǐng)輸入發(fā)起請(qǐng)求的進(jìn)程號(hào)(0-4):";while(cin>>in){if(in<0||in>4){cout<<"不存在該進(jìn)程,請(qǐng)重新輸入"<<endl;}elsebreak;};cout<<"您輸入的是"<<"p["<<in<<"]"<<"進(jìn)程"<<endl;cout<<"該進(jìn)程需求量為:";for(i=0;i<c;i++)cout<<Need[in][i]<<"";cout<<endl;cout<<"請(qǐng)輸入請(qǐng)求資源的數(shù)目:";//輸入格式為Xfor(i=0;i<c;i++){while(cin>>Request[i]){if(Request[i]<0)cout<<"錯(cuò)誤!輸入的數(shù)字無(wú)效."<<endl;elseif(Request[i]>Need[in][i])cout<<"錯(cuò)誤!超出進(jìn)程需求量"<<endl<<endl;if(Request[i]>Available[i])cout<<"錯(cuò)誤!系統(tǒng)還沒(méi)有足夠的可用資源量滿(mǎn)足進(jìn)程需要"<<endl<<endl;elsebreak;}}cout<<"輸入成功,您輸入的是:"<<Request[0]<<""<<Request[1]<<""<<Request[2]<<endl;cout<<"開(kāi)始執(zhí)行銀行家算法,下面進(jìn)行試分配"<<endl;tryfenpei(in);//分配函數(shù)cout<<"試分配完成!"<<endl;cout<<"進(jìn)入安全性檢測(cè)..."<<endl;checksafe(in);//安全性檢測(cè)函數(shù)cout<<"需要繼續(xù)實(shí)驗(yàn)嗎?(y-繼續(xù)n終止)";}elseif(ch=='N'||ch=='n'){cout<<"感謝您的使用,祝您愉快!"<<endl<<"正在退出..."<<endl;break;}elsecout<<"輸入無(wú)效!請(qǐng)重新輸入."<<endl;}while(cin>>ch);return0;}voidPrint(){inti,j;cout<<"進(jìn)程個(gè)數(shù):"<<t<<"資源個(gè)數(shù):"<<c<<endl;cout<<endl;cout<<"|*****|***********|***********|**********|***********|"<<endl;cout<<"|****|最大需求矩陣|已分配矩陣-|-需求矩陣-可用資源向量|"<<endl;cout<<"|資源|Max|Allocation|Need|Available|"<<endl;cout<<"||ABC|ABC|ABC|ABC|"<<endl;cout<<"|進(jìn)程|||||"<<endl;cout<<"|*****|**********|************|**********|***********|"<<endl;for(i=0;i<5;i++){cout<<"|p"<<i<<"|";for(j=0;j<3;j++){cout<<Max[i][j]<<"";}cout<<"|";for(j=0;j<3;j++){cout<<""<<Allocation[i][j];}cout<<"|";for(j=0;j<3;j++){cout<<""<<Need[i][j];}cout<<"|";if(i==0){for(j=0;j<3;j++){cout<<""<<Available[j];}cout<<"|";}if(i>0){cout<<"|";}cout<<endl;}cout<<"|*****|**********|************|**********|***********|"<<endl;}//輸入函數(shù)voidInput(){for(intj=0;j<c;j++){cout<<"請(qǐng)輸入Available["<<j<<"]:";while(cin>>Available[j]){if(Available[j]<0)cout<<"輸入數(shù)字無(wú)效,請(qǐng)重新輸入"<<endl;elsebreak;};}for(intk=1;k<4;k++)//其他三個(gè)屬性和一次打印輸出表{for(intl=0;l<t;l++)//五個(gè)進(jìn)程循環(huán)輸入{for(intm=0;m<c;m++)//三個(gè)類(lèi)資源ABC循環(huán)輸入{if(k==1&&m<t){cout<<"請(qǐng)輸入Max["<<l<<"]["<<m<<"]:";while(cin>>Max[l][m]){if(Max[l][m]<0)cout<<"輸入數(shù)字無(wú)效,請(qǐng)重新輸入"<<endl;elsebreak;};}if(k==2&&m<t){cout<<"請(qǐng)輸入Allocation["<<l<<"]["<<m<<"]:";while(cin>>Allocation[l][m])if(Allocation[l][m]<0)cout<<"輸入數(shù)字無(wú)效,請(qǐng)重新輸入"<<endl;elsebreak;}if(k==3&&m<t)Need[l][m]=Max[l][m]-Allocation[l][m];}}}}//輸入函數(shù)結(jié)束//試分配函數(shù)voidtryfenpei(inti){for(intf=0;f<c;f++){Available[f]=Available[f]-Request[f];Allocation[i][f]=Allocation[i][f]+Request[f];Need[i][f]=Need[i][f]-Request[f];}}//試分配函數(shù)結(jié)束//恢復(fù)數(shù)據(jù)函數(shù)voidrefenpei(inti){for(intf=0;f<c;f++){Available[f]=Available[f]+Request[f];Allocation[i][f]=Allocation[i][f]-Request[f];Need[i][f]=Need[i][f]+Request[f];}}//恢復(fù)數(shù)據(jù)函數(shù)結(jié)束//安全檢測(cè)函數(shù)voidchecksafe(ints){intWork,flag,temp[t],i,j,l=0,k=0;boolFinish[t];for(i=0;i<t;i++)Finish[i]=false;for(j=0;j<3;j++){Work=Available[j];//cout<<"Work="<<Work<<endl;for(i=0;i<t;i++){if(Finish[i]==true)l++;//用l是否達(dá)到5來(lái)判斷這條進(jìn)程A類(lèi)資源或者B類(lèi)資源是否通過(guò)安全檢測(cè),C類(lèi)資源沒(méi)有經(jīng)過(guò)這里}if(l==5)//一共有三類(lèi)資源ABC,一條進(jìn)程下面的安全性檢測(cè)只檢測(cè)了A類(lèi)。如果A類(lèi)通過(guò)了,那么還要判斷B類(lèi),C類(lèi)。否則不用{for(i=0;i<t;i++)Finish[l]=false;//A類(lèi)通過(guò)了,就把B類(lèi)的Finish重置為false,C類(lèi)類(lèi)推}i=s;//s傳遞進(jìn)來(lái)賦給i,s是用戶(hù)輸入的進(jìn)程號(hào)(有主函數(shù)里的in傳遞進(jìn)來(lái))while(i<t){if(Finish[i]==false&&Need[i][j]<=Work){Work=Work+Allocation[i][j];Finish[i]=true;temp[k]=i;//cout<<"temp="<<temp[k]<<endl;k++;i=(i+1)%t;//從用戶(hù)選擇的進(jìn)程開(kāi)始對(duì)每個(gè)進(jìn)程都要檢測(cè)}elsei=(i++)%t;}}for(i=0;i<t;i++){if(Finish[i]==false){flag=1;//標(biāo)記}}if(flag==1){cout<<"系統(tǒng)不安全!本次資源申請(qǐng)不成功!"<<endl;cout<<"正在恢復(fù)原來(lái)的數(shù)據(jù)"<<endl; refenpei(in);cout<<"恢復(fù)數(shù)據(jù)成功!正在打印輸出"<<endl;Print();}else{cout<<"找到一個(gè)安全序列:";for(i=0;i<t;i++)cout<<"P"<<temp[i]<<"--->"; cout<<endl<<"已通過(guò)安全性測(cè)試!"<<endl;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論