




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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)者。通過本實(shí)驗(yàn)使學(xué)生能進(jìn)一步理解死鎖的概念,并能選擇一個(gè)算法來(lái)避免死鎖。二、實(shí)驗(yàn)題目系統(tǒng)中有m個(gè)同類資源被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)資源和釋放資源。編寫一個(gè)程序,現(xiàn)銀行家算法,當(dāng)系統(tǒng)將資源分配給某一進(jìn)程而不會(huì)死鎖時(shí),就分配之。否則,推遲分配,并顯示適當(dāng)?shù)男畔ⅰH?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;//資源類數(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;//用戶選擇的進(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)還沒有足夠的可用資源量滿足進(jìn)程需要"<<endl<<endl;elsebreak;}}cout<<"輸入成功,您輸入的是:"<<Request[0]<<""<<Request[1]<<""<<Request[2]<<endl;cout<<"開始執(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è)類資源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類資源或者B類資源是否通過安全檢測(cè),C類資源沒有經(jīng)過這里}if(l==5)//一共有三類資源ABC,一條進(jìn)程下面的安全性檢測(cè)只檢測(cè)了A類。如果A類通過了,那么還要判斷B類,C類。否則不用{for(i=0;i<t;i++)Finish[l]=false;//A類通過了,就把B類的Finish重置為false,C類類推}i=s;//s傳遞進(jìn)來(lái)賦給i,s是用戶輸入的進(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;//從用戶選擇的進(jìn)程開始對(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<<"已通過安全性測(cè)試!"<<endl;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年倫理學(xué)基礎(chǔ)考試試題及答案
- 溫泉酒店設(shè)計(jì)方案
- 2025年計(jì)算機(jī)視覺技術(shù)職稱考試試題及答案
- 喜茶空間設(shè)計(jì)說(shuō)明
- 金華市婺舟航運(yùn)開發(fā)建設(shè)有限公司招聘筆試題庫(kù)2025
- 柴油機(jī)設(shè)計(jì)答辯
- ICD-10消化系統(tǒng)疾病編碼解析
- 新生兒病區(qū)護(hù)理
- T/SSR 704-2021房間空調(diào)器長(zhǎng)期運(yùn)行能效衰減率計(jì)算方法
- 新生兒特殊喂養(yǎng)實(shí)施指南
- 成人中心靜脈導(dǎo)管(CVC)堵塞風(fēng)險(xiǎn)評(píng)估及預(yù)防-2024團(tuán)體標(biāo)準(zhǔn)
- 《護(hù)理學(xué)基礎(chǔ)》-15-標(biāo)本采集
- 感情計(jì)算在辦公環(huán)境中的應(yīng)用
- 2024年四川教師招聘教育公共基礎(chǔ)知識(shí)真題與答案
- 解讀國(guó)有企業(yè)管理人員處分條例課件
- 2024消防維保投標(biāo)文件模板
- HG∕T 3792-2014 交聯(lián)型氟樹脂涂料
- 門診部職責(zé)及管理制度(3篇)
- 安裝門窗免責(zé)協(xié)議書
- QB/T 8011-2024 咸鴨蛋黃(正式版)
- 2024醫(yī)療機(jī)構(gòu)重大事故隱患判定清單(試行)學(xué)習(xí)課件
評(píng)論
0/150
提交評(píng)論