版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
試驗(yàn)?zāi)繕?biāo)銀行家算法是防止死鎖的一個(gè)重要措施。通過編寫一個(gè)模擬動(dòng)態(tài)資源分派的銀行家算法程序,深入深入了解死鎖、產(chǎn)生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握防止死鎖的詳細(xì)實(shí)行措施二、試驗(yàn)要求依照銀行家算法的基本思想,編寫和調(diào)試一個(gè)實(shí)現(xiàn)動(dòng)態(tài)資源分派的模擬程序,并能夠有效地預(yù)防和防止死鎖的發(fā)生。設(shè)計(jì)思想闡明設(shè)計(jì)銀行家算法是為了防止死鎖三、試驗(yàn)措施內(nèi)容算法設(shè)計(jì)思緒銀行家算法又稱“資源分派拒絕”法,其基本思想是,系統(tǒng)中的所有進(jìn)程放入進(jìn)程集合,在安全狀態(tài)下系統(tǒng)受到進(jìn)程的祈求后試探性的把資源分派給他,目前系統(tǒng)將剩余的資源和進(jìn)程集合中其他進(jìn)程還需要的資源數(shù)做比較,找出剩余資源能滿足最大需求量的進(jìn)程,從而確保進(jìn)程運(yùn)行完成后還回所有資源。這時(shí)系統(tǒng)將該進(jìn)程從進(jìn)程集合中將其清除。此時(shí)系統(tǒng)中的資源就更多了。重復(fù)執(zhí)行上面的步驟,最后檢查進(jìn)程的集合為空時(shí)就表白本次申請(qǐng)可行,系統(tǒng)處在安全狀態(tài),能夠?qū)嵭斜敬畏峙?,否則,只要進(jìn)程集合非空,系統(tǒng)便處在不安全狀態(tài),本次不能分派給他。請(qǐng)進(jìn)程等候算法流程圖算法中用到的數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的闡明1.可利用資源向量AVAILABLE。這是一個(gè)含有M個(gè)元素的數(shù)組,其中的每一個(gè)元素代表一類可利用的資源數(shù)目,其3初始值是系統(tǒng)中所配備的該類所有可哦那個(gè)資源的數(shù)目,其數(shù)值隨該類資源的分派和回收而動(dòng)態(tài)的變化。2.最大需求矩陣MAX。這是一個(gè)M*N的矩陣,它定義了系統(tǒng)中N個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì)M類資源的最大需求。3.分派矩陣ALLOCATION。這也是一個(gè)M*N的矩陣,它定義了系統(tǒng)中每一類資源目前已分派給每一進(jìn)程的資源數(shù)。4.需求矩陣NEED。這也是一個(gè)M*N的矩陣,用以表示每一個(gè)進(jìn)程尚需的各類資源數(shù)。5.NEED[R,W]=MAX[R,W]-ALLOCATION[R,W]重要的常量變量#defineW10//最大進(jìn)程數(shù)W=10#defineR20//最大資源總數(shù)R=20intAVAILABLE[R];//可利用資源向量intMAX[W][R];//最大需求矩陣intALLOCATION[W][R];//分派矩陣intNEED[W][R];//需求矩陣intRequest[R];//進(jìn)程祈求向量voidchangdata(intk);//進(jìn)程祈求資源數(shù)據(jù)變化intchksec(ints);//系統(tǒng)安全性的檢測(cè)重要模塊voidinputdata()voidshowdata()voidchangdata(intk)voidrestoredata(intk)intchksec(ints)intchkmax(ints)四、試驗(yàn)代碼#include<string.h>#include<iostream.h>#defineFALSE0#defineTRUE1#defineW10//最大進(jìn)程數(shù)W=10#defineR20//最大資源總數(shù)R=20intM;intN;intALL_RESOURCE[W];intAVAILABLE[R];//可利用資源向量intMAX[W][R];//最大需求矩陣intALLOCATION[W][R];//分派矩陣intNEED[W][R];//需求矩陣intRequest[R];//進(jìn)程祈求向量voidinputdata();//數(shù)據(jù)輸入voidshowdata();//數(shù)據(jù)顯示voidchangdata(intk);//進(jìn)程祈求資源數(shù)據(jù)變化voidrestoredata(intk);//數(shù)據(jù)恢復(fù)intchksec(ints);//系統(tǒng)安全性的檢測(cè)intchkmax(ints);//檢測(cè)最大需求voidbank();//檢測(cè)分派的資源是否合理voidmain(){inti,j;inputdata();for(i=0;i<M;i++){ j=chksec(i); if(j==0)break;}if(i>=M)cout<<"錯(cuò)誤提示:經(jīng)安全性檢查發(fā)覺,系統(tǒng)的初始狀態(tài)不安全?。?!\n"<<endl;else{cout<<"提示:經(jīng)安全性檢查發(fā)覺,系統(tǒng)的初始狀態(tài)安全!"<<endl; bank();}}voidinputdata(){ inti=0,j=0,p;cout<<"請(qǐng)輸入總進(jìn)程數(shù):"<<endl;do{ cin>>M; if(M>W)cout<<endl<<"總進(jìn)程數(shù)超出了程序允許的最大進(jìn)程數(shù),請(qǐng)重新輸入:"<<endl;}while(M>W);cout<<endl;cout<<"請(qǐng)輸入資源的種類數(shù):"<<endl;do{cin>>N; if(N>R) cout<<endl<<"資源的種類數(shù)超出了程序允許的最大資源種類數(shù),請(qǐng)重新輸入:"<<endl;}while(N>R);cout<<endl;cout<<"請(qǐng)依次輸入各類資源的總數(shù)量,即設(shè)置向量all_resource:"<<endl;for(i=0;i<N;i++) cin>>ALL_RESOURCE[i];cout<<endl;cout<<"請(qǐng)依次輸入各進(jìn)程所需要的最大資源數(shù)量,即設(shè)置矩陣max:"<<endl;for(i=0;i<M;i++){for(j=0;j<N;j++){do{cin>>MAX[i][j];if(MAX[i][j]>ALL_RESOURCE[j])cout<<endl<<"該最大資源數(shù)量超出了申明的該資源總數(shù),請(qǐng)重新輸入:"<<endl;}while(MAX[i][j]>ALL_RESOURCE[j]);}}cout<<endl;cout<<"請(qǐng)依次輸入各進(jìn)程已經(jīng)占據(jù)的各類資源數(shù)量,即設(shè)置矩陣allocation:"<<endl;for(i=0;i<M;i++){ for(j=0;j<N;j++) { do{ cin>>ALLOCATION[i][j]; if(ALLOCATION[i][j]>MAX[i][j]) cout<<endl<<"已占有的資源數(shù)量超出了申明的最大資源數(shù)量,請(qǐng)重新輸入:"<<endl; }while(ALLOCATION[i][j]>MAX[i][j]); }}cout<<endl;for(i=0;i<M;i++) for(j=0;j<N;j++) NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];for(j=0;j<N;j++){ p=ALL_RESOURCE[j]; for(i=0;i<M;i++) {p=p-ALLOCATION[i][j];AVAILABLE[j]=p;if(AVAILABLE[j]<0) AVAILABLE[j]=0; }}}voidshowdata(){inti,j;cout<<"各種資源的總數(shù)量,即向量all_resource為:"<<endl;cout<<"";for(j=0;j<N;j++) cout<<"資源"<<j<<":"<<ALL_RESOURCE[j];cout<<endl<<endl;cout<<"目前系統(tǒng)中各類資源的可用數(shù)量,即向量available為:"<<endl;cout<<"";for(j=0;j<N;j++) cout<<"資源"<<j<<":"<<AVAILABLE[j];cout<<endl<<endl;cout<<"各進(jìn)程還需要的資源數(shù)量,即矩陣need為:"<<endl<<endl;for(i=0;i<M;i++){cout<<"進(jìn)程P"<<i<<":";for(j=0;j<N;j++) cout<<NEED[i][j]<<"";cout<<endl;}cout<<endl;cout<<"各進(jìn)程已經(jīng)得到的資源量,即矩陣allocation為:"<<endl<<endl;for(i=0;i<M;i++){ cout<<"進(jìn)程P"<<i<<":"; for(j=0;j<N;j++) cout<<ALLOCATION[i][j]<<""; cout<<endl;}cout<<endl;}voidchangdata(intk){ intj; for(j=0;j<N;j++) { AVAILABLE[j]=AVAILABLE[j]-Request[j]; ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j]; NEED[k][j]=NEED[k][j]-Request[j]; }}voidrestoredata(intk){ intj; for(j=0;j<N;j++) { AVAILABLE[j]=AVAILABLE[j]+Request[j]; ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j]; NEED[k][j]=NEED[k][j]+Request[j]; }}intchksec(ints){ intWORK,FINISH[W];inti,j,k=0;for(i=0;i<M;i++) FINISH[i]=FALSE;for(j=0;j<N;j++) { WORK=AVAILABLE[j];i=s;do { if(FINISH[i]==FALSE&&NEED[i][j]<=WORK) { WORK=WORK+ALLOCATION[i][j]; FINISH[i]=TRUE; i=0; }else { i++; } }while(i<M);for(i=0;i<M;i++) if(FINISH[i]==FALSE) { return1; } }return0;}intchkmax(ints){intj,flag=0; for(j=0;j<N;j++) { if(MAX[s][j]==ALLOCATION[s][j]) {flag=1; AVAILABLE[j]=AVAILABLE[j]+MAX[s][j]; MAX[s][j]=0; } } returnflag;}c{inti=0,j=0;charflag='Y';while(flag=='Y'||flag=='y') {i=-1;while(i<0||i>=M) {cout<<"請(qǐng)輸入需申請(qǐng)資源的進(jìn)程號(hào)(從P0到P"<<M-1<<",否則重新輸入!):";cout<<"p"; cin>>i;if(i<0||i>=M) cout<<"輸入的進(jìn)程號(hào)不存在,重新輸入!"<<endl; } cout<<"請(qǐng)輸入進(jìn)程P"<<i<<"申請(qǐng)的資源數(shù):"<<endl; for(j=0;j<N;j++) { cout<<"資源"<<j<<":"; cin>>Request[j];if(Request[j]>NEED[i][j]) {cout<<"進(jìn)程P"<<i<<"申請(qǐng)的資源數(shù)不小于進(jìn)程P"<<i<<"還需要"<<j<<"類資源的資源量!"; cout<<"申請(qǐng)不合理,犯錯(cuò)!請(qǐng)重新選擇!"<<endl<<endl; flag='N'; break; } else { if(Request[j]>AVAILABLE[j]) {cout<<"進(jìn)程P"<<i<<"申請(qǐng)的資源數(shù)不小于系統(tǒng)可用"<<j<<"類資源的資源量!"; cout<<"申請(qǐng)不合理,犯錯(cuò)!請(qǐng)重新選擇!"<<endl<<endl; flag='N'; break; } } } if(flag=='Y'||flag=='y') { changdata(i); if(chksec(i)) {cout<<endl; cout<<"該分派會(huì)導(dǎo)致系統(tǒng)不
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林藝術(shù)學(xué)院《音樂簡(jiǎn)史與名作鑒賞》2021-2022學(xué)年第一學(xué)期期末試卷
- 吉林藝術(shù)學(xué)院《色彩Ⅱ》2021-2022學(xué)年第一學(xué)期期末試卷
- 集資房爛尾轉(zhuǎn)讓協(xié)議書范文模板
- 2022年北京市公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 體育場(chǎng)地收購協(xié)議書范文范本
- 吉林師范大學(xué)《水污染控制工程實(shí)驗(yàn)》2021-2022學(xué)年期末試卷
- 吉林師范大學(xué)《模擬法庭》2021-2022學(xué)年第一學(xué)期期末試卷
- 吉林師范大學(xué)《繪畫基礎(chǔ)-素描頭像》2021-2022學(xué)年第一學(xué)期期末試卷
- 農(nóng)業(yè)銀行與物流公司金融服務(wù)協(xié)議書
- 卒中患者家庭護(hù)理培訓(xùn)制度
- 2022年小學(xué)美術(shù)新課程標(biāo)準(zhǔn)考試模擬試題及部分答案(共五套)
- 超星爾雅學(xué)習(xí)通《人人學(xué)點(diǎn)營銷學(xué)》章節(jié)測(cè)試答案
- YY 0600.3-2007醫(yī)用呼吸機(jī)基本安全和主要性能專用要求第3部分:急救和轉(zhuǎn)運(yùn)用呼吸機(jī)
- 屋面及防水工程、保溫工程
- GB/T 19266-2008地理標(biāo)志產(chǎn)品五常大米
- GB/T 18043-2013首飾貴金屬含量的測(cè)定X射線熒光光譜法
- FZ/T 01057.3-2007紡織纖維鑒別試驗(yàn)方法 第3部分:顯微鏡法
- 2023年10月物流英語試題及答案
- 一氧化碳中毒培訓(xùn)課件
- 勝任力模型及應(yīng)用課件
- 浙教版數(shù)學(xué)七年級(jí)上44-46代數(shù)式復(fù)習(xí)課課件
評(píng)論
0/150
提交評(píng)論