版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、中南大學(xué)軟件技術(shù)課程設(shè)計(jì)報(bào)告課程名稱:模擬銀行家算法原理班級(jí): 學(xué)號(hào): 姓名: 指導(dǎo)老師: 2009年5月2日一 設(shè)計(jì)目的模擬實(shí)現(xiàn)銀行家算法,用銀行家算法實(shí)現(xiàn)資源分配。二 問題描述在死鎖的避免中,銀行家算法把系統(tǒng)狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)始終處于安全狀態(tài),便可以避免發(fā)生死鎖。所謂安全狀態(tài),是指系統(tǒng)能按某種順序?yàn)槊總€(gè)進(jìn)程分配所需資源,直到最大需求,使每一個(gè)進(jìn)程都可以順利完成,即可找到一個(gè)安全資源分配序列。模擬實(shí)現(xiàn)這個(gè)工作過程。三 設(shè)計(jì)思路我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當(dāng)于銀行家管理的資金,進(jìn)程向操作系統(tǒng)請(qǐng)求分配資源相當(dāng)于用戶向銀行家貸款。操作系統(tǒng)按照銀行家制
2、定的規(guī)則為進(jìn)程分配資源,當(dāng)進(jìn)程首次申請(qǐng)資源時(shí),要測(cè)試該進(jìn)程對(duì)資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當(dāng)前的申請(qǐng)量分配資源,否則就推遲分配。當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請(qǐng)資源時(shí),先測(cè)試該進(jìn)程已占用的資源數(shù)與本次申請(qǐng)的資源數(shù)之和是否超過了該進(jìn)程對(duì)資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測(cè)試系統(tǒng)現(xiàn)存的資源能否滿足該進(jìn)程尚需的最大資源量,若能滿足則按當(dāng)前的申請(qǐng)量分配資源,否則也要推遲分配。四 詳細(xì)設(shè)計(jì)1、初始化由用戶輸入數(shù)據(jù),分別對(duì)可利用資源向量矩陣available、最大需求矩陣max、分配矩陣allocation、需求矩陣need賦值。2、銀行家算法在避免死鎖的方法中,
3、所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)始終都處于安全狀態(tài),便可以避免發(fā)生死鎖。銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。設(shè)進(jìn)程cusneed提出請(qǐng)求request i,則銀行家算法按如下規(guī)則進(jìn)行判斷。(1)如果request cusneed i= needcusneedi,則轉(zhuǎn)(2);否則,出錯(cuò)。(2)如果request cusneed i= availablecusneedi,則轉(zhuǎn)(3);否則,出錯(cuò)。(3)系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù): availablei-=requestcusnee
4、di; allocationcusneedi+=requestcusneedi; needcusneedi-=requestcusneedi;(4)系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探險(xiǎn)性分配作廢,系統(tǒng)恢復(fù)原狀,進(jìn)程等待。(5)對(duì)于某一進(jìn)程i,若對(duì)所有的j,有needij=0,則表此進(jìn)程資源分配完畢,應(yīng)將占用資源釋放。3、安全性檢查算法(1)設(shè)置兩個(gè)工作向量work=available;finish(2)從進(jìn)程集合中找到一個(gè)滿足下述條件的進(jìn)程,finish=false;needneedi或者requestiavailablei報(bào)錯(cuò),重新輸入availablei-=request i
5、;allocationi+=request i;needi-=requesti;初始化安全性檢查安全availablei+=request i;allocationi-=request i;needi+=requesti;保持原分配進(jìn)程執(zhí)行完釋放資源繼續(xù)分配結(jié)束yesnoyesnoyesyesnono四 源程序:#include #include #include /#include /#includeusing namespace std;#define maxprocess 50 /*最大進(jìn)程數(shù)*/ #define maxresource 100 /*最大資源數(shù)*/int availabl
6、emaxresource; /*可用資源數(shù)組*/int maxmaxprocessmaxresource; /*最大需求矩陣*/int allocationmaxprocessmaxresource; /*分配矩陣*/int needmaxprocessmaxresource; /*需求矩陣*/int requestmaxprocessmaxresource; /*進(jìn)程需要資源數(shù)*/int summitmaxresource=0 ; /*各種資源總量*/int needcmaxresource=0; /*輔助向量*/bool finishmaxprocess; /*系統(tǒng)是否有足夠的資源分配*/
7、int pmaxprocess; /*記錄序列*/int m,n; /*m個(gè)進(jìn)程,n個(gè)資源*/void init();bool safe();void bank();void main() /textbackground(0); /* 設(shè)置屏幕背景色 */ init(); safe(); bank();void init() /*初始化算法*/int i,j; cout endl; cout 銀行家算法模擬endl; cout endl;cout 通信0602 唐敏 0401060223 endl; cout endl;cout endl;cout 算法簡(jiǎn)介:endl;cout 在避免死鎖的方
8、法中,所施加的限制條件較弱,有可能獲得令人滿意endl; cout 的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要endl; cout 能使系統(tǒng)始終都處于安全狀態(tài),便可以避免發(fā)生死鎖endl;cout 銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是endl;cout ,才分配。它是最具有代表性的避免死鎖的算法。endl;cout endl;cout endl;cout endl;cout endl;cout 請(qǐng)稍候.6秒后跳入主界面 endl; sleep(6000); system(cls); cout endl; cout 運(yùn)行界面endl; couten
9、dl;cout請(qǐng)輸入進(jìn)程的數(shù)目:m; cout請(qǐng)輸入資源的種類:n; cout請(qǐng)輸入每個(gè)進(jìn)程最多所需的各資源數(shù),按照mxn矩陣輸入endl; for(i=0;im;i+) for(j=0;jmaxij; cout請(qǐng)輸入每個(gè)進(jìn)程已分配的各資源數(shù),也按照mxn矩陣輸入endl; for(i=0;im;i+) for(j=0;jallocationij; needij=maxij-allocationij; if(needij0) cout您輸入的第i+1個(gè)進(jìn)程所擁有的第j+1個(gè)資源數(shù)錯(cuò)誤,請(qǐng)重新輸入:endl; j-; continue; for(j=0;jn;j+) /已分配各資源總數(shù)for(i
10、=0;im;i+) needcj=allocationij+needcj; / for(i=0;in;i+) /此四行用于檢驗(yàn) / / coutneedci ; / cout請(qǐng)輸入各個(gè)資源現(xiàn)有的數(shù)目:endl; for(i=0;iavailablei; for(i=0;in;i+) /總資源數(shù) summiti=availablei+ needci; /for(i=0;in;i+) /檢驗(yàn)用/coutsummiti ; / cout endl;coutendl; cout初始化后狀態(tài)顯示:endl;cout每個(gè)進(jìn)程最多所需的各資源數(shù)endl; for(i=0;im;i+) for(j=0;jn;
11、j+) coutmaxij ;if(j=n-1)cout endl; cout每個(gè)進(jìn)程已分配的各資源數(shù)endl; for(i=0;im;i+) for(j=0;jn;j+) coutallocationij ;if(j=n-1)cout endl; cout各個(gè)資源現(xiàn)有的數(shù)目:endl; for(i=0;in;i+)coutavailablei ; cout endl; coutendl;void bank() /*銀行家算法*/ int i,j,cusneed; char again; int sum=0; /*監(jiān)測(cè)某一進(jìn)程資源是否分配完畢*/int add=0; while(1) cout
12、請(qǐng)輸入要申請(qǐng)資源的進(jìn)程號(hào)(注:第1個(gè)進(jìn)程號(hào)為0,依次類推)cusneed; cout請(qǐng)輸入進(jìn)程所請(qǐng)求的各資源的數(shù)量endl; for(i=0;irequestcusneedi; / / for(i=0;ineedcusneedi) cout您輸入的本個(gè)請(qǐng)求數(shù)超過進(jìn)程的需求量!請(qǐng)重新輸入!availablei) cout您輸入的本個(gè)請(qǐng)求數(shù)超過系統(tǒng)有的資源數(shù)!請(qǐng)重新輸入!endl; i-;continue; for(i=0;in;i+) /資源分配 availablei-=requestcusneedi; allocationcusneedi+=requestcusneedi; needcusne
13、edi-=requestcusneedi; if(safe() coutendl; cout同意分配請(qǐng)求!endl; cout此次分配后狀態(tài)顯示:endl; cout當(dāng)前每個(gè)進(jìn)程最多尚需的各資源數(shù)endl; for(i=0;im;i+)for(j=0;jn;j+) coutneedij ;if(j=n-1)cout endl; cout當(dāng)前每個(gè)進(jìn)程已分配過的各資源數(shù)endl; for(i=0;im;i+) for(j=0;jn;j+) coutallocationij ;if(j=n-1)cout endl; for(i=0;im;i+) for(j=0;jn;j+) add=needij+a
14、dd; /是否已分配完畢 if(add!=0)for(i=0;in;i+) sum=needcusneedi+sum; coutsum值:sumendl;/coutsum ;cout endl; if (sum=0) for(i=0;in;i+) availablei= allocationcusneedi+availablei; sum=0; cout各個(gè)資源現(xiàn)有的數(shù)目:endl; for(i=0;in;i+)coutavailablei ; cout endl;add=0; /coutadd endl;elsecout各個(gè)資源現(xiàn)有的數(shù)目:endl; for(i=0;in;i+)coutsu
15、mmiti ; cout endl; coutendl; else cout您的請(qǐng)求被拒絕!endl; /撤消資源分配 for(i=0;in;i+) availablei+=requestcusneedi; allocationcusneedi-=requestcusneedi; needcusneedi+=requestcusneedi; for(i=0;im;i+) finishi=false; cout您還想再次請(qǐng)求分配嗎?是請(qǐng)按y/y,否請(qǐng)按其它鍵again; if(again=y|again=y) continue; break; /跳出while bool safe() /*安全性
16、算法*/ int i,j,k,l=0; int workmaxresource; /*工作數(shù)組*/ for(i=0;in;i+) worki=availablei; for(i=0;im;i+) finishi=false; for(i=0;im;i+) if(finishi=true) continue; else for(j=0;jworkj) break; if(j=n) finishi=true; /finish在此被賦值,表進(jìn)程i可順利進(jìn)行 for(k=0;kn;k+) /并假設(shè)已執(zhí)行完成 workk+=allocationik; pl+=i; i=-1; /再從i=0開始判斷 el
17、se continue; if(l=m) /所有進(jìn)程都可完成 cout系統(tǒng)是安全的endl; cout安全序列:endl; for(i=0;il;i+) cout cout; coutendl; return true; cout系統(tǒng)是不安全的endl; return false; 五 運(yùn)行調(diào)試及結(jié)果說明初始化時(shí)若已分配資源多于最多所需資源則會(huì)報(bào)錯(cuò),需重新輸入(如上圖所示)初始化后狀態(tài)顯示資源分配時(shí)請(qǐng)求量超過需求量或現(xiàn)有資源數(shù)同樣會(huì)報(bào)錯(cuò)(如上圖)特殊情況:若申請(qǐng)資源數(shù)既不大于資源需求量,又不大于現(xiàn)有資源數(shù),但仍有可能導(dǎo)致死鎖,如上圖所示。此時(shí)會(huì)顯示系統(tǒng)不安全,請(qǐng)求被拒絕。(為便于說明,以上均采用二階矩陣。其他類型矩陣原理相同)sum=0,表某一進(jìn)程資源分配完畢,資源釋放(請(qǐng)結(jié)合第四個(gè)圖)六 總結(jié)本次設(shè)計(jì)中首先要解決的問題是對(duì)所做題目的理解。簡(jiǎn)單的文字描述總是生澀難懂,像銀行家算法這一問題,如果單看題目要求往往不知如何下手,更不要談下一步的設(shè)計(jì)過程。但倘若聯(lián)系實(shí)際生活中銀行貸款這一現(xiàn)象,再來看問題時(shí),一切開始顯得清晰,再加上老師的指點(diǎn),便可以把自己究竟該作何工作搞清楚。這也給我一啟示,我們要解決的諸多問題都源自生活,若要解決它,聯(lián)系實(shí)際是個(gè)很不錯(cuò)的選擇。明白了需求,下一個(gè)難點(diǎn)是如何通過軟件實(shí)現(xiàn)。我所做
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年滬教版八年級(jí)物理下冊(cè)月考試卷含答案
- 2025年粵教滬科版選擇性必修3歷史下冊(cè)階段測(cè)試試卷含答案
- 2025年粵教新版八年級(jí)地理下冊(cè)階段測(cè)試試卷
- 2025年蘇教版七年級(jí)生物下冊(cè)月考試卷
- 遵義職業(yè)技術(shù)學(xué)院《中國(guó)古代文學(xué)與中學(xué)語文教育》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五版木工雕刻藝術(shù)創(chuàng)作授權(quán)合同4篇
- 2025年度農(nóng)用拖拉機(jī)租賃與農(nóng)產(chǎn)品溯源合同4篇
- 二零二五年度金融行業(yè)派遣勞務(wù)安全保障合同4篇
- 2025年度屋頂綠化租賃與節(jié)能減排合同4篇
- 二零二五年倉儲(chǔ)設(shè)備采購與運(yùn)輸合同3篇
- 2024年英語高考全國(guó)各地完形填空試題及解析
- 智能養(yǎng)老院視頻監(jiān)控技術(shù)方案
- 你比我猜題庫課件
- 體育概論(第二版)課件第三章體育目的
- 無人駕駛航空器安全操作理論復(fù)習(xí)測(cè)試附答案
- 建筑工地春節(jié)留守人員安全技術(shù)交底
- 默納克-NICE1000技術(shù)交流-V1.0
- 蝴蝶蘭的簡(jiǎn)介
- 老年人心理健康量表(含評(píng)分)
- 《小兒靜脈輸液速度》課件
- 營(yíng)銷人員薪酬標(biāo)準(zhǔn)及績(jī)效考核辦法
評(píng)論
0/150
提交評(píng)論