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

下載本文檔

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

文檔簡介

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

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

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

4、力和編程邏輯能力在程序設(shè)計(jì)過程中的重要性,在程序調(diào)試程序過程中,我掌握了很多技巧。這為我以后的學(xué)習(xí)奠定了一定的基礎(chǔ)。指導(dǎo)教師評語:成績:填表時(shí)間:指導(dǎo)教師簽名:課程設(shè)計(jì)(大作業(yè))報(bào)告一、 題目分析 借以模擬算法,首先由用戶輸入系統(tǒng)的當(dāng)前狀況,包括系統(tǒng)此時(shí)的進(jìn)程數(shù)量、系統(tǒng)中的資源種類數(shù)目;各個(gè)進(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)程的資源請求(能否分配都要予以合理考慮,并給出提示信息)。每處理完一個(gè)請求都要顯示出系統(tǒng)的當(dāng)前狀況(包括各個(gè)進(jìn)程的資源狀

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

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

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

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

9、est_number-1j則result_passmaxj=1;passmax=true;表示第j類資源超過最大請求,該進(jìn)程有超過最大需求的資源號,系統(tǒng)認(rèn)為出錯(cuò),顯示出資源信息即調(diào)用display();否則轉(zhuǎn)C。B 如果requestjavailablej則result_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; needreq

10、uest_number-1j-=requestj;D 系統(tǒng)執(zhí)行安全檢測算法,檢查是分配后系統(tǒng)是否安全,若安全才真正將資源分配給進(jìn)程否則,將本次是分配作廢,恢復(fù)到試分配之前的資源狀態(tài)。調(diào)用display()顯示資源。(4)void Banker:display()顯示出每個(gè)進(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()檢測某時(shí)刻系統(tǒng)是否處于安全態(tài)。開 始是否請求的

11、所有資源都滿足requsetj=needij是否所有請求的資源小于等于系統(tǒng)擁有量 即Requestj=availablejavailablej-=requestj;allocationrequest_number-1j+=requestj; needrequest_number-1j-=requestj; 即試分配安全檢測safetyCheck()是否檢測成功安全檢測safetyCheck()結(jié) 束availablej+=requestj;allocationrequest_number-1j-=requestj; needrequest_number-1j+=requestj; 恢復(fù)資源狀況

12、調(diào)用display()顯示資源情況Y 主函數(shù)main()創(chuàng)建Banker的實(shí)例。調(diào)用實(shí)例的inputData()函數(shù)輸入各進(jìn)程的資源概況,及系統(tǒng)當(dāng)前擁有的資源概況。調(diào)用實(shí)例的display()函數(shù)首次顯示。調(diào)用實(shí)例的safetyCheck()首次安全檢測。調(diào)用實(shí)例的divideSource()執(zhí)行銀行家算法。2 流程圖3 代碼 源程序清單:/ Note:Your choice is C+ IDE#include /#include using namespace std; class Banker protected: int available20; int max2020; int all

13、ocation2020; int need2020; public: int count_process,count_source; public: void inputData(); bool safetyCheck(); void divideSource(int request ,int& request_number);/內(nèi)部設(shè)置某個(gè)進(jìn)程提出的需求Request,能否分配 void display();/用戶查看內(nèi)部的保護(hù)型的變量 /void display1(); ; void Banker:inputData() coutcount_processcount_source; cou

14、t(提示:已獲得的該類資源的數(shù)量必須小于對該類資源的最大需求量哦!)endl; for(int i=0;icount_process;i+) for(int j=0;jcount_source;j+) cout請輸入進(jìn)程i+1對第j+1類資源maxijallocationij; needij=maxij-allocationij; for(int j=0;jcount_source;j+) cout請輸入目前系統(tǒng)中第j+1availablej; bool Banker:safetyCheck() /控制查詢所有進(jìn)程的次數(shù) int n=1; int work20; bool finish20;

15、for(int j=0;jcount_source;j+) workj=availablej; for(int i=0;icount_process;i+) finishi= false; /輸出安全序列 cout當(dāng)前時(shí)刻安全序列:n; for( i=0;icount_process;i+) /當(dāng)前進(jìn)程是否符合標(biāo)準(zhǔn), true表示符合 bool flag=true; for(int j=0;jworkj) flag=false; break; if(flag) finishi=true;couti+1,; for(int j=0;jcount_source;j+) workj+=allocat

16、ionij; if(i=count_process-1) bool flag1=true;/用于檢測是否返回安全標(biāo)志 for(int m=0;mcount_process) return false; return false;void Banker:divideSource(int request20 ,int& request_number)/記錄超過系統(tǒng)當(dāng)前所剩 資源號int result_dissatisfy20;/記錄有無系統(tǒng)當(dāng)前無法提供足夠資源的進(jìn)程bool dissatisfy=false;/記錄超過最大需求量的資源號int result_passmax20;/記錄有無超過最大需

17、求量的進(jìn)程bool passmax=false;/以下是銀行家算法的核心部分for(int j=0;jneedrequest_number-1j) result_passmaxj=1;passmax=true; for(j=0;javailablej) result_dissatisfyj=1;dissatisfy=true; if(passmax=true) cout該進(jìn)程請求的第; for(int j=0;jcount_source;j+) if(result_passmaxj=1) coutj+1、; cout類資源超過最大需求!endl; display(); else if(diss

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

19、n; display(); if(safetyCheck() coutn; cout系統(tǒng)正在為該進(jìn)程分配資源,請稍等endl; for(int i=0;i10000;i+); cout分配成功!endl; else coutn無法找到完整的安全序列n; cout為該進(jìn)程分配資源后,系統(tǒng)將陷入不安全狀態(tài)!暫不能將資源分配給該進(jìn)程。endl; for(int j=0;jcount_source;j+) availablej+=requestj; allocationrequest_number-1j-=requestj; needrequest_number-1j+=requestj; displ

20、ay(); void Banker:display()cout以下以Pn表示進(jìn)程n,其后面的數(shù)字依次表示對各類資源的最大需求和當(dāng)前已獲得情況endl;couttt最大需求,tt當(dāng)前獲得情況n;for(int i=0;icount_process;i+)coutPi+1tt; for(int j=0;jcount_source;j+) coutmaxij,; coutttt; for(j=0;jcount_source;j+) coutallocationij,; coutttt; for(j=0;jcount_source;j+) coutneedij,; coutendl; cout以下是系

21、統(tǒng)當(dāng)前的各類資源的數(shù)量:n;for(int j=0;jcount_source;j+) coutavailablej ; coutendl;/*void Banker:display1()coutendl;couttt當(dāng)前需求矩陣endl;for(int i=0;icount_process;i+) for(int j=0;jcount_source;j+) coutneedij,; coutendl; */ int main() int request20; int request_number ; char detection = Y; Banker testApp; testApp.inputData(); testApp.display(); /testApp.display1(); if(testApp.safetyCheck() coutOK!nnnn; while(detection=y|detection=Y) coutrequest_number;cout請依次輸入第request_number個(gè)進(jìn)程對第;for(int j=0;jtestApp.count_source;j+) coutj+1、;cout類資源的請求量:n;for(j=0;jrequestj;testApp.divideSource( request, re

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論