銀行家算法模擬操作系統(tǒng)課程設(shè)計_第1頁
銀行家算法模擬操作系統(tǒng)課程設(shè)計_第2頁
銀行家算法模擬操作系統(tǒng)課程設(shè)計_第3頁
銀行家算法模擬操作系統(tǒng)課程設(shè)計_第4頁
銀行家算法模擬操作系統(tǒng)課程設(shè)計_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計(大作業(yè))報告課程名稱: 操作系統(tǒng)課程設(shè)計 設(shè)計題目: 銀行家算法模擬 院 系: 信息技術(shù)學(xué)院 班 級: 2011級計科一班 設(shè) 計 者: 王春磊 學(xué) 號: * 指導(dǎo)教師: 段玻 設(shè)計時間: 2013年12月23-27日昆明學(xué)院昆明學(xué)院課程設(shè)計(大作業(yè))任務(wù)書姓 名:王春磊 院(系):信息技術(shù)學(xué)院專 業(yè):計算機(jī)科學(xué)與技術(shù)學(xué) 號:*任務(wù)起止日期: 2013年12月23日2013年12月27日課程設(shè)計題目: 課程設(shè)計要求及任務(wù)描述:根據(jù)銀行家算法策略,分析數(shù)據(jù)對象的特征,選擇適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu);能夠進(jìn)行算法設(shè)計和程序設(shè)計,并且使所設(shè)計的程序結(jié)構(gòu)清楚,正確易讀,并上機(jī)調(diào)試通過;初步掌握軟件開發(fā)過

2、程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技能;訓(xùn)練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng); 設(shè)計的題目要求達(dá)到一定工作量,并具有一定的深度和難度;要求具備較強(qiáng)的實習(xí)、實踐能力、較強(qiáng)的分析問題、解決問題的能力;有明確的設(shè)計思路、有完整的界面 、有圖形輔助說明;對整個設(shè)計過程做出總結(jié)。工作計劃及安排:2013年12月23日查閱相關(guān)資料,數(shù)據(jù)結(jié)構(gòu)及函數(shù)設(shè)計2013年12月24日繪制流程圖2013年12月25.26編寫實驗代碼2013年12月27日代碼測試即撰寫課程設(shè)計大報告指導(dǎo)教師簽字 年 月 日 課程設(shè)計(大作業(yè))成績學(xué)號:*

3、姓名:王春磊 指導(dǎo)教師:段玻課程設(shè)計題目:銀行家算法模擬完成情況總結(jié):經(jīng)過一個星期的努力。我終于完成了銀行家算法的模擬過程即相應(yīng)的文檔撰寫,雖然程序中還存在一些漏洞,主要是時間原因,沒能利用安全檢測機(jī)制進(jìn)行數(shù)據(jù)的輸入合法性檢查,但程序輸入數(shù)據(jù)不合法時,只能被迫結(jié)束程序。本次課設(shè)我的收益最大在于安全檢測算法,在于求取安全序列。 通過本次課程設(shè)計,我收獲很大,首先我對銀行家算法有了清楚的認(rèn)識,認(rèn)真分析了進(jìn)程產(chǎn)生死鎖的原因,了解了為何要進(jìn)行死鎖的避免,掌握了銀行家算法的數(shù)據(jù)結(jié)構(gòu),懂得了銀行家算法的執(zhí)行過稱,加深了我對其的理解;其次,我對軟件工程有了清楚的認(rèn)識,最后,我也清楚認(rèn)識到理論聯(lián)系實際的重要性

4、,動手操作能力和編程邏輯能力在程序設(shè)計過程中的重要性,在程序調(diào)試程序過程中,我掌握了很多技巧。這為我以后的學(xué)習(xí)奠定了一定的基礎(chǔ)。指導(dǎo)教師評語:成績:填表時間:指導(dǎo)教師簽名:課程設(shè)計(大作業(yè))報告一、 題目分析 借以模擬算法,首先由用戶輸入系統(tǒng)的當(dāng)前狀況,包括系統(tǒng)此時的進(jìn)程數(shù)量、系統(tǒng)中的資源種類數(shù)目;各個進(jìn)程當(dāng)前對各類資源的最大需求量和當(dāng)前對其的擁有量。接著系統(tǒng)能夠判斷出當(dāng)前狀態(tài)是否安全,是否能夠相應(yīng)進(jìn)程的請求。若通過安全檢測步驟,表示系統(tǒng)的當(dāng)前狀態(tài)是安全感的,系統(tǒng)需要根據(jù)相應(yīng)的算法處理進(jìn)程的資源請求(能否分配都要予以合理考慮,并給出提示信息)。每處理完一個請求都要顯示出系統(tǒng)的當(dāng)前狀況(包括各個

5、進(jìn)程的資源狀況和系統(tǒng)的資源狀況)。二、 程序設(shè)計1數(shù)據(jù)結(jié)構(gòu)設(shè)計(1)系統(tǒng)當(dāng)前擁有的各類資源的數(shù)量 available20,其中每個元素代表一類可用的資源的數(shù)目,用availablei代表系統(tǒng)中第i+1類資源的數(shù)目。即用available0=m表示系統(tǒng)中當(dāng)前用有的第一類資源數(shù)目為m 。(2)各個進(jìn)程的最大需求矩陣max2020,用它存儲某個進(jìn)程對某類資源的最大需求量,用maxij代表第i+1個進(jìn)程對第j+1類資源的需求量。即用max00=m表示第一個進(jìn)程對第一類資源的需求量是m 。(3)當(dāng)前所獲得的各類資源的數(shù)目allocation2020,用它來存儲各個進(jìn)程當(dāng)前所得到的各類資源的數(shù)量,用all

6、ocationii表示第i+1個進(jìn)程所擁有的第j+1類資源的數(shù)目。即用allocation00=m表示第一個進(jìn)程當(dāng)前擁有第一類資源的數(shù)量為m 。(4)尚且需求need2020,用它來存儲各個進(jìn)程對各類資源的尚且需求量,用needij表示第i+1號進(jìn)程對對第j+1類資源的尚需量。即用need00=m代表第一個進(jìn)程對第一類資源的尚需量為m ,needij=maxij-allocationii。類的設(shè)計設(shè)計一個Banker類,其實例即為一個銀行家算法實體,其中包括銀行家算法中用到的上述數(shù)據(jù)結(jié)構(gòu),都為保護(hù)類型。用兩個共有數(shù)據(jù)成員記錄用戶輸入的進(jìn)程個數(shù)和資源個數(shù),其分別為count_process(資源

7、數(shù)),count_source(進(jìn)程數(shù)); 設(shè)計一個用于輸入系統(tǒng)當(dāng)前狀態(tài)的成員函數(shù):inputData();一個用于求取安全序列,從而檢測系統(tǒng)當(dāng)前狀態(tài)是否安全的成員函數(shù):safetyCheck();一個用于執(zhí)行銀行家算法的核心成員函數(shù):divideSource(int request ,int& request_number);由此函數(shù)負(fù)責(zé)調(diào)用其他函數(shù),一并完成銀行家算法。再在類中封裝一個用于顯示系統(tǒng)當(dāng)前狀態(tài)(包括各個進(jìn)程的狀態(tài))的顯示函數(shù): void display();1 函數(shù)設(shè)計(1)void Banker:inputData()此函數(shù)負(fù)責(zé)給出用戶提示,用戶按照提示鍵入相應(yīng)的數(shù)值

8、。流程圖如(圖4.1)。首先提示用戶輸入進(jìn)程的個數(shù)和資源的種類數(shù)。接著用戶按照提示依次輸入第i個進(jìn)程對第j類資源的最大需求量和當(dāng)前已經(jīng)獲得的數(shù)量,并要求已獲得的資源的個數(shù)不大于其對同類資源的最大需求量。最后讓用戶輸入系統(tǒng)當(dāng)前的各類資源的可用數(shù)目。 (2)bool Banker:safetyCheck()此函數(shù)負(fù)責(zé)求取安全序列,從而檢測系統(tǒng)某時刻是否安全。設(shè)置兩個向量:work20,finish20在執(zhí)行安全算法開始時,work=avilable.finish表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,初始化時finish=false;B. 從進(jìn)程集合中找到一個能滿足finishi=false&

9、&needij<=workj.找到則執(zhí)行C。否則執(zhí)行D。C執(zhí)行work=work+allocationij;finishi=true;表示進(jìn)程i可順利執(zhí)行,直到完成后釋放掉所占有的資源。D如果所有的finishi=true都滿足,返回安全信息,否則返回系統(tǒng)不安全信息。 (3)void Banker:divideSource(int request20 ,int& request_number)此函數(shù)掉用其他三個成員函數(shù)完成應(yīng)行家算法,其兩個參數(shù)分別表示請求的各類資源數(shù)和發(fā)出請求的進(jìn)程號,流程圖如(圖4.3)。其流程如下:A. 定義四個數(shù)據(jù)其功能分別如下int result

10、_dissatisfy20; 記錄超過系統(tǒng)當(dāng)前所剩資源號bool dissatisfy=false; 記錄有無系統(tǒng)當(dāng)前無法提供足夠資源的進(jìn)程int result_passmax20; 記錄超過最大需求量的資源號bool passmax=false; 記錄有無超過最大需求量的進(jìn)程A 如果requestj>needrequest_number-1j則result_passmaxj=1;passmax=true;表示第j類資源超過最大請求,該進(jìn)程有超過最大需求的資源號,系統(tǒng)認(rèn)為出錯,顯示出資源信息即調(diào)用display();否則轉(zhuǎn)C。B 如果requestj>availablej則resu

11、lt_dissatisfyj=1;dissatisfy=true;表示進(jìn)程請求的第j類資源超過系統(tǒng)當(dāng)前的擁有量,系統(tǒng)不能滿足其請求,顯示出資源信息即調(diào)用display()。否則轉(zhuǎn)D。C 試分配資源:availablej-=requestj; allocationrequest_number-1j+=requestj; needrequest_number-1j-=requestj;D 系統(tǒng)執(zhí)行安全檢測算法,檢查是分配后系統(tǒng)是否安全,若安全才真正將資源分配給進(jìn)程否則,將本次是分配作廢,恢復(fù)到試分配之前的資源狀態(tài)。調(diào)用display()顯示資源。(4)void Banker:display()顯示

12、出每個進(jìn)程對各類資源的最大需求量、當(dāng)前的獲得量及尚需量,并且要顯示出系統(tǒng)當(dāng)前的各類資源剩余量。函數(shù)的調(diào)用分析divideSource(int request ,int& request_number)調(diào)用display()顯示出各種情況下的系統(tǒng)資源分布情況。調(diào)用safetyCheck()檢測某時刻系統(tǒng)是否處于安全態(tài)。開 始是否請求的所有資源都滿足requsetj<=needij是否所有請求的資源小于等于系統(tǒng)擁有量 即Requestj<=availablejavailablej-=requestj;allocationrequest_number-1j+=requestj;

13、needrequest_number-1j-=requestj; 即試分配安全檢測safetyCheck()是否檢測成功安全檢測safetyCheck()結(jié) 束availablej+=requestj;allocationrequest_number-1j-=requestj; needrequest_number-1j+=requestj; 恢復(fù)資源狀況調(diào)用display()顯示資源情況Y 主函數(shù)main()創(chuàng)建Banker的實例。調(diào)用實例的inputData()函數(shù)輸入各進(jìn)程的資源概況,及系統(tǒng)當(dāng)前擁有的資源概況。調(diào)用實例的display()函數(shù)首次顯示。調(diào)用實例的safetyCheck()

14、首次安全檢測。調(diào)用實例的divideSource()執(zhí)行銀行家算法。2 流程圖3 代碼 源程序清單:/ Note:Your choice is C+ IDE#include <iostream>/#include <windows.h>using namespace std; class Banker protected: int available20; int max2020; int allocation2020; int need2020; public: int count_process,count_source; public: void inputDat

15、a(); bool safetyCheck(); void divideSource(int request ,int& request_number);/內(nèi)部設(shè)置某個進(jìn)程提出的需求Request,能否分配 void display();/用戶查看內(nèi)部的保護(hù)型的變量 /void display1(); ; void Banker:inputData() cout<<"請依次輸入進(jìn)程的個數(shù)和資源的個數(shù):n" cin>>count_process>>count_source; cout<<"(提示:已獲得的該類資

16、源的數(shù)量必須小于對該類資源的最大需求量哦!)"<<endl; for(int i=0;i<count_process;i+) for(int j=0;j<count_source;j+) cout<<"請輸入進(jìn)程"<<i+1<<"對第"<<j+1<<"類資源"<<"的最大需求數(shù)量和目前已獲得的數(shù)量:n" cin>>maxij>>allocationij; needij=maxij-all

17、ocationij; for(int j=0;j<count_source;j+) cout<<"請輸入目前系統(tǒng)中第"<<j+1<<"類資源的剩余數(shù)量:n" cin>>availablej; bool Banker:safetyCheck() /控制查詢所有進(jìn)程的次數(shù) int n=1; int work20; bool finish20; for(int j=0;j<count_source;j+) workj=availablej; for(int i=0;i<count_process

18、;i+) finishi= false; /輸出安全序列 cout<<"當(dāng)前時刻安全序列:n" for( i=0;i<count_process;i+) /當(dāng)前進(jìn)程是否符合標(biāo)準(zhǔn), true表示符合 bool flag=true; for(int j=0;j<count_source;j+) if(finishi=true)|(needij>workj) flag=false; break; if(flag) finishi=true;cout<<i+1<<"," for(int j=0;j<co

19、unt_source;j+) workj+=allocationij; if(i=count_process-1) bool flag1=true;/用于檢測是否返回安全標(biāo)志 for(int m=0;m<count_process;m+) if(finishm=false) i=-1; n+;flag1=false;break; if(flag1) return true; if(n>count_process) return false; return false;void Banker:divideSource(int request20 ,int& request_n

20、umber)/記錄超過系統(tǒng)當(dāng)前所剩 資源號int result_dissatisfy20;/記錄有無系統(tǒng)當(dāng)前無法提供足夠資源的進(jìn)程bool dissatisfy=false;/記錄超過最大需求量的資源號int result_passmax20;/記錄有無超過最大需求量的進(jìn)程bool passmax=false;/以下是銀行家算法的核心部分for(int j=0;j<count_source;j+) if(requestj>needrequest_number-1j) result_passmaxj=1;passmax=true; for(j=0;j<count_source;

21、j+) if(requestj>availablej) result_dissatisfyj=1;dissatisfy=true; if(passmax=true) cout<<"該進(jìn)程請求的第" for(int j=0;j<count_source;j+) if(result_passmaxj=1) cout<<j+1<<"、" cout<<"類資源超過最大需求!"<<endl; display(); else if(dissatisfy=true) cout&

22、lt;<"該進(jìn)程請求的第" for(int j=0;j<count_source;j+) if(result_dissatisfyj=1) cout<<j+1<<"、" cout<<"類資源,系統(tǒng)當(dāng)前沒有足夠的數(shù)量為其分配,該進(jìn)程進(jìn)入等待隊列!"<<endl; display(); else /在這里寫試分配代碼和調(diào)用安全檢測函數(shù) for(int j=0;j<count_source;j+) availablej-=requestj; allocationrequest

23、_number-1j+=requestj; needrequest_number-1j-=requestj; cout<<"試分配后:n" display(); if(safetyCheck() cout<<"n" cout<<"系統(tǒng)正在為該進(jìn)程分配資源,請稍等"<<endl; for(int i=0;i<10000;i+); cout<<"分配成功!"<<endl; else cout<<"n無法找到完整的安全序列

24、n" cout<<"為該進(jìn)程分配資源后,系統(tǒng)將陷入不安全狀態(tài)!暫不能將資源分配給該進(jìn)程。"<<endl; for(int j=0;j<count_source;j+) availablej+=requestj; allocationrequest_number-1j-=requestj; needrequest_number-1j+=requestj; display(); void Banker:display()cout<<"以下以"Pn"表示進(jìn)程n,其后面的數(shù)字依次表示對各類資源的最大需

25、求和當(dāng)前已獲得情況"<<endl;cout<<"tt最大需求,tt當(dāng)前獲得情況n"for(int i=0;i<count_process;i+)cout<<"P"<<i+1<<""<<"tt" for(int j=0;j<count_source;j+) cout<<maxij<<"," cout<<"ttt" for(j=0;j<count

26、_source;j+) cout<<allocationij<<"," cout<<"ttt" for(j=0;j<count_source;j+) cout<<needij<<"," cout<<endl; cout<<"以下是系統(tǒng)當(dāng)前的各類資源的數(shù)量:n"for(int j=0;j<count_source;j+) cout<<availablej<<" " cout<

27、;<endl;/*void Banker:display1()cout<<endl;cout<<"tt當(dāng)前需求矩陣"<<endl;for(int i=0;i<count_process;i+) for(int j=0;j<count_source;j+) cout<<needij<<"," cout<<endl; */ int main() int request20; int request_number ; char detection = 'Y'

28、; Banker testApp; testApp.inputData(); testApp.display(); /testApp.display1(); if(testApp.safetyCheck() cout<<"OK!nnnn" while(detection='y'|detection='Y') cout<<"請輸入此時第幾個進(jìn)程請求資源:n"cin>>request_number;cout<<"請依次輸入第"<<request_number<<"個進(jìn)程對第"for(int j=0;j<testApp.count_source

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論