死鎖的避免實(shí)驗(yàn)報(bào)告_第1頁(yè)
死鎖的避免實(shí)驗(yàn)報(bào)告_第2頁(yè)
死鎖的避免實(shí)驗(yàn)報(bào)告_第3頁(yè)
死鎖的避免實(shí)驗(yàn)報(bào)告_第4頁(yè)
死鎖的避免實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩8頁(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)介

信息科學(xué)與技術(shù)學(xué)院實(shí)驗(yàn)報(bào)告課程名稱(chēng):操作系統(tǒng)實(shí)驗(yàn)項(xiàng)目:死鎖的避免實(shí)驗(yàn)地點(diǎn):指導(dǎo)教師:日期:實(shí)驗(yàn)類(lèi)型:(驗(yàn)證性實(shí)驗(yàn)綜合性實(shí)驗(yàn)設(shè)計(jì)性實(shí)驗(yàn))專(zhuān)業(yè):計(jì)算機(jī)服務(wù)外包班級(jí):外143姓名:周鵬飛學(xué)號(hào):1414104033一、實(shí)驗(yàn)?zāi)康募耙罅私馑梨i避免的概念,掌握避免死鎖的算法二、實(shí)驗(yàn)儀器、設(shè)備或軟件VC++6.0三、實(shí)驗(yàn)內(nèi)容及原理開(kāi)始輸入資源類(lèi)型分別輸入各資源總數(shù)系統(tǒng)是否安全Y輸入發(fā)出請(qǐng)求進(jìn)程號(hào)輸入該進(jìn)程請(qǐng)求資源的類(lèi)型號(hào)NErrorRequest>Need?YN資源不夠進(jìn)系統(tǒng)是否安全入等待Y是否繼續(xù)N結(jié)束銀行家算法流程圖:銀行家算法是死鎖處理中較為經(jīng)典的一種避免死鎖的方法,它一般分為單資源銀行家算法和多資源銀行家算法,所謂單資源銀行家算法是指只有一種可用資源,多銀行家算法是指由多種可用資源,它主要是通過(guò)合理的分配資源使得系統(tǒng)不產(chǎn)生死鎖的思想來(lái)完成。1.Available是一個(gè)長(zhǎng)度為m的向量,它表示每類(lèi)資源可用的數(shù)量,Available【j】=k表示rj類(lèi)資源可用的數(shù)量為k。個(gè)n*m矩陣,它多可用申請(qǐng)k個(gè)rj類(lèi)資源單位。3,Allocation是一個(gè)n*m矩陣,它到k個(gè)rj類(lèi)資源。個(gè)n*m矩陣,它需k個(gè)rj類(lèi)資源其任務(wù)。顯然Need2.Max是一表示每個(gè)進(jìn)程對(duì)資源的最大需求,Max【i,j】=k,表示進(jìn)程之表示當(dāng)前分給每個(gè)進(jìn)程的資源數(shù)目。Allocation【i,j】=k,表示進(jìn)程當(dāng)前分4.Need是一表示每個(gè)進(jìn)程還缺少多少資源。Need【i,j】=k,表示進(jìn)程尚j】-Allocation【i,j】。之后,系統(tǒng)就會(huì)尋找安全序才能完成【i,j】=Max【i,當(dāng)輸入進(jìn)程數(shù)與資源數(shù),以及各進(jìn)程所需的資源和已分配資源列,若能找到一個(gè)安全序列,則結(jié)果表明當(dāng)前系統(tǒng)安全,若找不到則當(dāng)前系統(tǒng)不安全。假設(shè)進(jìn)程P提出請(qǐng)求Request[i],則銀行家算法按如下步驟進(jìn)行判斷:1)如果Request[i]<=Need[i],則轉(zhuǎn)向2);否則出錯(cuò)。2)如果Request[i]<=Available[i],則轉(zhuǎn)向3);否則出錯(cuò)。3)系統(tǒng)試探分配相關(guān)資源,修改相關(guān)數(shù)據(jù):Available[i]=Available[i]-Request[i];Allocation[i]=Allocation[i]+Request[i];Need[i]=Need[i]-Request[i];4)系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探性分配資源作廢,系統(tǒng)恢復(fù)原狀,進(jìn)程進(jìn)入等待狀態(tài)。4.1.2安全檢測(cè)函數(shù)(check)1)設(shè)置兩個(gè)向量work和finish:work=available,表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)各類(lèi)資源數(shù)目;finish否有足夠的資源分配給進(jìn)程,使之完成。開(kāi)始時(shí)先做finish;當(dāng)有足夠資源分配時(shí),再令finish【i】:=true。2)從進(jìn)程集合中找到一個(gè)嫩滿(mǎn)足下述條件的進(jìn)程:行所需的表示系統(tǒng)是【i】:=false給進(jìn)程a:finish【i】=false;b:need【i】【j】<=work[j];若找到,執(zhí)行(3),否則,執(zhí)行(4)。3):當(dāng)進(jìn)程i獲得資源后,可順利執(zhí)行,直到完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Work【j】:=work【j】+allocation[i,j];Finish[i]:=true;A[v++]=I;Gotostep2;4):如果所有進(jìn)程的finish【i】=true都滿(mǎn)足,則表示系統(tǒng)處于安全狀態(tài),輸出安全

序列,否則系統(tǒng)處于不安全狀態(tài)。四、實(shí)驗(yàn)步驟(或過(guò)程)#include<iostream.h>#include<string.h>#include<stdio.h>#defineFalse0#defineTrue1intMax[100][100]={0};//各進(jìn)程所需各類(lèi)資源的最大需求intAvaliable[100]={0};//系統(tǒng)可用資源charname[100]={0};//資源的名稱(chēng)系統(tǒng)已分配資源intAllocation[100][100]={0};//intNeed[100][100]={0};//還需要資源intRequest[100]={0};//請(qǐng)求資源向量inttemp[100]={0};//存放安全序列intWork[100]={0};//存放系統(tǒng)可提供資源intM=100;//作業(yè)的最大數(shù)為100intN=100;//資源的最大數(shù)為100voidshowdata()//顯示資源矩陣{inti,j;cout<<"系統(tǒng)目前可用的資源[Avaliable]:"<<endl;for(i=0;i<N;i++)cout<<name[i]<<"";cout<<endl;for(j=0;j<N;j++)cout<<Avaliable[j]<<"";//輸出分配資源cout<<endl;cout<<"MaxAllocationcout<<"進(jìn)程名";for(j=0;j<3;j++){for(i=0;i<N;i++)cout<<name[i]<<"";cout<<"";}

cout<<endl;for(i=0;i<M;i++){cout<<""<<i<<"";for(j=0;j<N;j++)cout<<Max[i][j]<<"";cout<<"";for(j=0;j<N;j++)cout<<Allocation[i][j]<<"";cout<<"";for(j=0;j<N;j++)cout<<Need[i][j]<<"";cout<<endl;}}intchangdata(inti)//進(jìn)行資源分配{intj;for(j=0;j<M;j++){Avaliable[j]=Avaliable[j]-Request[j];Allocation[i][j]=Allocation[i][j]+RequestNeed[i][j]=Need[i][j]-Request[j];}return1;}intsafe()//安全性算法{inti,k=0,m,apply,Finish[100]={0};intj;intflag=0;Work[0]=Avaliable[0];Work[1]=Avaliable[1];Work[2]=Avaliable[2];for(i=0;i<M;i++){apply=0;for(j=0;j<N;j++){if(Finish[i]==False&&Need[i][j]<=Work[j]){apply++;if(apply==N){for(m=0;m<N;m++)

Work[m]=Work[m]+Allocation[i][m];//變分配數(shù)Finish[i]=True;temp[k]=i;i=-1;k++;flag++;}}}}for(i=0;i<M;i++){if(Finish[i]==False){cout<<系統(tǒng)不安全"<<endl;//不成功系統(tǒng)不安全return-1;}}cout<<"系統(tǒng)是安全的!"<<endl;//如果安全,輸出成功cout<<"分配的序列:";for(i=0;i<M;i++){//輸出運(yùn)行進(jìn)程數(shù)組cout<<temp[i];if(i<M-1)cout<<"->";}cout<<endl;return0;}voidshare()//利用銀行家算法對(duì)申請(qǐng)資源對(duì)進(jìn)行判定{charch;inti=0,j=0;ch='y';cout<<"請(qǐng)輸入要求分配的資源進(jìn)程號(hào)(0-"<<M-1<<"):";cin>>i;//輸入須申請(qǐng)的資源號(hào)cout<<"請(qǐng)輸入進(jìn)程"<<i<<"申請(qǐng)的資源:"<<endl;for(j=0;j<N;j++){cout<<name[j]<<":";cin>>Request[j];//輸入需要申請(qǐng)的資源}for(j=0;j<N;j++){if(Request[j]>Need[i][j])//判斷申請(qǐng)是否大于需求,若大于則出錯(cuò)

{cout<進(jìn)程"<<"i<<"申請(qǐng)的資源大于它需要的資源";cout<<"分配不合理,不予分配!"<<endl;ch='n';break;}else{if(Request[j]>Avaliable[j])//判斷申請(qǐng)是否大于當(dāng)前資源,若大于則{//出錯(cuò)cout進(jìn)程"<<i"<<"申請(qǐng)的資源大于系統(tǒng)現(xiàn)在可利用的資源";cout<<"分配出錯(cuò),不予分配!"<<endl;ch='n';break;}}}if(ch=='y'){changdata(i);//根據(jù)進(jìn)程需求量變換資源showdata();//根據(jù)進(jìn)程需求量顯示變換后的資源safe();//根據(jù)進(jìn)程需求量進(jìn)行銀行家算法判斷}}voidaddresources(){//添加資源intn,flag;cout<<"請(qǐng)輸入需要添加資源種類(lèi)的數(shù)量:";cin>>n;flag=N;N=N+n;for(inti=0;i<n;i++){cout<<"名稱(chēng):";cin>>name[flag];cout<<"數(shù)量:";cin>>Avaliable[flag++];}showdata();safe();}voiddelresources(){//刪除資源charming;inti,flag=1;

cout<<"請(qǐng)輸入需要?jiǎng)h除的資源名稱(chēng):";do{cin>>ming;for(i=0;i<N;i++)if(ming==name[i]){flag=0;break;}if(i==N)cout<<"該資源名稱(chēng)不存在,請(qǐng)重新輸入:";}while(flag);for(intj=i;j<N-1;j++){name[j]=name[j+1];Avaliable[j]=Avaliable[j+1];}N=N-1;showdata();safe();}voidchangeresources(){//修改資源函數(shù)cout<<"系統(tǒng)目前可用的資源[Avaliable]:"<<endl;for(inti=0;i<N;i++)cout<<name[i]<<":"<<Avaliable[i]<<endl;cout<<"輸入系統(tǒng)可用資源[Avaliable]:"<<endl;cin>>Avaliable[0]>>Avaliable[1]>>Avaliable[2];cout<<"經(jīng)修改后的系統(tǒng)可用資源為"<<endl;for(intk=0;k<N;k++)cout<<name[k]<<":"<<Avaliable[k]<<endl;showdata();safe();}voidaddprocess(){//添加作業(yè)intflag=M;M=M+1;cout<<"請(qǐng)輸入該作業(yè)的最打需求量[Max]"<<endl;for(inti=0;i<N;i++){cout<<name[i]<<":";

cin>>Max[flag][i];Need[flag][i]=Max[flag][i]-Allocation[flag][}showdata();safe();}intmain()//主函數(shù){inti,j,number,choice,m,n,flag;charming;cout<<"*****************資源管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)*****************"<<endcout<<"請(qǐng)首先輸入系統(tǒng)可供資源種類(lèi)的數(shù)量:";cin>>n;N=n;for(i=0;i<n;i++){cout<資源"<<"i+1<<"的名稱(chēng):";cin>>ming;name[i]=ming;cout<<"資源的數(shù)量:";cin>>number;Avaliable[i]=number;}cout<<endl;cout<<"請(qǐng)輸入作業(yè)的數(shù)量:";cin>>m;M=m;cout<<"請(qǐng)輸入各進(jìn)程的最大需求量("<<m<<"*"<<n<<"矩陣)[Max]:"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++)cin>>Max[i][j];do{flag=0;cout<<"請(qǐng)輸入各進(jìn)程已經(jīng)申請(qǐng)的資源量("<<m<<"*"<<n<<"矩陣)[Allocation]:"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++){cin>>Allocation[i][j];if(Allocation[i][j]>Max[i][j])

flag=1;Need[i][j]=Max[i][j]-Allocation[i][j];}if(flag)cout<<"申請(qǐng)的資源大于最大需求量,請(qǐng)重新輸入!\n";}while(flag);showdata();//顯示各種資源safe();//while(choice){用銀行家算法判定系統(tǒng)是否安全cout<<"**************銀行家算法演示***************"<<endl;增加資源"<<endl;刪除資源"<<endl;cout<<"1:cout<<"2:cout<<"3:修改資源"<<endl;cout<<"4:分配資源"<<endl;cout<<"5:增加作業(yè)"<<endl;cout<<"0:離開(kāi)"<<endl;cout<<"************************************cout<<"請(qǐng)選擇功能號(hào):";cin>>choice;switch(choice){case1:addresources();break;case2:delresources();break;case3:changeresources();break;case4:share();break;case5:addprocess();break;case0:

溫馨提示

  • 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)論