(完整word版)《銀行家算法的模擬實(shí)現(xiàn)》—實(shí)驗(yàn)報(bào)告_第1頁
(完整word版)《銀行家算法的模擬實(shí)現(xiàn)》—實(shí)驗(yàn)報(bào)告_第2頁
(完整word版)《銀行家算法的模擬實(shí)現(xiàn)》—實(shí)驗(yàn)報(bào)告_第3頁
(完整word版)《銀行家算法的模擬實(shí)現(xiàn)》—實(shí)驗(yàn)報(bào)告_第4頁
(完整word版)《銀行家算法的模擬實(shí)現(xiàn)》—實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、銀行家算法的模擬實(shí)現(xiàn)-實(shí)驗(yàn)報(bào)告題目:銀行家算法的模擬實(shí)現(xiàn)專業(yè):_班級(jí):組員:_指導(dǎo)老師:、實(shí)驗(yàn)?zāi)康乃梨i會(huì)引起計(jì)算機(jī)工作僵死, 因此操作系統(tǒng)中必須防止。 本實(shí)驗(yàn)的目的在于讓學(xué)生獨(dú)立 的使用高級(jí)語言編寫和調(diào)試一個(gè)系統(tǒng)動(dòng)態(tài)分配資源的簡單模擬程序, 了解死鎖產(chǎn)生的條件和原因,并采用銀行家算法有效地防止死鎖的發(fā)生,以加深對(duì)課堂上所講授的知識(shí)的理解。二、實(shí)驗(yàn)內(nèi)容模擬實(shí)現(xiàn)銀行家算法實(shí)現(xiàn)死鎖避免。要求:初始數(shù)據(jù)(如系統(tǒng)在 T0 時(shí)刻的資源分配情 況、每一種資源的總數(shù)量)從文本文件讀入,文件中給出最大需求矩陣Max 、分配矩陣Allocation ,在程序中求得需求矩陣 Need 和可利用資源向量 Availa

2、ble 。三、實(shí)驗(yàn)分析過程1、整個(gè)銀行家算法的思路。先對(duì)用戶提出的請(qǐng)求進(jìn)行合法性檢查, 再進(jìn)行預(yù)分配, 利用安全性檢查算法進(jìn)行安全性檢 查。1)進(jìn)程一開始向系統(tǒng)提出最大需求量 .2)進(jìn)程每次提出新的需求 (分期貸款 )都統(tǒng)計(jì)是否超出它事先提出的最大需求量.3)若正常 ,則判斷該進(jìn)程所需剩余剩余量 (包括本次申請(qǐng) ) 是否超出系統(tǒng)所掌握的 剩余資源量 ,若不超出 ,則分配 ,否則等待 2、算法用到的主要數(shù)據(jù)結(jié)構(gòu)和 C 語言說明。1)、可利用資源向量2)、最大需求矩陣3)、已分配矩陣4)、還需求矩陣 5)、申請(qǐng)各類資源數(shù)量 6)、工作向量INT AVAILABLEM M 為資源的類型。INT MA

3、XNM N 為進(jìn)程的數(shù)量。INT ALLOCA TIONNMINT NEEDNN int Requestx; / int Workx;0 為否,非 0 為是7)、 int Finishy; / 表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,3、銀行家算法 (主程序) (1)、系統(tǒng)初始化。輸入進(jìn)程數(shù)量,資源種類,各進(jìn)程已分配、還需求各資源數(shù)量,各資 源可用數(shù)量等(2 )、輸入用戶的請(qǐng)求三元組(I, J, K),為進(jìn)程I申請(qǐng)K個(gè)J類資源。( 3)、檢查用戶的請(qǐng)求是否小于還需求的數(shù)量,條件是 K=NEEDI,J 。如果條件不符則 提示重新輸入,即不允許索取大于需求量( 4)、檢查用戶的請(qǐng)求是否小于系統(tǒng)中的可利

4、用資源數(shù)量,條件是 K=AVALIABLEI,J 。 如果條件不符則申請(qǐng)失敗,阻塞該進(jìn)程,重新進(jìn)行進(jìn)程動(dòng)態(tài)資源申請(qǐng)(使用goto 語句)( 5)、進(jìn)行資源的預(yù)分配,語句如下: AVALIBLEIJ= A VALIBLEIJ-K ; ALLOCATIONIJ= ALLOCATIONIJ+K ; NEEDIJ=NEEDIJ-K ;6)、系統(tǒng)調(diào)用安全性檢查算法( checksafe() 函數(shù))進(jìn)行檢查,如果檢查通過,則不用回 收,否則進(jìn)行回收,進(jìn)程資源申請(qǐng)失敗進(jìn)入等待。4、安全性檢查算法(checksafe()子函數(shù))( 1 )、設(shè)置兩個(gè)臨時(shí)變量。FINISHN 記錄進(jìn)程模擬執(zhí)行的結(jié)束狀態(tài),初值為0

5、,如果可以模擬執(zhí)行結(jié)束,則可設(shè)為 1,也可設(shè)為其它非零值以表示執(zhí)行的先后次序。WORKM 記錄模擬執(zhí)行中資源的回收情況,初值為 AVAILABLEM 的值。( 2)、在進(jìn)程中查找符合以下條件的進(jìn)程。條件 1: FINISHI=0條件 2: NEEDIJ =WORKJ( 3)、如果查找成功則進(jìn)行資源的模擬回收,語句如下:WORKJ=WORKJ+ALLOCA TIONIJ ;FINISHI=1 或查找到的順序號(hào)( 4 ) 、如果查找不成功,則檢查所有進(jìn)程的FINISH ,如果有一個(gè)為 0,則系統(tǒng)不為 0,返回不成功標(biāo)志。否則返回成功標(biāo)志。四、系統(tǒng)流程圖五、程序源代碼#in elude #in cl

6、ude#in cludeconst unsigned short c=3; 資源類數(shù) const un sig ned short t=5; 進(jìn)程數(shù) void print();用于打印輸出表格的函數(shù) void input();用于輸入的函數(shù) void tryfenpei(int i); 試分配函數(shù); void refenpei(int i); 恢復(fù)數(shù)據(jù)函數(shù) void checksafe(int s); 安全檢測(cè)函數(shù) int tempt;int workc;/定義初始化數(shù)組int needtc,requestc,availablec;int maxtc=3, 5, 7 ,9 ,11,6 ,8 ,

7、2 ,9, 5,6 ,3 ,5 ,7 ,4;int allocationtc=1 ,2 ,5 ,4, 8,5 ,4, 1 ,8 ,3 ,3 ,2 ,4, 3, 1;int totalc=17,21,25;int in;/ 用戶選擇的進(jìn)程號(hào)/*main 函數(shù) */int main(int argc,char *argv)int i;char ch=Y;int l=0,m=0,a;for( i=0;it;i+)for(int j=0;jc;j+) needij=maxij-allocationij;for( m=0;mc;m+)a=0;for(int l=0;lt;l+)a+=allocation

8、lm;availablem=totalm-a;do if(ch=Y|ch=y)coutok,現(xiàn)在開始進(jìn)入實(shí)驗(yàn)endl;coutin)if(!(0=in&in=4)endl;cout這里沒有該進(jìn)程,請(qǐng)重新輸入else break;cout 您輸入的是 pin 進(jìn)程 endl;cout 該進(jìn)程需求量為: ;for(i=0;ic;i+) needini=maxini-allocationini; coutneedini ;coutendl;coutendl;cout請(qǐng)輸入請(qǐng)求資源向量:;/輸入格式為Xfor(i=0;irequesti)if(requesti0) coutsorry,輸入的數(shù)字無效n

9、eedini) cout 超出進(jìn)程需求量 endlavailablei)cout 系 統(tǒng) 沒 有 足 夠 多 的 可 用 資 源 量 滿 足 進(jìn) 程 需 要 endlendl;else break;cout 輸入成功,您輸入的是: request0request1 request2;cout 等待已久的銀行家算法開始執(zhí)行 endl;tryfenpei(in);/ 分配函數(shù)cout 試分配完成 endl;cout現(xiàn)在進(jìn)入安全性檢測(cè)e ndl;checksafe(i n);安全性檢測(cè)函數(shù)cout您還想繼續(xù)銀行家算法的實(shí)驗(yàn)嗎?(y 繼續(xù)n終止);else if(ch=N|ch=n)cout感謝您的使

10、用,Bye endl退出 ingendl;break;elsecout 輸出無效!請(qǐng)重新輸入 ch);return 0;/* 輸出函數(shù) */void print()int i,j;cout 更新數(shù)據(jù)中 .endl;cout|endl;cout| 最大需求矩陣 |已分配矩陣 -|-需求矩陣 -|可利用資源 -|endl;cout| 資源 | Max| Allocation|Need | available |endl;cout| A B C | A B C | A B C | A B C |endl;cout| 進(jìn)程 | | | | |endl; cout|endl;for(i=0;i5;i+)

11、cout| pi | ;for(j=0;j3;j+) coutmaxij ; cout | ;for(j=0;j3;j+) cout allocationij; cout | ;for(j=0;j3;j+) cout needij; coutfor(j=0;j3;j+) cout availablej; cout0)cout |; coutendl; cout|endl;/* 試分配函數(shù) */void tryfenpei(int i)for(int f=0;fc;f+)availablef=availablef-requestf; allocationif=allocationif+reque

12、stf; needif=needif-requestf;/* 恢復(fù)數(shù)據(jù)函數(shù) */void refenpei(int i)for(int f=0;fc;f+) availablef=availablef+requestf; allocationif=allocationif-requestf; needif=needif+requestf;int com(int *p,int *q)int i;for(i=0;iqi)return 0;return 1;/* 安全檢測(cè)函數(shù) */void checksafe(int s)int flag,tempt,i,j,l,k=0;bool finisht;f

13、or(i=0;it;i+) finishi=false;for(j=0;jc;j+) workj=availablej;cout|endl;cout| resource |-Work+Allocation-|-Finish-|endl;cout| | A B C | T/F |endl; cout|programme | | |endl; cout|endl;for(i=0;it;i+)l=0; for(j=0;jworkj) l=1;break; if(finishi=false&l=0)cout| pi | ;for(j=0;j9) cout workj;elsecout workj;co

14、ut ;cout|;cout ;finishi=true;couttrue ;cout|;tempk=i;/couttemp=tempkendl;k+;i=-1; /從用戶選擇的進(jìn)程開始對(duì)每個(gè)進(jìn)程都要檢測(cè) coutendl;cout|endlendl;for(i=0;it;i+)if(finishi=false)flag=1;if(flag=1)cout 系統(tǒng)不安全!本次資源申請(qǐng)不成功感!endl;cout 正在恢復(fù)原來的數(shù)據(jù) .endl;refenpei(in);cout 恢復(fù)數(shù)據(jù)成功 !正在打印輸出 .endl;print();elsecout 找到一個(gè)安全系列: ;for(i=0;it;

15、i+)coutPtempi; coutendl 已通過安全性測(cè)試 !endlendlendl; cout 開始給第 pin 進(jìn)程分配資源 .endl; cout 分配完成 ! 打印輸出 .endlendl;print();cout哼 帑t4為 &L請(qǐng)P量LLE5resoupceT/F! pro granwrie*-Work+fillocation-!Fin ih! B C134S:4口王口王4:1的 源您 資* 求儉女 請(qǐng)宜元入一 入成配進(jìn) 臾分在一JM3 檢 性 全4 3等待已久的銀行家算法開始執(zhí)行-i:575!1 tpue !JE910 :true!: 101?15*true1141823

16、!true! 1?21251trueIP4 p0 pl p2 p3資源不足,無法繼續(xù)實(shí)驗(yàn):(卯-繼續(xù)n終止)*乍厶嗎: 驗(yàn)-4 實(shí)0 的-號(hào) 法潛無審 算甯進(jìn)5 家話1 : 番需 想嘖入程還- 您ok請(qǐng)諼口王口王3緊鮒尊欝鸚扁嘉量滿足進(jìn)程需要系統(tǒng)沒有足夠多的可用資源量滿足進(jìn)程需要系統(tǒng)役有足夠多的可用資源量滿足進(jìn)程需要2、出現(xiàn)問題及解決方案本程序考慮了程序功能實(shí)現(xiàn)、格式顯示合理化、輸入錯(cuò)誤異常處理等各個(gè)方面的設(shè) 計(jì),盡可能使程序設(shè)計(jì)的更加完美。在長期的設(shè)計(jì)調(diào)試過程中遇到過許多問題,通過網(wǎng) 上搜索、查詢資料、調(diào)試試驗(yàn)等方法一一解決。下面大致羅列一些主要問題:(1 )、關(guān)于某些判斷算法優(yōu)劣問題:在程

17、序中很多地方都會(huì)用到循環(huán)判斷是否符合條件的算法,在設(shè)計(jì)這些算法時(shí) 有很多方法,而有的算法可以更節(jié)省時(shí)間。如下安全性算法中尋找尋找符合Finishi=O條件的進(jìn)程的例子:/*算法一:for (j=0; j=Needij) coun ter=cou nter+1;記數(shù)if(co un ter=m)*/ /算法二:for (j=0; j=Needij); /可用大于等于需求elsecoun ter=1;break;if(coun ter!=1)顯然算法二要優(yōu)于算法一。本程序中還有很多類似的地方。這里主要考慮的是一個(gè)程序的優(yōu)化設(shè)計(jì)問題。(2)、關(guān)于某些系統(tǒng)函數(shù)調(diào)用時(shí)的執(zhí)行順序:在調(diào)用一些系統(tǒng)函數(shù)如ge

18、tch()、system(pause)等時(shí)發(fā)現(xiàn)其執(zhí)行順序的一些問題。如類似:cout =e ndl;cout nnnen dl; system(pause); 暫停調(diào)試時(shí)發(fā)現(xiàn)此時(shí):在Microsoft Visual C+ 6.0中先執(zhí)行system(pause)再輸出顯 示,而在調(diào)試器 Bloodshed Dev-C+中則順序執(zhí)行;但當(dāng)把 cout nnne ndl;改 為coutendlendlendl;其他不變時(shí),則在兩中調(diào)試器中均為順序執(zhí)行,即先顯 示后暫停。查找了一下相關(guān)幫助:在 OSTREAM.H 中有這樣的一個(gè) inline 函數(shù):inline _CRTIMP ostream& _

19、cdecl endl(ostream& _outs) return _outs n flush; 也就是說endl= return _outs n flush;endl除了寫n進(jìn)外,還調(diào)用flush函數(shù),刷新緩沖區(qū),把緩沖區(qū)里的數(shù)據(jù)寫入文件或 屏幕。如果考慮效率就用 n(3)、關(guān)于設(shè)置暫停的方法: 在有些地方需要暫停一下以便于用戶查看信息等, 總結(jié)了下大致可用以下幾中方 法:方法一:#include system(pause);暫停一下并顯示輸入任意鍵繼續(xù)”方法二:#include getchar();須按回車鍵結(jié)束,不是任意鍵方法三:#include getch();等待鍵盤輸入,不返回任何值,無任何顯示方法四:使用 char* tt=new char; cintt; 方式,要求鍵盤輸入一個(gè)與程序無關(guān)的變量六、心得體會(huì)“銀行家算法的模擬實(shí)現(xiàn)”是本學(xué)期操作系統(tǒng)課程唯一的課程設(shè)計(jì)。在設(shè)計(jì)此程序的過

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論