




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上銀行家算法實(shí)驗(yàn)報(bào)告【實(shí)驗(yàn)?zāi)康摹浚?)根據(jù)設(shè)計(jì)題目的要求,充分地分析和理解題目,敘述系統(tǒng)的要求,明確程序要求實(shí)現(xiàn)的功能以及限制條件。(2)明白自己需要用代碼實(shí)現(xiàn)的功能,清楚編寫每部分代碼的目的,做到有的放矢,有條理不遺漏的用代碼實(shí)現(xiàn)銀行家算法?!緦?shí)驗(yàn)要求】(1)了解和理解死鎖;(2)理解利用銀行家算法避免死鎖的原理;(3)會(huì)使用某種編程語(yǔ)言。【實(shí)驗(yàn)原理】一、安全狀態(tài)指系統(tǒng)能按照某種順序如<P1,P2,Pn>(稱為<P1,P2,Pn>序列為安全序列),為每個(gè)進(jìn)程分配所需的資源,直至最大需求,使得每個(gè)進(jìn)程都能順利完成。 二、銀行家算法假設(shè)在進(jìn)程并發(fā)執(zhí)
2、行時(shí)進(jìn)程i提出請(qǐng)求j類資源k個(gè)后,表示為Requestij=k。系統(tǒng)按下述步驟進(jìn)行安全檢查:(1)如果RequestiNeedi則繼續(xù)以下檢查,否則顯示需求申請(qǐng)超出最大需求值的錯(cuò)誤。(2)如果RequestiAvailable則繼續(xù)以下檢查,否則顯示系統(tǒng)無(wú)足夠資源,Pi阻塞等待。(3)系統(tǒng)試探著把資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值: Availablej=Availablej-Requestij; Allocationi,j=Allocationi,j+Requestij; Needi,j=Needi,j-Requestij;(4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處
3、于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程Pi,以完成本次分配;否則, 將本次的試探分配作廢,恢復(fù)原來(lái)的資源分配狀態(tài),讓進(jìn)程Pi等待。三、安全性算法(1)設(shè)置兩個(gè)向量: 工作向量Work: 它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類資源數(shù)目,它含有m個(gè)元素,在執(zhí)行安全算法開始時(shí),Work=Available; Finish: 它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成。開始時(shí)先做Finishi=false; 當(dāng)有足夠資源分配給進(jìn)程時(shí), 再令Finishi=true。(2)從進(jìn)程集合中找到一個(gè)能滿足下述條件的進(jìn)程: Finishi=false; Needi,jWorkj; 若找到, 執(zhí)行步
4、驟(3), 否則,執(zhí)行步驟(4)。(3)當(dāng)進(jìn)程Pi獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Ø Workj=Worki+Allocationi,j;Ø Finishi=true;Ø go to step 2; (4)如果所有進(jìn)程的Finishi=true都滿足, 則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)?!緦?shí)驗(yàn)步驟】參考實(shí)驗(yàn)步驟如下:(1)參考圖1-1所示流程圖編寫安全性算法。NY所有finish都為true?輸出安全序列NYN存在Finishi =false&&Needij<= Availablej初始化W
5、ork和FinishFinishi=true,Workj=Workj+ Allocationij所有進(jìn)程都找完了?Y開始 圖1-1 安全性算法流程圖輸出系統(tǒng)不安全(2)銀行家算法流程圖結(jié)束 否是申請(qǐng)失敗。以上分配作廢,恢復(fù)原來(lái)的分配狀態(tài):Availablej = Availablej + RequestijAllocationij= AllocationijRequestijNeedij = Needij+RequestijNYNYRequestij> Needij出錯(cuò)返回:return(error)Requestij> Availablej出錯(cuò)返回:(進(jìn)程阻塞)return(er
6、ror)Availablej = Availablej RequestijAllocationij= Allocationij + RequestijNeedij = Needij Requestij假定分配:輸入初始參數(shù)(資源分配及請(qǐng)求情況)開始 假定分配之后,系統(tǒng)安全嗎?申請(qǐng)成功。輸出各種數(shù)據(jù)的變化圖1-2銀行家算法流程圖(3)編寫統(tǒng)一的輸出格式。每次提出申請(qǐng)之后輸出申請(qǐng)成功與否的結(jié)果。如果成功還需要輸出變化前后的各種數(shù)據(jù),并且輸出安全序列。(4)參考圖1-2所示流程圖編寫銀行家算法。(5)編寫主函數(shù)來(lái)循環(huán)調(diào)用銀行家算法?!緟⒖即a】部分參考代碼如下:#include <iostre
7、am.h>#include <string.h>#define M 3 /資源的種類數(shù)#define N 5 /進(jìn)程的個(gè)數(shù)void output(int iMaxNM,int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN); /統(tǒng)一的輸出格式bool safety(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN);bool banker(int iAllocationNM,int iNeedNM,int iAvailableM,char cName
8、N);void main()int i,j;/當(dāng)前可用每類資源的資源數(shù)int iAvailableM=3,3,2;/系統(tǒng)中N個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì)M類資源的最大需求int iMaxNM=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;/iNeedNM每一個(gè)進(jìn)程尚需的各類資源數(shù)/iAllocationNM為系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)int iNeedNM,iAllocationNM=0,1,1,2,0,0,3,0,2,2,1,1,0,0,2;/進(jìn)程名char cNameN='a','b','c','d'
9、,'e'bool bExitFlag=true; /退出標(biāo)記char ch; /接收選擇是否繼續(xù)提出申請(qǐng)時(shí)傳進(jìn)來(lái)的值bool bSafe; /存放安全與否的標(biāo)志/計(jì)算iNeedNM的值for(i=0;i<N;i+)for(j=0;j<M;j+)iNeedij=iMaxij-iAllocationij;/輸出初始值output(iMax,iAllocation,iNeed,iAvailable,cName);/判斷當(dāng)前狀態(tài)是否安全bSafe=safety(iAllocation,iNeed,iAvailable,cName);/是否繼續(xù)提出申請(qǐng)while(bExitF
10、lag)cout<<"n"<<"繼續(xù)提出申請(qǐng)?ny為是;n為否。n"cin>>ch;switch(ch) case 'y': /cout<<"調(diào)用銀行家算法"bSafe=banker(iAllocation,iNeed,iAvailable,cName);if (bSafe) /安全,則輸出變化后的數(shù)據(jù)output(iMax,iAllocation,iNeed,iAvailable,cName);break; case 'n': cout<<&
11、quot;退出。n" bExitFlag=false; break; default: cout<<"輸入有誤,請(qǐng)重新輸入:n"/輸出void output(int iMaxNM,int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)int i,j;cout<<"nt Max tAllocationt Need t Available"<<endl;cout<<"tA B CtA B CtA B Ct A B C"&
12、lt;<endl;for(i=0;i<N;i+)cout<<cNamei<<"t"for(j=0;j<M;j+)cout<<iMaxij<<" "cout<<"t"for(j=0;j<M;j+)cout<<iAllocationij<<" "cout<<"t"for(j=0;j<M;j+)cout<<iNeedij<<" "co
13、ut<<"t"cout<<" "/Available只需要輸出一次if (i=0)for(j=0;j<M;j+)cout<<iAvailablej<<" "cout<<endl;/安全性算法,進(jìn)行安全性檢查;安全返回true,并且輸出安全序列,不安全返回false,并輸出不安全的提示;bool safety(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)int i,j,flag,x=0;char nu
14、m5;int WorkM;bool FinishN; /定義基本變量 for(j=0;j<3;j+)Workj=iAvailablej; /將iAvailable的值賦給Work for(i=0;i<5;i+) /將Finish全部置為False Finishi=false;while(true) /執(zhí)行無(wú)限循環(huán),滿足條件時(shí)跳出 flag=0; /每次循環(huán)開始時(shí)將記錄本次循環(huán)中是否有使有滿足條件iAllocation的標(biāo)志置為0,若為0表示不存在,若不為0表示存在 for(i=0;i<5;i+) /執(zhí)行循環(huán),看有沒有滿足條件的iAllocationif(Finishi=fal
15、se&&Work0>=iNeedi0&&Work1>=iNeedi1&&Work2>=iNeedi2) for(j=0;j<3;j+)Workj+= iAllocationij ; /Workj+= Workj+iAllocationij Finishi=true; /將 Finish置true flag+; /標(biāo)志加1 numx+=cNamei; /將該序列名賦給數(shù)組num if(flag=0)cout<<"無(wú)安全序列" /標(biāo)志為0,證明已無(wú)滿足條件iAllocation ,退出循環(huán),返回
16、falsereturn false;if(Finish0=true&&Finish1=true&&Finish2=true&&Finish3=true&&Finish4=true) /若所有Finish置為true,輸出安全數(shù)列,返回True cout<<"n"cout<<"安全序列為:"for(x=0;x<5;x+)cout<<numx<<" "cout<<"n"return true
17、; return true;/安全返回true,不安全返回falsebool banker(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)int iMaxNM=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;int t,i,Request3,check_13;char x; /定義變量 cout<<"請(qǐng)輸入進(jìn)程名:" /輸入進(jìn)程名 cin>>x;if(x='a')i=0; if(x='b')i=1; if(x='c')i=
18、2; if(x='d')i=3; if(x='e')i=4; cout<<"請(qǐng)輸入各資源數(shù)量:" /輸入變量名 for(t=0;t<3;t+)cin>>Requestt;for(t=0;t<3;t+) /檢查數(shù)值 check_1t=Requestt+iAllocationit;for(t=0;t<3;t+) if(iMaxit-check_1t)<0) cout<<"n資源申請(qǐng)超過(guò)最大需求量!n" return false; for(t=0;t<3;t+) /檢查數(shù)值 if(iAvailablet-Requestt)<0) cout<<"n不能滿足進(jìn)程!n" return
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 節(jié)約食品協(xié)議書
- 幕墻板安裝合同協(xié)議書
- 能源買賣協(xié)議書
- 船舶拖帶協(xié)議書
- 老人獨(dú)居協(xié)議書
- 無(wú)條件終止合同協(xié)議書
- 幼兒園醫(yī)教聯(lián)合協(xié)議書
- 培訓(xùn)班合伙合同協(xié)議書
- 快遞打包倉(cāng)轉(zhuǎn)讓協(xié)議書
- 自愿情人協(xié)議書
- 2025至2030年中國(guó)全身螺旋CT掃描系統(tǒng)行業(yè)投資前景及策略咨詢研究報(bào)告
- 1、人教部編版二年級(jí)下冊(cè)語(yǔ)文看拼音寫詞語(yǔ)(一類生字和書后詞語(yǔ))
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)下學(xué)期期末試卷(含答案)
- 增材制造在虛擬現(xiàn)實(shí)輔助機(jī)械制造中的應(yīng)用-洞察闡釋
- 重慶金太陽(yáng)2025屆高三5月聯(lián)考英語(yǔ)及答案
- 醫(yī)院新建門急診醫(yī)技綜合樓工程施工組織設(shè)計(jì)
- 外籍人員雇傭合同(中英文對(duì)照)6篇
- 《不可或缺的醫(yī)療保障:課件中的健康險(xiǎn)》
- 財(cái)產(chǎn)申報(bào)表-被執(zhí)行人用
- 云南郵政面試題及答案
- 委托聘請(qǐng)演員合同協(xié)議
評(píng)論
0/150
提交評(píng)論