版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)五 銀行家算法一、實(shí)驗(yàn)?zāi)康暮鸵?理解死鎖概念,銀行家算法及安全檢測(cè)算法。在Linux操作系統(tǒng)下用C+進(jìn)行編程。利用C+設(shè)計(jì)實(shí)現(xiàn)銀行家算法的基本過(guò)程。驗(yàn)證銀行家算法對(duì)于避免死鎖的作用。二、實(shí)驗(yàn)方法內(nèi)容算法設(shè)計(jì)思路 1設(shè)計(jì)進(jìn)程對(duì)各類資源最大申請(qǐng)表示及初值確定。 2設(shè)定系統(tǒng)提供資源初始狀況。 3設(shè)定每次某個(gè)進(jìn)程對(duì)各類資源的申請(qǐng)表示。4編制程序,依據(jù)銀行家算法,決定其申請(qǐng)是否得到滿足。 算法流程圖如下:開(kāi) 始輸入資源數(shù)m,及各類資源總數(shù),初始化Available向量輸入進(jìn)程數(shù)n,i=1輸入進(jìn)程i的最大需求向量max。inMax資源總數(shù)提示錯(cuò)誤重新輸入i 加1任選一進(jìn)程作為當(dāng)前進(jìn)程輸入該進(jìn)程的資源
2、請(qǐng)求量Request 調(diào)用銀行家算法,及安全性算法,完成分配,或給出提示該進(jìn)程的Need向量0該進(jìn)程已運(yùn)行結(jié)束Need矩陣為0所有進(jìn)程運(yùn)行都結(jié)束ENDNYYNNY初始化Need矩陣NY 算法中用到的數(shù)據(jù)結(jié)構(gòu)說(shuō)明 1. 可利用資源向量Available ,它是一個(gè)含有m個(gè)元素的數(shù)組,其中的每一個(gè)元素代表一類可利用的資源的數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源數(shù)目。其數(shù)值隨該類資源的分配和回收而動(dòng)態(tài)地改變。如果Availablej=k,標(biāo)是系統(tǒng)中現(xiàn)有Rj類資源k個(gè)。 2. 最大需求矩陣P,這是一個(gè)n×m的矩陣,它定義了系統(tǒng)中n個(gè)進(jìn)程中的每一個(gè)進(jìn)程對(duì)m類資源的最大需求。如果P(i,
3、j)=k,表示進(jìn)程Pi需要Rj類資源的最大數(shù)目為k。 3. 分配矩陣Allocation,這是一個(gè)n×m的矩陣,它定義了系統(tǒng)中的每類資源當(dāng)前一分配到每一個(gè)進(jìn)程的資源數(shù)。如果Allocation(i,j)=k,表示進(jìn)程Pi當(dāng)前已經(jīng)分到Rj類資源的數(shù)目為k。Allocation i表示進(jìn)程Pi的分配向量,有矩陣Allocation的第i行構(gòu)成。 4. 需求矩陣Need,這是一個(gè)n×m的矩陣,用以表示每個(gè)進(jìn)程還需要的各類資源的數(shù)目。如果Need(i,j)=k,表示進(jìn)程Pi還需要Rj類資源k個(gè),才能完成其任務(wù)。Need i表示進(jìn)程i的需求向量,由矩陣Need的第i行構(gòu)成。上述三個(gè)矩
4、陣間存在關(guān)系:Need(i,j)=P(i,j) Allocation(i,j); 5. Request i 是進(jìn)程Pi 的請(qǐng)求向量。Request i (j)=k表示進(jìn)程Pi請(qǐng)求分配Rj類資源k個(gè)。當(dāng)Pi發(fā)出資源請(qǐng)求后,系統(tǒng)按下述步驟進(jìn)行檢查: .如果Request i Need,則轉(zhuǎn)向步驟2;否則出錯(cuò)。 如果Request i R,則轉(zhuǎn)向步驟3;否則,表示系統(tǒng)中尚無(wú)足夠的資源滿足Pi的申請(qǐng),Pi必須等待。 系統(tǒng)試探性地把資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:R = R Request iAllocation I = Allocation I + Request iNeed I =
5、Need i Request i 系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。如果安全才正式將資源分配給進(jìn)程Pi,以完成本次分配;否則,將試探分配作廢,恢復(fù)原來(lái)的資源分配狀態(tài),讓進(jìn)程Pi等待6. 主要的常量變量#define W 10 /最大進(jìn)程數(shù)W=10#define R 20 /最大資源總數(shù)R=20 int AVAILABLER; /可利用資源向量int MAXWR; /最大需求矩陣int ALLOCATIONWR; /分配矩陣int NEEDWR; /需求矩陣int RequestR; /進(jìn)程請(qǐng)求向量 void changdata(int k); /進(jìn)程請(qǐng)求資源數(shù)據(jù)改變
6、int chksec(int s); /系統(tǒng)安全性的檢測(cè)7.主要模塊(函數(shù)和數(shù)據(jù))void inputdata(); /數(shù)據(jù)輸入 void showdata(); /數(shù)據(jù)顯示 void changdata(int k); /進(jìn)程請(qǐng)求資源數(shù)據(jù)改變void restoredata(int k); /數(shù)據(jù)恢復(fù)int chksec(int s); /系統(tǒng)安全性的檢測(cè)int chkmax(int s); /檢測(cè)最大需求 void bank(); /檢測(cè)分配的資源是否合理 四、實(shí)驗(yàn)代碼#include <string>#include <iostream>using namespa
7、ce std;#define FALSE 0 #define TRUE 1 #define W 10 /最大進(jìn)程數(shù)W=10#define R 20 /最大資源總數(shù)R=20int M ; int N ; int ALL_RESOURCEW; int AVAILABLER; /可利用資源向量int MAXWR; /最大需求矩陣int ALLOCATIONWR; /分配矩陣int NEEDWR; /需求矩陣int RequestR; /進(jìn)程請(qǐng)求向量 void inputdata(); /數(shù)據(jù)輸入 void showdata(); /數(shù)據(jù)顯示 void changdata(int k); /進(jìn)程請(qǐng)求資
8、源數(shù)據(jù)改變void restoredata(int k); /數(shù)據(jù)恢復(fù)int chksec(int s); /系統(tǒng)安全性的檢測(cè)int chkmax(int s); /檢測(cè)最大需求 void bank(); /檢測(cè)分配的資源是否合理 void main() int i,j; inputdata(); for(i=0;i<M;i+) j=chksec(i); if (j=0) break; if (i>=M) cout<<"錯(cuò)誤提示:經(jīng)安全性檢查發(fā)現(xiàn),系統(tǒng)的初始狀態(tài)不安全!n"<<endl; else cout<<"提示
9、:經(jīng)安全性檢查發(fā)現(xiàn),系統(tǒng)的初始狀態(tài)安全!"<<endl; bank(); void inputdata()int i=0,j=0,p; cout<<"請(qǐng)輸入總進(jìn)程數(shù): " do cin>>M; if (M>W) cout<<endl<<"總進(jìn)程數(shù)超過(guò)了程序允許的最大進(jìn)程數(shù),請(qǐng)重新輸入:" while (M>W); cout<<endl; cout<<"請(qǐng)輸入資源的種類數(shù): " do cin>>N; if (N>R
10、)cout<<endl<<"資源的種類數(shù)超過(guò)了程序允許的最大資源種類數(shù),請(qǐng)重新輸入: " while (N>R); cout<<endl; cout<<"請(qǐng)依次輸入各類資源的總數(shù)量,即設(shè)置向量all_resource: " for(i=0;i<N;i+) cin>>ALL_RESOURCEi; cout<<endl; cout<<"請(qǐng)依次輸入各進(jìn)程所需要的最大資源數(shù)量,即設(shè)置矩陣max: "<<endl; for (i=0;i&
11、lt;M;i+) for (j=0;j<N;j+) do cin>>MAXij; if (MAXij>ALL_RESOURCEj) cout<<endl<<"該最大資源數(shù)量超過(guò)了聲明的該資源總數(shù),請(qǐng)重新輸入: "<<endl; while (MAXij>ALL_RESOURCEj); cout<<endl; cout<<"請(qǐng)依次輸入各進(jìn)程已經(jīng)占據(jù)的各類資源數(shù)量,即設(shè)置矩陣allocation: "<<endl; for (i=0;i<M;i+) f
12、or (j=0;j<N;j+) docin>>ALLOCATIONij; if (ALLOCATIONij>MAXij)cout<<endl<<"已占有的資源數(shù)量超過(guò)了聲明的最大資源數(shù)量,請(qǐng)重新輸入:"<<endl; while (ALLOCATIONij>MAXij); cout<<endl; for (i=0;i<M;i+) for(j=0;j<N;j+) NEEDij=MAXij-ALLOCATIONij; for (j=0;j<N;j+) p=ALL_RESOURCEj;
13、 for (i=0;i<M;i+) p=p-ALLOCATIONij; AVAILABLEj=p; if(AVAILABLEj<0) AVAILABLEj=0; void showdata() int i,j; cout<<"各種資源的總數(shù)量,即向量all_resource為:"<<endl; cout<<" " for (j=0;j<N;j+) cout<<" 資源"<<j<<": "<<ALL_RESOURCE
14、j; cout<<endl<<endl; cout<<"當(dāng)前系統(tǒng)中各類資源的可用數(shù)量,即向量available為:"<<endl; cout<<" " for (j=0;j<N;j+) cout<<" 資源"<<j<<": "<<AVAILABLEj; cout<<endl<<endl; cout<<"各進(jìn)程還需要的資源數(shù)量,即矩陣need為:"&
15、lt;<endl<<endl; for (i=0;i<M;i+) cout<<"進(jìn)程P"<<i<<": " for (j=0;j<N;j+) cout<<NEEDij<<" " cout<<endl; cout<<endl; cout<<"各進(jìn)程已經(jīng)得到的資源量,即矩陣allocation為: "<<endl<<endl; for (i=0;i<M;i+) co
16、ut<<"進(jìn)程P"<<i<<": " for (j=0;j<N;j+) cout<<ALLOCATIONij<<" " cout<<endl; cout<<endl; void changdata(int k) int j; for (j=0;j<N;j+) AVAILABLEj=AVAILABLEj-Requestj; ALLOCATIONkj=ALLOCATIONkj+Requestj; NEEDkj=NEEDkj-Requestj;v
17、oid restoredata(int k) int j; for (j=0;j<N;j+) AVAILABLEj=AVAILABLEj+Requestj; ALLOCATIONkj=ALLOCATIONkj-Requestj; NEEDkj=NEEDkj+Requestj;int chksec(int s) int WORK,FINISHW; int i,j,k=0; for(i=0;i<M;i+)FINISHi=FALSE; for(j=0;j<N;j+) WORK=AVAILABLEj; i=s; doif(FINISHi=FALSE&&NEEDij&l
18、t;=WORK)WORK=WORK+ALLOCATIONij; FINISHi=TRUE; i=0; else i+; while(i<M); for(i=0;i<M;i+) if(FINISHi=FALSE) return 1; return 0; int chkmax(int s) int j,flag=0;for(j=0;j<N;j+) if (MAXsj=ALLOCATIONsj) flag=1;AVAILABLEj=AVAILABLEj+MAXsj;MAXsj=0;return flag;void bank() int i=0,j=0; char flag='
19、;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&qu
20、ot;<<i<<"申請(qǐng)的資源數(shù):"<<endl; for (j=0;j<N;j+) cout<<" 資源"<<j<<": " cin>>Requestj; if(Requestj>NEEDij) cout<<"進(jìn)程P"<<i<<"申請(qǐng)的資源數(shù)大于進(jìn)程P"<<i<<"還需要"<<j<<"類資
21、源的資源量!" cout<<"申請(qǐng)不合理,出錯(cuò)!請(qǐng)重新選擇!"<<endl<<endl; flag='N' break; else if(Requestj>AVAILABLEj) cout<<"進(jìn)程P"<<i<<"申請(qǐng)的資源數(shù)大于系統(tǒng)可用"<<j<<"類資源的資源量!" cout<<"申請(qǐng)不合理,出錯(cuò)!請(qǐng)重新選擇!"<<endl<<e
22、ndl; flag='N' break; if(flag='Y'|flag='y') changdata(i); if(chksec(i) cout<<endl; cout<<"該分配會(huì)導(dǎo)致系統(tǒng)不安全! 本次資源申請(qǐng)不成功,不予分配!"<<endl; cout<<endl; restoredata(i); else cout<<endl; cout<<"經(jīng)安全性檢查,系統(tǒng)安全,本次分配成功,且資源分配狀況如下所示:"<<endl; cout<<endl;showdata(); if(chkmax(i)cout<<"在資源分配成功之后,由于該進(jìn)程所需的某些資源的最大需求量已經(jīng)滿足,"<<endl;cout<<"因此在進(jìn)程結(jié)束后系統(tǒng)將回收這些資源!"<<endl; cout<&
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 師德先進(jìn)學(xué)校事跡材料7篇
- 北京市海淀區(qū)2024?2025學(xué)年高二上學(xué)期10月階段考試數(shù)學(xué)試題含答案
- 《教育心理學(xué)》讀后感6篇
- 湖北省鄂州市(2024年-2025年小學(xué)五年級(jí)語(yǔ)文)統(tǒng)編版摸底考試(下學(xué)期)試卷及答案
- 2024年導(dǎo)線剝皮機(jī)項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 2023年輔助功能檢測(cè)系統(tǒng)資金籌措計(jì)劃書(shū)
- 市政道路路基土方、石方施工規(guī)范編制說(shuō)明
- 七年級(jí)歷史上冊(cè)教案集
- 文化產(chǎn)業(yè)示范園區(qū)及示范基地創(chuàng)建管理工作辦法
- 貴州省貴陽(yáng)市部分校聯(lián)盟2024-2025學(xué)年八年級(jí)上學(xué)期期中聯(lián)考物理試題(無(wú)答案)
- 二年級(jí)上冊(cè)《生態(tài) 生命 安全》教案
- 綿陽(yáng)市高中2022級(jí)(2025屆)高三第一次診斷性考試(一診)地理試卷
- 2024-2025學(xué)年七年級(jí)上學(xué)期數(shù)學(xué)期中模擬試卷(蘇科版2024)(含答案解析)
- 軍事理論(2024年版)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 海爾智家財(cái)務(wù)報(bào)表分析報(bào)告
- NB-T32036-2017光伏發(fā)電工程達(dá)標(biāo)投產(chǎn)驗(yàn)收規(guī)程
- 2024年急性胰腺炎急診診治專家共識(shí)解讀課件
- 2024年連南瑤族自治縣綠連林業(yè)發(fā)展有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 大學(xué)生國(guó)家安全教育知到章節(jié)答案智慧樹(shù)2023年廣西科技大學(xué)
- GA 667-2020防爆炸透明材料
- 高中選課走班選科建議-課件
評(píng)論
0/150
提交評(píng)論