銀行家算法設(shè)計(jì)實(shí)現(xiàn)報(bào)告_第1頁(yè)
銀行家算法設(shè)計(jì)實(shí)現(xiàn)報(bào)告_第2頁(yè)
銀行家算法設(shè)計(jì)實(shí)現(xiàn)報(bào)告_第3頁(yè)
銀行家算法設(shè)計(jì)實(shí)現(xiàn)報(bào)告_第4頁(yè)
銀行家算法設(shè)計(jì)實(shí)現(xiàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)習(xí)目:行家法設(shè)實(shí)現(xiàn)【需求規(guī)格說(shuō)明】對(duì)I/O系統(tǒng)的死鎖資的問(wèn)題的解決主要的方法是銀行家算法,單種資的銀行家算法和多種資源的銀行家算法的解決思路一致,要求設(shè)計(jì)實(shí)現(xiàn)種銀行家算法,并要所涉及的模型最少更夠滿足如下要求:程序能夠根據(jù)進(jìn)程的請(qǐng)求進(jìn)行判斷,給出系統(tǒng)是否安全的的示,如果安全,要求夠顯示一組進(jìn)程執(zhí)行的安全序列;能夠根據(jù)需要,顯示當(dāng)前系統(tǒng)中各種資源的分配情況;【算法設(shè)計(jì)】(1)設(shè)計(jì)思想首先初始化多總資源的總量All[n],多個(gè)進(jìn)程所需的這些源的總量Max[i][j],和當(dāng)前已分配的資源數(shù)Allocation[i][j],得到這些進(jìn)程還需資源量Need[i][j],以及每種資源的剩余量Avaliable[n]等檢查一個(gè)狀態(tài)是否安全:查找每個(gè)進(jìn)程中未被滿足的資源數(shù)是否小于或等于Avaliable[j],若,則apply++當(dāng)該進(jìn)程所有資源都被檢查完后,若apply==源種類,說(shuō)明它可以得所需的所有資源并運(yùn)行結(jié)果,并將該進(jìn)程的finish[i]=true表示改進(jìn)程運(yùn)行完,將該進(jìn)程獲得的資源加到Avaliable上,表示為目前可用資源數(shù)。最后將i=-1,示重新執(zhí)行上訴步驟,直到所有進(jìn)程都被標(biāo)記為結(jié)束。若apply!=資源種類,說(shuō)明它不獲得所需的資源,不能運(yùn)行,則堅(jiān)持下一個(gè)進(jìn)程。并重新執(zhí)行上訴步驟,直到所有進(jìn)程都被標(biāo)記為結(jié)束或發(fā)生死鎖,即找不滿足的進(jìn)程。若所有進(jìn)程都被標(biāo)記為結(jié)束,則表示該狀態(tài)是安全的;若發(fā)死鎖,則說(shuō)明該狀態(tài)不安全。IsSafe()for循環(huán)判斷每個(gè)進(jìn)程是否能分配仍需的每種資源判斷每個(gè)進(jìn)程是否都標(biāo)IsSafe()for循環(huán)判斷每個(gè)進(jìn)程是否能分配仍需的每種資源判斷每個(gè)進(jìn)程是否都標(biāo)記結(jié)束則輸出安全的進(jìn)程執(zhí)行序列該狀態(tài)不安全,發(fā)生死鎖將該進(jìn)程標(biāo)記為運(yùn)行結(jié)束,并將其資源釋放出該進(jìn)程不能得到所需的所有資源,判斷下一個(gè)進(jìn)程(2)設(shè)計(jì)表示下圖為銀行家算法中判斷某一狀態(tài)是否為安全的算法模塊結(jié)圖:否

是是該狀態(tài)為安全,去(3)詳細(xì)設(shè)計(jì)表示下圖為IsSave(函數(shù)主要的算法流程:apply++;j++Apply=0;Avaliable[m]=Avaliable[m]+Allocation[i][m];Finish[i]=True;Returnapply++;j++Apply=0;Avaliable[m]=Avaliable[m]+Allocation[i][m];Finish[i]=True;Return-1Return1否否i<M&&Finish[i]==False是j<N&&Need[i][j]<=Avaliable[j]lse是apply==N是I<M&&Finish[i]==Falsee是【調(diào)試報(bào)告】主要算法是判斷該狀態(tài)是否為安全狀態(tài),因此,在查找每個(gè)程中未被滿足的資源是否小于或等于Avaliable[j]時(shí)首先是要判斷Finish[i]==False是為真,當(dāng)該進(jìn)程已經(jīng)運(yùn)行結(jié)束就不需要再執(zhí)行for循環(huán)內(nèi)的判斷。當(dāng)有一個(gè)進(jìn)程能分配所需資源而被運(yùn)行后,需要標(biāo)記該進(jìn)程結(jié)束,即finish[i]=true且需要把該進(jìn)程的資源釋放出來(lái)。當(dāng)這些完成后,需要注意將=-1,因?yàn)榇藭r(shí)要重新查找每一個(gè)進(jìn)程,而不是簡(jiǎn)單的執(zhí)行下一個(gè)循環(huán)(會(huì)出現(xiàn)問(wèn)題整個(gè)代碼都將數(shù)組的大小暫定為100因?yàn)橐话阗Y源及進(jìn)程不會(huì)超過(guò)100,且不能太大和太小?!居脩羰謨?cè)】由于只是簡(jiǎn)單的win32序,加ctrl+F5即可運(yùn)行。其中需要按照提示輸入資源種類、每種資源的最大數(shù)量、進(jìn)數(shù)量、及每個(gè)進(jìn)程需各種資源的總量、和已分配的資源數(shù)量,由這些數(shù)據(jù)進(jìn)行初化變量,繼而調(diào)用showdata()可以顯示資源總量、當(dāng)前每種資源的剩余量、每個(gè)進(jìn)程所需每種資的總量的矩陣、已分配每種資源的數(shù)量的矩陣、和每個(gè)進(jìn)程還需每種資源量的矩陣。后調(diào)用IsSave()來(lái)判斷該狀態(tài)是否處于安全狀態(tài)?!靖戒洝恐饕鷮?shí)現(xiàn):判斷該狀態(tài)是否為安全狀態(tài)IsSave():intIsSafe()//安性算法{inti,j,k=0,m,apply,Finish[100]={0};for(i=0;i<M;i++)//查找每個(gè)進(jìn)程{if(Finish[i]==False)//判斷該進(jìn)程是否已經(jīng)運(yùn)行結(jié)束{apply=0;//能足該進(jìn)程所需的資源的種類for(j=0;j<N;j++)//對(duì)該進(jìn)程的每個(gè)資源進(jìn)行判斷{if(Need[i][j]<=Avaliable[j])//是有可用的資源滿足{apply++;//一種資源可以被滿足}}if(apply==N){//如果每種資源都能被滿足,則該進(jìn)程被執(zhí)行for(m=0;m<N;m++)Avaliable[m]=Avaliable[m]+Allocation[i][m];//將進(jìn)程占用資源釋放,變?yōu)榭捎觅Y源Finish[i]=True;//記該進(jìn)程已經(jīng)運(yùn)行結(jié)束temp[k]=i;//存安全序列i=-1;//從第一個(gè)進(jìn)程開始,重新檢查每一個(gè)進(jìn)程k++;}}}for(i=0;i<M;i++){if(Finish[i]==False){//逐一判斷每個(gè)進(jìn)程最后是否都被執(zhí)行結(jié)束,若有則該狀態(tài)不安全cout<<"系不安全"<<endl;//不功系統(tǒng)不安全return-1;}}//否則系統(tǒng)全cout<<"系是安全的!"<<endl;//如果安全,輸出成功cout<<"分的序列:";for(i=0;i<M;i++){//輸出運(yùn)行進(jìn)程數(shù)組cout<<temp[i];if(i<M-1)cout<<"->";}cout<<endl;return0;}輸出此時(shí)的狀態(tài)showdata(:voidshowdata()//顯示資源矩陣{inti,j;cout<<"系的所有資源的總數(shù)量[All]:"<<endl;for(i=0;i<N;i++)cout<<name[i]<<"";cout<<endl;for(j=0;j<N;j++)cout<<All[j]<<"";//輸出分配資源cout<<endl;cout<<"系目前可用的資源[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<<"MaxAllocationNeed"<<endl;cout<<"進(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

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論