![軟件技術(shù)課程設(shè)計報告模擬銀行家算法原理_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/4/e99b539e-3235-47b2-9586-c81b86244970/e99b539e-3235-47b2-9586-c81b862449701.gif)
![軟件技術(shù)課程設(shè)計報告模擬銀行家算法原理_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/4/e99b539e-3235-47b2-9586-c81b86244970/e99b539e-3235-47b2-9586-c81b862449702.gif)
![軟件技術(shù)課程設(shè)計報告模擬銀行家算法原理_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/4/e99b539e-3235-47b2-9586-c81b86244970/e99b539e-3235-47b2-9586-c81b862449703.gif)
![軟件技術(shù)課程設(shè)計報告模擬銀行家算法原理_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/4/e99b539e-3235-47b2-9586-c81b86244970/e99b539e-3235-47b2-9586-c81b862449704.gif)
![軟件技術(shù)課程設(shè)計報告模擬銀行家算法原理_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-7/4/e99b539e-3235-47b2-9586-c81b86244970/e99b539e-3235-47b2-9586-c81b862449705.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、中南大學軟件技術(shù)課程設(shè)計報告課程名稱:模擬銀行家算法原理班級: 學號: 姓名: 指導(dǎo)老師: 2009年5月2日一 設(shè)計目的模擬實現(xiàn)銀行家算法,用銀行家算法實現(xiàn)資源分配。二 問題描述在死鎖的避免中,銀行家算法把系統(tǒng)狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)始終處于安全狀態(tài),便可以避免發(fā)生死鎖。所謂安全狀態(tài),是指系統(tǒng)能按某種順序為每個進程分配所需資源,直到最大需求,使每一個進程都可以順利完成,即可找到一個安全資源分配序列。模擬實現(xiàn)這個工作過程。三 設(shè)計思路我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當于銀行家管理的資金,進程向操作系統(tǒng)請求分配資源相當于用戶向銀行家貸款。操作系統(tǒng)按照銀行家制
2、定的規(guī)則為進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當前的申請量分配資源,否則就推遲分配。當進程在執(zhí)行中繼續(xù)申請資源時,先測試該進程已占用的資源數(shù)與本次申請的資源數(shù)之和是否超過了該進程對資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測試系統(tǒng)現(xiàn)存的資源能否滿足該進程尚需的最大資源量,若能滿足則按當前的申請量分配資源,否則也要推遲分配。四 詳細設(shè)計1、初始化由用戶輸入數(shù)據(jù),分別對可利用資源向量矩陣available、最大需求矩陣max、分配矩陣allocation、需求矩陣need賦值。2、銀行家算法在避免死鎖的方法中,
3、所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)始終都處于安全狀態(tài),便可以避免發(fā)生死鎖。銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。設(shè)進程cusneed提出請求request i,則銀行家算法按如下規(guī)則進行判斷。(1)如果request cusneed i= needcusneedi,則轉(zhuǎn)(2);否則,出錯。(2)如果request cusneed i= availablecusneedi,則轉(zhuǎn)(3);否則,出錯。(3)系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù): availablei-=requestcusnee
4、di; allocationcusneedi+=requestcusneedi; needcusneedi-=requestcusneedi;(4)系統(tǒng)執(zhí)行安全性檢查,如安全,則分配成立;否則試探險性分配作廢,系統(tǒng)恢復(fù)原狀,進程等待。(5)對于某一進程i,若對所有的j,有needij=0,則表此進程資源分配完畢,應(yīng)將占用資源釋放。3、安全性檢查算法(1)設(shè)置兩個工作向量work=available;finish(2)從進程集合中找到一個滿足下述條件的進程,finish=false;needneedi或者requestiavailablei報錯,重新輸入availablei-=request i
5、;allocationi+=request i;needi-=requesti;初始化安全性檢查安全availablei+=request i;allocationi-=request i;needi+=requesti;保持原分配進程執(zhí)行完釋放資源繼續(xù)分配結(jié)束yesnoyesnoyesyesnono四 源程序:#include #include #include /#include /#includeusing namespace std;#define maxprocess 50 /*最大進程數(shù)*/ #define maxresource 100 /*最大資源數(shù)*/int availabl
6、emaxresource; /*可用資源數(shù)組*/int maxmaxprocessmaxresource; /*最大需求矩陣*/int allocationmaxprocessmaxresource; /*分配矩陣*/int needmaxprocessmaxresource; /*需求矩陣*/int requestmaxprocessmaxresource; /*進程需要資源數(shù)*/int summitmaxresource=0 ; /*各種資源總量*/int needcmaxresource=0; /*輔助向量*/bool finishmaxprocess; /*系統(tǒng)是否有足夠的資源分配*/
7、int pmaxprocess; /*記錄序列*/int m,n; /*m個進程,n個資源*/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 算法簡介: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 請稍候.6秒后跳入主界面 endl; sleep(6000); system(cls); cout endl; cout 運行界面endl; couten
9、dl;cout請輸入進程的數(shù)目:m; cout請輸入資源的種類:n; cout請輸入每個進程最多所需的各資源數(shù),按照mxn矩陣輸入endl; for(i=0;im;i+) for(j=0;jmaxij; cout請輸入每個進程已分配的各資源數(shù),也按照mxn矩陣輸入endl; for(i=0;im;i+) for(j=0;jallocationij; needij=maxij-allocationij; if(needij0) cout您輸入的第i+1個進程所擁有的第j+1個資源數(shù)錯誤,請重新輸入:endl; j-; continue; for(j=0;jn;j+) /已分配各資源總數(shù)for(i
10、=0;im;i+) needcj=allocationij+needcj; / for(i=0;in;i+) /此四行用于檢驗 / / coutneedci ; / cout請輸入各個資源現(xiàn)有的數(shù)目:endl; for(i=0;iavailablei; for(i=0;in;i+) /總資源數(shù) summiti=availablei+ needci; /for(i=0;in;i+) /檢驗用/coutsummiti ; / cout endl;coutendl; cout初始化后狀態(tài)顯示:endl;cout每個進程最多所需的各資源數(shù)endl; for(i=0;im;i+) for(j=0;jn;
11、j+) coutmaxij ;if(j=n-1)cout endl; cout每個進程已分配的各資源數(shù)endl; for(i=0;im;i+) for(j=0;jn;j+) coutallocationij ;if(j=n-1)cout endl; cout各個資源現(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)測某一進程資源是否分配完畢*/int add=0; while(1) cout
12、請輸入要申請資源的進程號(注:第1個進程號為0,依次類推)cusneed; cout請輸入進程所請求的各資源的數(shù)量endl; for(i=0;irequestcusneedi; / / for(i=0;ineedcusneedi) cout您輸入的本個請求數(shù)超過進程的需求量!請重新輸入!availablei) cout您輸入的本個請求數(shù)超過系統(tǒng)有的資源數(shù)!請重新輸入!endl; i-;continue; for(i=0;in;i+) /資源分配 availablei-=requestcusneedi; allocationcusneedi+=requestcusneedi; needcusne
13、edi-=requestcusneedi; if(safe() coutendl; cout同意分配請求!endl; cout此次分配后狀態(tài)顯示:endl; cout當前每個進程最多尚需的各資源數(shù)endl; for(i=0;im;i+)for(j=0;jn;j+) coutneedij ;if(j=n-1)cout endl; cout當前每個進程已分配過的各資源數(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各個資源現(xiàn)有的數(shù)目:endl; for(i=0;in;i+)coutavailablei ; cout endl;add=0; /coutadd endl;elsecout各個資源現(xiàn)有的數(shù)目:endl; for(i=0;in;i+)coutsu
15、mmiti ; cout endl; coutendl; else cout您的請求被拒絕!endl; /撤消資源分配 for(i=0;in;i+) availablei+=requestcusneedi; allocationcusneedi-=requestcusneedi; needcusneedi+=requestcusneedi; for(i=0;im;i+) finishi=false; cout您還想再次請求分配嗎?是請按y/y,否請按其它鍵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在此被賦值,表進程i可順利進行 for(k=0;kn;k+) /并假設(shè)已執(zhí)行完成 workk+=allocationik; pl+=i; i=-1; /再從i=0開始判斷 el
17、se continue; if(l=m) /所有進程都可完成 cout系統(tǒng)是安全的endl; cout安全序列:endl; for(i=0;il;i+) cout cout; coutendl; return true; cout系統(tǒng)是不安全的endl; return false; 五 運行調(diào)試及結(jié)果說明初始化時若已分配資源多于最多所需資源則會報錯,需重新輸入(如上圖所示)初始化后狀態(tài)顯示資源分配時請求量超過需求量或現(xiàn)有資源數(shù)同樣會報錯(如上圖)特殊情況:若申請資源數(shù)既不大于資源需求量,又不大于現(xiàn)有資源數(shù),但仍有可能導(dǎo)致死鎖,如上圖所示。此時會顯示系統(tǒng)不安全,請求被拒絕。(為便于說明,以上均采用二階矩陣。其他類型矩陣原理相同)sum=0,表某一進程資源分配完畢,資源釋放(請結(jié)合第四個圖)六 總結(jié)本次設(shè)計中首先要解決的問題是對所做題目的理解。簡單的文字描述總是生澀難懂,像銀行家算法這一問題,如果單看題目要求往往不知如何下手,更不要談下一步的設(shè)計過程。但倘若聯(lián)系實際生活中銀行貸款這一現(xiàn)象,再來看問題時,一切開始顯得清晰,再加上老師的指點,便可以把自己究竟該作何工作搞清楚。這也給我一啟示,我們要解決的諸多問題都源自生活,若要解決它,聯(lián)系實際是個很不錯的選擇。明白了需求,下一個難點是如何通過軟件實現(xiàn)。我所做
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子商務(wù)服務(wù)外包合同
- 的三方入股合作協(xié)議書
- 2025年云南貨運從業(yè)資格考試題目
- 2025年泰安道路貨物運輸從業(yè)資格證考試
- 電子產(chǎn)品點膠代加工協(xié)議書(2篇)
- 2024年高考歷史藝體生文化課第八單元工業(yè)文明沖擊下的中國近代經(jīng)濟和近現(xiàn)代社會生活的變遷8.20近代中國經(jīng)濟結(jié)構(gòu)的變動和資本主義的曲折發(fā)展練習
- 2024-2025學年高中數(shù)學課時分層作業(yè)13結(jié)構(gòu)圖含解析新人教B版選修1-2
- 2024-2025學年三年級語文下冊第三單元11趙州橋教案新人教版
- 2024-2025學年高中歷史第1單元中國古代的思想與科技第6課中國古代的科學技術(shù)教案含解析岳麓版必修3
- 員工物品交接單
- 高支模專項施工方案(專家論證)
- 深圳版初中英語單詞匯總
- 健康養(yǎng)生,快樂生活課件
- 《物流與供應(yīng)鏈管理-新商業(yè)、新鏈接、新物流》配套教學課件
- 物聯(lián)網(wǎng)項目實施進度計劃表
- MDD指令附錄一 基本要求檢查表2013版
- 駱駝祥子1一24章批注
- 新部編人教版四年級下冊道德與法治全冊教案(教學設(shè)計)
- 2021年胃腸外科規(guī)培出科考試試題及答案
- 人美版高中美術(shù)選修:《繪畫》全冊課件【優(yōu)質(zhì)課件】
- FANUC數(shù)控系統(tǒng)面板介紹與編程操作參考模板
評論
0/150
提交評論