




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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)三 銀行家算法一、 實(shí)驗(yàn)內(nèi)容簡(jiǎn)要描述1 實(shí)驗(yàn)?zāi)繕?biāo):加深了解有關(guān)資源申請(qǐng)、避免死鎖等概念,并體會(huì)和了解死鎖和避免死鎖的具體實(shí)施方法。要求編寫和調(diào)試一個(gè)系統(tǒng)動(dòng)態(tài)分配資源的簡(jiǎn)單模擬程序,觀察死鎖產(chǎn)生的條件,并采用銀行家算法,有效的防止和避免死鎖的發(fā)生。2 實(shí)驗(yàn)要求:銀行家算法是避免死鎖的一種重要方法,本實(shí)驗(yàn)要求用高級(jí)語(yǔ)言編寫和調(diào)試一個(gè)簡(jiǎn)單的銀行家算法程序。用銀行家算法實(shí)現(xiàn)資源分配。設(shè)計(jì)五個(gè)進(jìn)程p0,p1,p2,p3,p4共享三類資源A,B,C的系統(tǒng),例如,A,B,C的資源數(shù)量分別為10,5,7。進(jìn)程可動(dòng)態(tài)地申請(qǐng)資源和釋放資源,系統(tǒng)按進(jìn)程的申請(qǐng)動(dòng)態(tài)地分配資源,要求程序具有
2、顯示和打印各進(jìn)程的某一個(gè)時(shí)刻的資源分配表和安全序列;顯示和打印各進(jìn)程依次要求申請(qǐng)的資源號(hào)以及為某進(jìn)程分配資源后的有關(guān)資源數(shù)據(jù)。二、 報(bào)告主要內(nèi)容1 設(shè)計(jì)思路A、 設(shè)計(jì)進(jìn)程對(duì)各在資源最大申請(qǐng)表示及初值確定。B、 設(shè)定系統(tǒng)提供資源初始狀態(tài)。C、 設(shè)定每次某個(gè)進(jìn)程對(duì)各類資源的申請(qǐng)表示。D、 編制程序,依據(jù)銀行家算法,決定其申請(qǐng)是否得到滿足。2 主要數(shù)據(jù)結(jié)構(gòu)假設(shè)有M個(gè)進(jìn)程N(yùn)類資源,則有如下數(shù)據(jù)結(jié)構(gòu):MAXM*N M個(gè)進(jìn)程對(duì)N類資源的最大需求量AVAILABLEN 系統(tǒng)可用資源數(shù)ALLOCATIONM*N M個(gè)進(jìn)程已經(jīng)得到N類資源的資源量NEEDM*N M個(gè)進(jìn)程還需要N類資源的資源量銀行家算法:設(shè)進(jìn)程I
3、提出請(qǐng)求RequestN,則銀行家算法按如下規(guī)則進(jìn)行判斷。(1)如果RequestN<=NEEDI,N,則轉(zhuǎn)(2);否則,出錯(cuò)。(2)如果RequestN<=AVAILABLE,則轉(zhuǎn)(3);否則,出錯(cuò)。(3)系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù):AVAILABLE=AVAILABLE-REQUESTALLOCATION=ALLOCATION+REQUESTNEED=NEED-REQUEST(4) 系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探險(xiǎn)性分配作廢,系統(tǒng)恢復(fù)原狀,進(jìn)程等待。 安全性檢查:(1)設(shè)置兩個(gè)工作向量WORK=AVAILABLE;FINISHM=FALSE(2)從進(jìn)程集合
4、中找到一個(gè)滿足下述條件的進(jìn)程,F(xiàn)INISHi=FALSENEED<=WORK如找到,執(zhí)行(3);否則,執(zhí)行(4)(3)設(shè)進(jìn)程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。WORK=WORK+ALLOCATIONFINISH=TRUEGO TO 2(4)如所有的進(jìn)程FinishM=true,則表示安全;否則系統(tǒng)不安全。3. 主要代碼源程序:#include <iostream>using namespace std;#define MAXPROCESS 50 /*最大進(jìn)程數(shù)*/#define MAXRESOURCE 100 /*最大資源數(shù)*/int AVAI
5、LABLEMAXRESOURCE; /*可用資源數(shù)組*/int MAXMAXPROCESSMAXRESOURCE; /*最大需求矩陣*/int ALLOCATIONMAXPROCESSMAXRESOURCE; /*分配矩陣*/int NEEDMAXPROCESSMAXRESOURCE; /*需求矩陣*/int REQUESTMAXPROCESSMAXRESOURCE; /*進(jìn)程需要資源數(shù)*/bool FINISHMAXPROCESS; /*系統(tǒng)是否有足夠的資源分配*/int pMAXPROCESS; /*記錄序列*/int m,n; /*m個(gè)進(jìn)程,n個(gè)資源*/void Init();bool
6、Safe();void Bank();int main() Init(); Safe(); Bank();void Init() /*初始化算法*/ int i,j; cout<<"請(qǐng)輸入進(jìn)程的數(shù)目:" cin>>m; cout<<"請(qǐng)輸入資源的種類:" cin>>n; cout<<"請(qǐng)輸入每個(gè)進(jìn)程最多所需的各資源數(shù),按照"<<m<<"x"<<n<<"矩陣輸入"<<endl;
7、for(i=0;i<m;i+) for(j=0;j<n;j+) cin>>MAXij; cout<<"請(qǐng)輸入每個(gè)進(jìn)程已分配的各資源數(shù),也按照"<<m<<"x"<<n<<"矩陣輸入"<<endl; for(i=0;i<m;i+) for(j=0;j<n;j+) cin>>ALLOCATIONij; NEEDij=MAXij-ALLOCATIONij; if(NEEDij<0) cout<<"
8、您輸入的第"<<i+1<<"個(gè)進(jìn)程所擁有的第"<<j+1<<"個(gè)資源數(shù)錯(cuò)誤,請(qǐng)重新輸入:"<<endl; j-; continue; cout<<"請(qǐng)輸入各個(gè)資源現(xiàn)有的數(shù)目:"<<endl; for(i=0;i<n;i+) cin>>AVAILABLEi; void Bank() /*銀行家算法*/ int i,cusneed; char again; while(1) cout<<"請(qǐng)輸入要申請(qǐng)資源的
9、進(jìn)程號(hào)(注:第個(gè)進(jìn)程號(hào)為,依次類推)"<<endl; cin>>cusneed; cout<<"請(qǐng)輸入進(jìn)程所請(qǐng)求的各資源的數(shù)量"<<endl; for(i=0;i<n;i+) cin>>REQUESTcusneedi; for(i=0;i<n;i+) if(REQUESTcusneedi>NEEDcusneedi) cout<<"您輸入的請(qǐng)求數(shù)超過進(jìn)程的需求量!請(qǐng)重新輸入!"<<endl; continue; if(REQUESTcusneed
10、i>AVAILABLEi) cout<<"您輸入的請(qǐng)求數(shù)超過系統(tǒng)有的資源數(shù)!請(qǐng)重新輸入!"<<endl; continue; for(i=0;i<n;i+) AVAILABLEi-=REQUESTcusneedi; ALLOCATIONcusneedi+=REQUESTcusneedi; NEEDcusneedi-=REQUESTcusneedi; if(Safe() cout<<"同意分配請(qǐng)求!"<<endl; else cout<<"您的請(qǐng)求被拒絕!"<
11、<endl; for(i=0;i<n;i+) AVAILABLEi+=REQUESTcusneedi; ALLOCATIONcusneedi-=REQUESTcusneedi; NEEDcusneedi+=REQUESTcusneedi; for(i=0;i<m;i+) FINISHi=false; cout<<"您還想再次請(qǐng)求分配嗎?是請(qǐng)按y/Y,否請(qǐng)按其它鍵"<<endl; cin>>again; if(again='y'|again='Y') continue; break; boo
12、l Safe() /*安全性算法*/ int i,j,k,l=0; int WorkMAXRESOURCE; /*工作數(shù)組*/ for(i=0;i<n;i+) Worki=AVAILABLEi; for(i=0;i<m;i+) FINISHi=false; for(i=0;i<m;i+) if(FINISHi=true) continue; else for(j=0;j<n;j+) if(NEEDij>Workj) break; if(j=n) FINISHi=true; for(k=0;k<n;k+) Workk+=ALLOCATIONik; pl+=i;
13、 i=-1; else continue; if(l=m) cout<<"系統(tǒng)是安全的"<<endl; cout<<"安全序列:"<<endl; for(i=0;i<l;i+) cout<<pi; if(i!=l-1) cout<<"->" cout<<""<<endl; return true; if(l>=m) cout<<"系統(tǒng)是不安全的"<<endl; return 1;實(shí)驗(yàn)結(jié)果3、 實(shí)驗(yàn)心得(實(shí)驗(yàn)中遇到的問題及解決過程、實(shí)驗(yàn)中產(chǎn)生的錯(cuò)誤及原因分析、實(shí)驗(yàn)的體會(huì)及收獲、對(duì)做好今后實(shí)驗(yàn)提出建設(shè)性建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)培訓(xùn)教學(xué)課件分享
- 企業(yè)培訓(xùn)師課件
- 時(shí)尚服裝試用及評(píng)價(jià)合同
- 餐飲連鎖企業(yè)服務(wù)員派遣與績(jī)效評(píng)估協(xié)議
- 場(chǎng)地運(yùn)營(yíng)與區(qū)域健康發(fā)展管理合同
- 餐飲業(yè)跨界合作合同范本
- 旅游業(yè)市場(chǎng)調(diào)研與旅游產(chǎn)品開發(fā)合同
- 宿舍合作方案模板
- 車輛融資租賃保險(xiǎn)代理服務(wù)合同
- 綠地衛(wèi)生清掃保潔方案
- DB4401∕T 11-2018 建筑廢棄物運(yùn)輸 車輛標(biāo)志與監(jiān)控終端、車廂規(guī)格與密閉
- 《慢性阻塞性肺疾病的診斷與治療》課件
- 衛(wèi)生院用電安全知識(shí)培訓(xùn)
- 2025年陜西精益化工有限公司招聘筆試參考題庫(kù)含答案解析
- 七八年級(jí)的英語(yǔ)單詞
- 舞臺(tái)使用合同范例
- 2024年面向社會(huì)公開招聘警務(wù)輔助人員報(bào)名信息表
- 出租屋孩子意外免責(zé)協(xié)議書
- 《地區(qū)智能電網(wǎng)調(diào)度技術(shù)支持系統(tǒng)應(yīng)用功能規(guī)范》
- 2024中國(guó)類風(fēng)濕關(guān)節(jié)炎診療指南
- 11294營(yíng)銷管理-國(guó)家開放大學(xué)2023年1月至7月期末考試真題及答案(共2套)
評(píng)論
0/150
提交評(píng)論