




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 吞咽障礙的康復(fù)治療思路
- 適老化智能家居環(huán)境適應(yīng)性-全面剖析
- 音樂(lè)與全球化-跨文化視角下的音樂(lè)變遷-全面剖析
- 2024年泰州市第四人民醫(yī)院招聘筆試真題
- 2024-2025學(xué)年四川省成都市第四十九中學(xué)九年級(jí)上學(xué)期10月月考英語(yǔ)試卷
- 2024年河南航空港投資集團(tuán)有限公司招聘筆試真題
- 電商平臺(tái)競(jìng)爭(zhēng)格局-全面剖析
- 基因治療的概念及發(fā)展
- 肌原纖維功能增強(qiáng)新方法-全面剖析
- 針對(duì)深度學(xué)習(xí)模型的對(duì)抗訓(xùn)練-全面剖析
- GB/T 6433-2025飼料中粗脂肪的測(cè)定
- 服務(wù)消費(fèi)券發(fā)放的精細(xì)化實(shí)施方案
- 2019版 浙科版 高中生物學(xué) 必修2 遺傳與進(jìn)化《第二章 染色體與遺傳》大單元整體教學(xué)設(shè)計(jì)2020課標(biāo)
- 【MOOC期末】《介入放射學(xué)》(東南大學(xué))中國(guó)大學(xué)慕課答案
- DB50T 771-2017 地下管線(xiàn)探測(cè)技術(shù)規(guī)范
- 防災(zāi)減災(zāi)培訓(xùn)(安全行業(yè)講座培訓(xùn)課件)
- 2024年《BIM技術(shù)介紹》課件
- 情景教學(xué)法在小學(xué)英語(yǔ)課堂中的有效運(yùn)用研究(開(kāi)題報(bào)告)
- 花鍵計(jì)算公式DIN5480
- 《荷塘月色》課件+2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文必修上冊(cè)
- 軟著著作權(quán)單位與個(gè)人合作開(kāi)發(fā)協(xié)議書(shū)(2篇)
評(píng)論
0/150
提交評(píng)論