版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計報告課題: 銀行家算法 專業(yè)計算機科學(xué)與技術(shù)學(xué)生姓名班級b計算機072學(xué)號0710604216指導(dǎo)教師信息工程學(xué)院一、實驗要求和實驗?zāi)康膶嶒災(zāi)康模罕菊n程設(shè)計是學(xué)生學(xué)習(xí)完操作系統(tǒng)原理課程后,進行的一次全面的綜合訓(xùn)練,通過課程設(shè)計,讓學(xué)生更好地掌握操作系統(tǒng)的原理及實現(xiàn)方法,加深對操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強學(xué)生的動手能力。實驗要求:從課程設(shè)計的目的出發(fā),通過設(shè)計工作的各個環(huán)節(jié),達到以下教學(xué)要求:兩人一組,每組從所給題目中任選一個(如自擬題目,需經(jīng)指導(dǎo)教師同意),每個學(xué)生必須獨立完成課程設(shè)計,不能相互抄襲,同組者文檔不能相同;設(shè)計完成后,將所完成的工作交由指導(dǎo)教師檢查;要求
2、寫出一份詳細(xì)的設(shè)計報告。二、設(shè)計內(nèi)容:課題一、編制銀行家算法通用程序,并檢測所給狀態(tài)的系統(tǒng)安全性。1)銀行家算法中的數(shù)據(jù)結(jié)構(gòu):可利用資源向量available。這是一個含有m個 元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動態(tài)地改變。availablej=k,則表示系統(tǒng)中現(xiàn)有rj 類資源k個。最大需求矩陣max。這是一個n*m的矩陣,它定義了系統(tǒng)中n個進程中的每一個進程對m類資源的最大需求。如果maxi,j=k,則表示進程i需要rj類資源的最大數(shù)目為k。1. 分配矩陣allocation。這也是一個n*m的
3、矩陣,它定義了系統(tǒng)中每一類資料當(dāng)前已分配給沒一進程的資源數(shù)。如果allocationi,j=k,則表示進程i當(dāng)前已分得rj類資源的數(shù)目為k。需求矩陣need。這也是一個n*m的矩陣,用以表示每一個進程尚需的各類資源數(shù)。如果needi,j=k,則表示進程i還需要rj類資源k個,方能完成其任務(wù)。上述三個矩陣存在如下關(guān)系: needi,j= maxi,j- allocationi,j2)銀行家算法設(shè)requesti 是進程pi的請求向量,如果requesti,j=k,表示進程pi需要k個rj類型的資源。當(dāng)pi發(fā)出資源請求后,系統(tǒng)按下述步驟進行檢查:如果requesti,j= needi,j,便轉(zhuǎn)向步
4、驟2;否則認(rèn)為出錯,因為它所需要的資源數(shù)已超過它所宣布的最大值。三、設(shè)計思路設(shè)計思路a、 設(shè)計進程對各在資源最大申請表示及初值確定。b、 設(shè)定系統(tǒng)提供資源初始狀態(tài)。c、 設(shè)定每次某個進程對各類資源的申請表示。d、 編制程序,依據(jù)銀行家算法,決定其申請是否得到滿足。四、詳細(xì)設(shè)計1、初始化:由用戶輸入數(shù)據(jù),分別對可利用資源向量矩陣available、最大需求矩陣max、分配矩陣allocation、需求矩陣need賦值。2、銀行家算法:在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)始終都處于安全狀態(tài),便可以避免發(fā)
5、生死鎖。銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。它是最具有代表性的避免死鎖的算法。設(shè)進程cusneed提出請求request i,則銀行家算法按如下規(guī)則進行判斷。(1)如果request cusneed i= needcusneedi,則轉(zhuǎn)(2);否則,出錯。(2)如果request cusneed i= availablecusneedi,則轉(zhuǎn)(3);否則,出錯。銀行家算法的數(shù)據(jù)結(jié)構(gòu)假設(shè)有m個進程n類資源,則有如下數(shù)據(jù)結(jié)構(gòu):#define w 10#define r 20int m ; /總進程數(shù)int n ; /資源種類 int all_resourcew;
6、 /各種資源的數(shù)目總和int maxwr; /m個進程對n類資源最大資源需求量int availabler; /系統(tǒng)可用資源數(shù)int allocationwr; /m個進程已經(jīng)得到n類資源的資源量int needwr; /m個進程還需要n類資源的資源量int requestr; /請求資源個數(shù) 3.安全性檢測算法 1)先定義兩個變量,用來表示推算過程的數(shù)據(jù). fn=an,表示推算過程中,系統(tǒng)中剩余資源量的變化. jn=false表示推算過程中各進程是否假設(shè)已完成 系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù):availablei-=requestcusneedi;allocationcusneedi+=re
7、questcusneedi;、needcusneedi-=requestcusneedi;4、安全性檢查算法1)設(shè)置兩個工作向量work=available;finish2)從進程集合中找到一個滿足下述條件的進程,finish=false;need=work;如找到,執(zhí)行(3);否則,執(zhí)行(4)3)設(shè)進程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。work+=allocation;finish=true;goto 24)如所有的進程finish= true,則表示安全;否則系統(tǒng)不安全。 安全狀態(tài): 在某時刻系統(tǒng)中所有進程可以排列一個安全序列:p1,p2,pn,剛稱此時,系統(tǒng)是安全的. 所謂安
8、全序列p1,p2,pn是指對于p2,都有它所需要剩余資源數(shù)量不大于系統(tǒng)掌握的剩余的空間資源與所有pi(ji)所占的資源之和. 不安全狀態(tài)可能產(chǎn)生死鎖.目前狀態(tài) 最大需求 尚需 p1 3 9 6 p2 5 10 5 p3 2 42 在每一次進程中申請的資源,判定一下,若實際分配的話,之后系統(tǒng)是否安全. 銀行家算法的數(shù)據(jù)結(jié)構(gòu). 五、代碼清單#include #include #include #include #include #include const int max_p=20; const int maxa=10; /定義a類資源的數(shù)量 const int maxb=5; const int
9、 maxc=7; typedef struct node int a; int b; int c; int remain_a; int remain_b; int remain_c; bank; typedef struct node1 char name20; int a; int b; int c; int need_a; int need_b; int need_c; process; bank banker; process processesmax_p; int quantity; /初始化函數(shù) void initial() int i; banker.a=maxa; banker.
10、b=maxb; banker.c=maxc; banker.remain_a=maxa; banker.remain_b=maxb; banker.remain_c=maxc; for(i=0;imax_p;i+) strcpy(,); processesi.a=0; processesi.b=0; processesi.c=0; processesi.need_a=0; processesi.need_b=0; processesi.need_c=0; /新加作業(yè) void add() char name20; int flag=0; int t; int ne
11、ed_a,need_b,need_c; int i; coutendl; cout新加作業(yè)endl; coutname; for(i=0;iquantity;i+) if(!strcmp(,name) flag=1; break; if(flag) cout錯誤,作業(yè)已存在endl; else coutneed_a; coutneed_b; coutneed_c; t=1; coutneed_abanker.remain_a) cout錯誤,所需a類資源大于銀行家所剩a類資源banker.remain_b) cout錯誤,所需b類資源大于銀行家所剩b類資源bank
12、er.remain_c) cout錯誤,所需c類資源大于銀行家所剩c類資源endl; t=0; if(t) strcpy(,name); processesquantity.need_a=need_a; processesquantity.need_b=need_b; processesquantity.need_c=need_c; quantity+; cout新加作業(yè)成功endl; else cout新加作業(yè)失敗endl; /為作業(yè)申請資源 void bid() char name20; int i,p; int a,b,c; int flag;
13、 coutendl為作業(yè)申請資源endl; coutname; p=-1; for(i=0;iquantity;i+) if(!strcmp(,name) p=i; break; if(p!=-1) couta; coutb; coutc; flag=1; if(abanker.remain_a)|(aprocessesp.need_a-processesp.a) cout錯誤,所申請a類資源大于銀行家所剩a類資源或該進程還需數(shù)量banker.remain_b)|(bprocessesp.need_b-processesp.b) cout錯誤,所申請b類資源大于銀
14、行家所剩b類資源或該進程還需數(shù)量banker.remain_c)|(cprocessesp.need_c-processesp.c) cout錯誤,所申請c類資源大于銀行家所剩c類資源或該進程還需數(shù)量endl; flag=0; if(flag) banker.remain_a-=a; banker.remain_b-=b; banker.remain_c-=c; processesp.a+=a; processesp.b+=b; processesp.c+=c; cout為作業(yè)申請資源成功endl; else cout為作業(yè)申請資源失敗endl; else cout該作業(yè)不存在endl; /撤
15、消作業(yè) void finished() char name20; int i,p; coutendl撤消作業(yè)endl; coutname; p=-1; for(i=0;iquantity;i+) if(!strcmp(,name) p=i; break; if(p!=-1) banker.remain_a+=processesp.a; banker.remain_b+=processesp.b; banker.remain_c+=processesp.c; for(i=p;iquantity-1;i+) processesi=processesi+1; strcp
16、y(,); processesquantity-1.a=0; processesquantity-1.b=0; processesquantity-1.c=0; processesquantity-1.need_a=0; processesquantity-1.need_b=0; processesquantity-1.need_c=0; quantity-; cout撤消作業(yè)成功endl; else cout撤消作業(yè)失敗endl; /查看資源情況 void view() int i; coutendl查看資源情況endl; cout銀行家所剩資
17、源(剩余資源/總共資源)endl; couta類:banker.remain_a/banker.a; cout b類:banker.remain_b/banker.b; cout c類:banker.remain_c/banker.c; coutendlendl作業(yè)占用情況(已占用資源/所需資源)endl0) for(i=0;iquantity;i+) cout作業(yè)名:endl; couta類:processesi.a/processesi.need_a; cout b類:processesi.b/processesi.need_b; cout c類:proces
18、sesi.c/processesi.need_c; coutendl; else cout當(dāng)前沒有作業(yè)endl; /顯示版權(quán)信息函數(shù) void version() coutendlendl; cout 銀行家算法 endl; coutendlendl; void main() int chioce; int flag=1; initial(); version(); while(flag) cout1.新加作業(yè) 2.為作業(yè)申請資源 3.撤消作業(yè)endl; cout4.查看資源情況 0.退出系統(tǒng)endl; coutchioce; switch(chioce) case 1: add(); break; case 2: bid(); break; case 3: finished(); break; case 4: view(); break; case 0: flag=0; break; default: cout選擇錯誤endlendl; 六、使用說明運行環(huán)境c-free4.0,新建任務(wù)。將編制好的代碼輸入此運行環(huán)境中。按f5:出現(xiàn)如上圖所示窗口。按照提示,新建一個作業(yè):
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 瓷器課程設(shè)計案例范文
- 箕斗提升課程設(shè)計
- 獼猴桃汁 課程設(shè)計
- 2025年度國際貨物買賣合同及國際物流服務(wù)協(xié)議2篇
- 梁模板課程設(shè)計
- 網(wǎng)絡(luò)配置課程設(shè)計內(nèi)容
- 2025年度影像作品版權(quán)授權(quán)及收益分成合同3篇
- 2025版亮化燈具專利授權(quán)使用合同3篇
- 2025版智能電網(wǎng)建設(shè)施工履約擔(dān)保合同3篇
- 游戲治療課程設(shè)計
- 卡通兒童生日快樂成長紀(jì)念相冊PPT模板
- 爾雅學(xué)習(xí)通答案法律基礎(chǔ)
- 2022年低血容量休克復(fù)蘇指南
- 細(xì)胞生物學(xué)知識點
- 三年級脫式計算題一至十
- H型鋼力學(xué)性能計算表
- 二年級上冊語文期末試卷
- 中小微企業(yè)融資情況調(diào)查問卷
- 西門子s7200格式s7200硬件手冊
- 時間序列分析論文
- 職校生個人簡歷自薦信范文模板
評論
0/150
提交評論