


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課程設計報告課程設計名稱:銀行家算法模擬實現系 :學生姓名:班 級:學 號:成 績:指導教師:開課時間:學年學期題目要求:一. 設計題目銀行家算法模擬實現二. 主要內容設計目的1、了解多道程序系統中,多個進程并發執行的資源分配。2、掌握思索的產生原因、產生死鎖的必要條件和處理死鎖的基本方法。3、掌握預防死鎖的方法,系統安全狀態的基本概念。4、掌握銀行家算法,了解資源在進程并發執行中的資源分配策略。5、理解死鎖避免在當前計算機系統不常使用的原因。三. 具體要求設計一個n個并發進程共享 m個系統資源的系統,進程可動態申請資源和釋放資源,系統按各進程的申請動態的分配資源。要求采用銀行家算法實現。四.
2、 進度安排五. 成績評定考核方法:根據學生平時表現、測試檢查、課程設計報告、運行演示和學生回答問題相 結合的形式作為考核依據,考察學生的動手能力,獨立分析解決問題的能力和創新精神, 并根據學生的學習態度綜合考評。平時表現(占30%,課程設計報告(占 40%,課程答辯(占 30%。成績評定:成績分“優秀”、“良好”、“中等”、“及格”、“不及格”五個級別。“優秀”為100分到90分,“良好”為89分到80分,“中等”為79分到70分,“及格” 為69分到60分,“不及格”為 60分以下。目錄1. 需求分析序號內容時間(天)1熟悉課題、分析課題0.52對系統進行模塊分解,問題分析和確定解決方案13
3、編程調試34測試和差錯15書寫課程設計報告16考核1合計7.52.概要設計 32. 概要設計 33詳細設計 64. 調試分析 125. 總結 161需求分析1、始化這組進程的最大資源請求和一次申請的資源序列。把各進程已占用和需求資源 情況記錄在進程控制塊中。假定進程控制塊的內容包括:進程名,狀態,當前申請量,資源 需求總量,已占資源量,能執行完標志。其中,進程的狀態有:就緒,等待和完成。當系統不能滿足進程的資源請求時,進程出于等待狀態。資源需求總量表示進程運行過程中對資源 的總的需求量。已占資源量表示進程目前已經得到但還為歸還的資源量。因此,進程在以后還需要的剩余資源量等于資源需要總量減去已占
4、資源量。陷入每個進程的資源需求總量不應超過系統擁有的資源總量。2、 銀行家算法分配資源的原則是:當某個進程提出資源請求時,假定先分配資源給它,然后查找各進程的剩余請求,檢查系統的剩余資源量是否由于進程的分配而導致系統死鎖。若能,則讓進程等待,否則,讓進程的假分配變為真分配。A)查找各進程的剩余請求,檢查系統的剩余資源量是否能滿足其中一進程,如果能, 則轉B )。B)將資源分配給所選的進程,這樣,該進程已獲得資源最大請求,最終能運行完成。 標記這個進程為終止進程,并將其占有的全部資源歸還給系統。重復第A步和B)步,直到所有進程都標記為終止進程,或知道一個死鎖發生。若所有 進程都標記為終止進程,則
5、系統的初始狀態是安全的,否則為不安全的。若安全,則正式將資源分配給它,否則,假定的分配作廢,讓其等待。2概要設計2.1設計思想當某個進程提出資源請求時,假定先分配資源給它, 然后查找各進程的剩余請求,檢查系統的剩余資源量是否由于進程的分配而導致系統死鎖。若能,則讓進程等待,否則, 讓進程的假分配變為真分配。2.2數據結構假設有m個進程,則有如下數據結構:#define w 50 / 宏定義 #defi ne r 50 / 宏定義 int m; /總進程數 int allw;各種資源的數目總和 int maxwr; m 個進程最大資源需求量 int availabler; /系統可用資源數 in
6、t allocatio nwr; m個進程已經得到資源的資源量int needwr; m 個進程還需要資源的資源量 int requestr; /請求資源個數2.3 程序流程圖開始i=1Yi<=mNNYi+YNY結束錯 誤max<=資源總數Need矩陣為初始化need輸入該進程的資源請求量Request調用銀行家算法,及安全性算 法,完成分配,或并給出提示輸入進程i的最大需求向量max輸入進程數 m,各資源總數,初始化 Available向量任選一個進程作為當前進程(0到m-1)該進程的Need向量為0該進程已運行結 束3. 詳細設計3.1算法思想銀行家算法的基本思想是分配資源之前
7、,判斷系統是否是安全的;若是,才分 配。否則拒絕分配。3.2銀行家算法設Requestn,是進程的請求向量,如果Requestn=m,則表示該進程需要 m個資源。當該進程發出資源請求后,系統按下述步驟進行檢查:(1) 如果Requestn=Needi,n,便轉向步驟(2);否則認為出錯,因為它所需要的資源數 已經超過它所宣布的最大值。如果Requestn'Available,則進程i進入等待資源狀態,返回。(3)假設進程i的申請已獲批準,于是修改下面數據結構中的數值:Available=Available-RequestAllocati on=Allocati on+RequestNe
8、ed=Need-Request(4)系統執行安全性檢查,如安全,則分配成立;否則恢復原來的資源分配狀態,系統恢復 原狀,進程等待。程序void ban k()/銀行家算法int i=0,j=0;char flag='Y'while(flag='Y'|flag='y')i=-1;while(i<O|i>=m)cout<<"請輸入需申請資源的進程號(從 0到"<<m-1<<"):"cin> >i;if(i<0|i>=m)cout<&l
9、t;"該進程號不存在,請重新輸入!"<<e ndl;cout<<"請輸入進程"<<i<<"申請的資源數:"for (j=0;j<1;j+)cout<<""cin>> requestj;if(requestj>needij)/若請求的資源數大于進程還需要i類資源的資源量jcout<<"進程"<<i<<"申請的資源數大于進程"<<i<<&
10、quot;還需要資源的資源量!" cout<<"申請不合理,請重新選擇!"<<endl<<endl;flag='1:break;elseif(requestj>available|j) /若請求的資源數大于可用資源數cout<<"進程"<<i<<"申請的資源數大于系統可用資源的資源量!";cout<<"申請不合理!請重新選擇!"<<endl<<endl;flag='1'
11、break;if(flag='Y'|flag='y')change(i); /調用change(i)函數,改變資源數if(chkerr(i) /若系統安全rstore(i); /調用rstore(i)函數,恢復資源數show();/輸出資源分配情況else/若系統不安全show(); /輸出資源分配情況else 若 flag=N|flag=nshow();cout<<e ndl;cout<<"是否繼續(Y/N):"cin> >flag;3.3安全性檢查算法(1) 設置兩個工作向量Work=Available
12、 ; FinishM=False(2) 從進程集合中找到一個滿足下述條件的進程,Finish i=FalseNeed<=Work如找到,執行(3);否則,執行(4)(3) 設進程獲得資源,可順利執行,直至完成,從而釋放資源。Work=Work+Allocati onFini sh=TrueGO TO 2如所有的進程 FinishM=true,則表示安全;否則系統不安全。程序int chkerr(int s) / 檢查安全性 int work,FI nlSHw;int i,j,k=O;for(i=0;i<m;i+)FI nlSHi=false;for(j=0;j<1;j+)wo
13、rk=availablej;i=s;doif(FI nlSHi=false&&n eedij<=work)work=work+allocatio nij;Fin ISHi=true;i=0;else i+;while(i<m);for(i=0;i<m;i+)if(FI nlSHi=false)cout<<e ndl;cout<<"系統不安全!!!本次資源申請不成功!!"<<endl;cout<<e ndl;return 1;cout<<e ndl;cout<<"
14、;系統安全,分配成功。"<<endl;cout<<e ndl;return 0;3.4 修改數據結構中的數值改變可用資源和已經拿到資源和還需要的資源的值void cha nge(i nt k) int j;for (j=0;j<1;j+)availablej=availablej-requestj; allocationkj=allocationkj+requestj; needkj=needkj-requestj;3.5 如果分配失敗,則恢復原來的資源分配狀態 恢復可用資源和已經拿到資源和還需要的資源的值 void rstore(int k)int j
15、;availablej=availablej+requestj; allocationkj=allocationkj-requestj; needkj=needkj+requestj;3.6 輸出顯示實現人機交互的各類資源輸出顯示情況。void show() / 輸出資源分配情況int i,j;cout<<" 資源總量 :"<<" "for (j=0;j<1;j+)cout<<" "<<allj;cout<<endl<<endl;cout<<&q
16、uot; 系統目前資源可用數 :"<<" "for (j=0;j<1;j+)cout<<" "<<availablej;cout<<endl<<endl;cout<<" 進程名 各進程還需要的資源量 "<<endl;for (i=0;i<m;i+)for (i=0;i<m;i+)cout<<" 進程 "<<i<<":"for (j=0;j<1;
17、j+)cout<<needij<<""cout<<endl;cout<<endl;cout<<" 進程名 各進程已經得到的資源量 "<<endl;for (i=0;i<m;i+)cout<<" 進程 "<<i<<":"for (j=0;j<1;j+)cout<<allocationij<<"cout<<endl;cout<<endl;voi
18、d change(int k) / 改變可用資源和已經拿到資源和還需要的資源的值int j;for (j=0;j<1;j+) availablej=availablej-requestj; allocationkj=allocationkj+requestj; needkj=needkj-requestj;3.7 主函數void main() / 主函數int i=0,j=0,p;cout<<" 銀行家算法模擬 "<<endl;cout<<" 請輸入總進程數 :"cin>>m;cout<<
19、" 請輸入總資源數 :"for(i=0;i<1;i+)cin>>alli;cout<<" 依次輸入各進程所需要的最大資源數量 :"<<endl;for (i=0;i<m;i+)for (j=0;j<1;j+)do cin>>maxij; if (maxij>allj) cout<<endl<<" 占有資源超過了聲明的該資源總數 ,請重新輸入 "<<endl; while (maxij>allj);cout<<&
20、quot; 依次輸入各進程已經占據的資源數量 :"<<endl;for (i=0;i<m;i+)for (j=0;j<1;j+)docin>>allocationij;if (allocationij>maxij)cout<<endl<<" 占有資源超過了聲明的最大資源 ,請重新輸入 "<<endl; while (allocationij>maxij);/初始化資源數量for (j=0;j<1;j+) p=allj;for (i=0;i<m;i+) p=p-alloc
21、ationij;/ 減去已經被占據的資源 availablej=p;if(availablej<0) availablej=0;for (i=0;i<m;i+) for(j=0;j<1;j+)needij=maxij-allocationij;show();bank();3.8 定義全局變量#include "string.h" #include "iostream" using namespace std;#define false 0#define true 1#define w 50 / 宏定義#define r 50 / 宏定義
22、int m; / 總進程數int allw;/ 各種資源的數目總和int maxwr; /m 個進程最大資源需求量int availabler; / 系統可用資源數int allocationwr; /m 個進程已經得到資源的資源量int needwr; /m 個進程還需要資源的資源量int requestr; / 請求資源個數4.調試分析TJ :0 S123 Debug123.exe 匸忑W匚7匚浪行家算袪模擬髄梯世程針親邊歆詈蠶黑要的最趣源數量3耘輸幾各進程已經占據的資源數量:12矗源總量:価名0 1 2 口王口王口王口王 二.1二.1二.1二.1各進程還需要的資源量221名0 1 2 口
23、王口王口王口王 -b-. L-.l k-.I L-. -UI- - - A - - UI- - - A各進程已經得到的資源量1負從0到2)詢1系統安全,:分配戒功。廣源總量:佃系統目前資源可用數,4名0 1 2 呈口王口王口王 -kl- - - A - - kl- - - A各進程還需要的資源量121名0 1 2 口王口王口王口王 二.-1一.1二.1二.1各進程已經得到的資源量2圖4-1圖4-1這里為3個進程(進程)共用10個資源,分別需要的最大資源數為3,4,3.已經占有的資源數為:1,2,2.分配給0號進程1個資源,系統安全,分配成功3從0到2);12各進程已經得到的資源量322各進程還
24、需要的資源量 曲21餐源總量:1S系統安全,為配戒功。備迸程已經得到的資源屢系統目前資源可用數,3資源總量:佃系絨安全,為配戒功。奮氟蹇耀靜的進程號從0到2)旳請鎰入透程睥請的資源數:1名0 1 2 H鴕令雖12名0:1:2:系統目前資源可用數,1進進進進各進程還需要的資源量1進程名 各進程已經得到的資源量圖4-24-2再分配給0號進程1個資源,系統安全,分配成功zy 0灼申程續專繼入入不S曰SIR請(1至0從2)H:12承De bug'各進程還需要的資源量121各進程已經得到的資源量2系統安全,分配成功。10系統目前資源可用數:3各進程還需要的資源量Q21各進程已經得到的資源量3否繼續¥/N: y申請不合理,請重新選擇?i招嚮鶉艇舉儲還需要資源的資源量?10系統目前資源可用數:3圖4-34-3分配給1號進程3個資源,因為1號資源還需要2個即達到最大需要資源數,故申 請不合理,分配不成功'主系統目前資源可用數:1名0:1:I®各進程還需要的資源量1名0:1:I
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省泉州實驗中學重點達標名校2024屆十校聯考最后數學試題含解析
- 零售業2025年會員制度創新模式與顧客忠誠度構建策略報告
- 高三上學期數學期末總結模版
- 區塊鏈技術在物聯網的應用探索
- 以數據說話看區塊鏈如何重塑辦公行業
- 醫患溝通在糖尿病中醫治療中的關鍵作用
- 小學生元旦班級活動策劃書
- 小學數學公開課《乘法分配律》小學數學評課稿
- 農光互補光伏發電項目潛力分析與發展前景
- 環保水處理設備行業趨勢與市場前景洞察
- 學校食堂蔬菜配送合同范本
- 建筑物外墻廣告牌拆除方案
- 2024高考物理一輪復習第66講分子動理論內能(練習)(學生版+解析)
- 輔警考試公安基礎知識考試試題庫及答案
- TWJQMA 010-2024 露地甜瓜改良式滴灌栽培技術
- 8推翻帝制 民族覺醒 (第三課時)教學設計-五年級下冊道德與法治
- 2024年北京東城區中考一模數學試題(含答案解析)
- 2024年歐洲干混砂漿市場主要企業市場占有率及排名
- 中小學違規征訂教輔材料問題專項整治實施方案
- 《無人機測繪技能訓練模塊》課件-模塊13:無人機航測綜合生產案例
- 2024年滬教版六年級下冊數學期末測試卷及答案1套
評論
0/150
提交評論