




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
./實(shí)驗(yàn)?zāi)康你y行家算法是避免死鎖的一種重要方法。通過編寫一個模擬動態(tài)資源分配的銀行家算法程序,進(jìn)一步深入理解死鎖、產(chǎn)生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握避免死鎖的具體實(shí)施方法二、實(shí)驗(yàn)要求根據(jù)銀行家算法的基本思想,編寫和調(diào)試一個實(shí)現(xiàn)動態(tài)資源分配的模擬程序,并能夠有效地防止和避免死鎖的發(fā)生。設(shè)計(jì)思想說明設(shè)計(jì)銀行家算法是為了避免死鎖三、實(shí)驗(yàn)方法內(nèi)容算法設(shè)計(jì)思路銀行家算法又稱"資源分配拒絕"法,其基本思想是,系統(tǒng)中的所有進(jìn)程放入進(jìn)程集合,在安全狀態(tài)下系統(tǒng)受到進(jìn)程的請求后試探性的把資源分配給他,現(xiàn)在系統(tǒng)將剩下的資源和進(jìn)程集合中其他進(jìn)程還需要的資源數(shù)做比較,找出剩余資源能滿足最大需求量的進(jìn)程,從而保證進(jìn)程運(yùn)行完成后還回全部資源。這時系統(tǒng)將該進(jìn)程從進(jìn)程集合中將其清除。此時系統(tǒng)中的資源就更多了。反復(fù)執(zhí)行上面的步驟,最后檢查進(jìn)程的集合為空時就表明本次申請可行,系統(tǒng)處于安全狀態(tài),可以實(shí)施本次分配,否則,只要進(jìn)程集合非空,系統(tǒng)便處于不安全狀態(tài),本次不能分配給他。請進(jìn)程等待算法流程圖算法中用到的數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的說明1.可利用資源向量AVAILABLE。這是一個含有M個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目,其3初始值是系統(tǒng)中所配置的該類全部可哦那個資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動態(tài)的改變。2.最大需求矩陣MAX。這是一個M*N的矩陣,它定義了系統(tǒng)中N個進(jìn)程中的每一個進(jìn)程對M類資源的最大需求。3.分配矩陣ALLOCATION。這也是一個M*N的矩陣,它定義了系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)。4.需求矩陣NEED。這也是一個M*N的矩陣,用以表示每一個進(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)安全性的檢測主要模塊voidinputdata<>voidshowdata<>voidchangdata<intk>voidrestoredata<intk>intchksec<ints>intchkmax<ints>四、實(shí)驗(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)安全性的檢測intchkmax<ints>;//檢測最大需求voidbank<>;//檢測分配的資源是否合理.voidmain<>{inti,j;inputdata<>;for<i=0;i<M;i++>{ j=chksec<i>;if<j==0>break;}if<i>=M>cout<<"錯誤提示:經(jīng)安全性檢查發(fā)現(xiàn),系統(tǒng)的初始狀態(tài)不安全?。。n"<<endl;else{cout<<"提示:經(jīng)安全性檢查發(fā)現(xiàn),系統(tǒng)的初始狀態(tài)安全!"<<endl; bank<>;}}voidinputdata<>{ inti=0,j=0,p;cout<<"請輸入總進(jìn)程數(shù):"<<endl;do{ cin>>M;if<M>W>cout<<endl<<"總進(jìn)程數(shù)超過了程序允許的最大進(jìn)程數(shù),請重新輸入:"<<endl;}while<M>W>;cout<<endl;cout<<"請輸入資源的種類數(shù):"<<endl;do{cin>>N;if<N>R> cout<<endl<<"資源的種類數(shù)超過了程序允許的最大資源種類數(shù),請重新輸入:"<<endl;}while<N>R>;cout<<endl;cout<<"請依次輸入各類資源的總數(shù)量,即設(shè)置向量all_resource:"<<endl;for<i=0;i<N;i++> cin>>ALL_RESOURCE[i];cout<<endl;cout<<"請依次輸入各進(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ù),請重新輸入:"<<endl;}while<MAX[i][j]>ALL_RESOURCE[j]>;}}cout<<endl;cout<<"請依次輸入各進(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ù)量,請重新輸入:"<<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<<"當(dāng)前系統(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<<"請輸入需申請資源的進(jìn)程號〔從P0到P"<<M-1<<",否則重新輸入!:";cout<<"p"; cin>>i;if<i<0||i>=M> cout<<"輸入的進(jìn)程號不存在,重新輸入!"<<endl; } cout<<"請輸入進(jìn)程P"<<i<<"申請的資源數(shù):"<<endl;for<j=0;j<N;j++> { cout<<"資源"<<j<<":"; cin>>Request[j];if<Request[j]>NEED[i][j]> {cout<<"進(jìn)程P"<<i<<"申請的資源數(shù)大于進(jìn)程P"<<i<<"還需要"<<j<<"類資源的資源量!"; cout<<"申請不合理,出錯!請重新選擇!"<<endl<<endl; flag='N';break; }else { if<Request[j]>AVAILABLE[j]> {cout<<"進(jìn)程P"<<i<<"申請的資源數(shù)大于系統(tǒng)可用"<<j<<"類資源的資源量!"; cout<<"申請不合理,出錯!請重新選擇!"<<endl<<endl; flag='N';break; } } } if<flag=='Y'||flag=='y'> { changdata<i>;if<chksec<i>> {cout<<endl; cout<<"該分配會導(dǎo)致系統(tǒng)不安全!!!本次資源申請不成功
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 德州職業(yè)技術(shù)學(xué)院《工程翻譯》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州電子商務(wù)職業(yè)技術(shù)學(xué)院《社會查與統(tǒng)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津醫(yī)科大學(xué)臨床醫(yī)學(xué)院《大學(xué)化學(xué)下》2023-2024學(xué)年第二學(xué)期期末試卷
- 淮陰工學(xué)院《大學(xué)人文專題教育》2023-2024學(xué)年第二學(xué)期期末試卷
- 沈陽體育學(xué)院《中國法律思想史》2023-2024學(xué)年第二學(xué)期期末試卷
- 吉林農(nóng)業(yè)科技學(xué)院《游戲引擎原理及應(yīng)用二》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北職業(yè)技術(shù)學(xué)院《空間飛行器總體設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江工貿(mào)職業(yè)技術(shù)學(xué)院《非織造布設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津國土資源和房屋職業(yè)學(xué)院《咖啡茶文化與服務(wù)理論教學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 河南機(jī)電職業(yè)學(xué)院《物理化學(xué)B(限選)》2023-2024學(xué)年第二學(xué)期期末試卷
- 砂光機(jī)培訓(xùn)課件
- 米酒的制作流程
- 施工現(xiàn)場防高墜培訓(xùn)
- 船舶水下輻射噪聲指南 2025
- 2024年黑龍江哈爾濱市中考英語真題卷及答案解析
- DB31-T 1310-2021 火花探測和熄滅系統(tǒng)應(yīng)用指南
- 消防系統(tǒng)管道支架施工方案
- 北京版(一起)英語二年級下冊單詞默寫表
- 2025-2025學(xué)年牛津譯林英語七年級下冊(7B)教學(xué)計(jì)劃
- 中建抹灰工程專項(xiàng)施工方案
- 地方融資平臺債務(wù)和政府中長期支出事項(xiàng)監(jiān)測平臺操作手冊-單位
評論
0/150
提交評論