版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計報告課題: 銀行家算法 專業(yè)計算機(jī)科學(xué)與技術(shù)學(xué)生姓名班級b計算機(jī)072學(xué)號0710604216指導(dǎo)教師信息工程學(xué)院一、實(shí)驗(yàn)要求和實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)?zāi)康模罕菊n程設(shè)計是學(xué)生學(xué)習(xí)完操作系統(tǒng)原理課程后,進(jìn)行的一次全面的綜合訓(xùn)練,通過課程設(shè)計,讓學(xué)生更好地掌握操作系統(tǒng)的原理及實(shí)現(xiàn)方法,加深對操作系統(tǒng)基礎(chǔ)理論和重要算法的理解,加強(qiáng)學(xué)生的動手能力。實(shí)驗(yàn)要求:從課程設(shè)計的目的出發(fā),通過設(shè)計工作的各個環(huán)節(jié),達(dá)到以下教學(xué)要求:兩人一組,每組從所給題目中任選一個(如自擬題目,需經(jīng)指導(dǎo)教師同意),每個學(xué)生必須獨(dú)立完成課程設(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個進(jìn)程中的每一個進(jìn)程對m類資源的最大需求。如果maxi,j=k,則表示進(jìn)程i需要rj類資源的最大數(shù)目為k。1. 分配矩陣allocation。這也是一個n*m的
3、矩陣,它定義了系統(tǒng)中每一類資料當(dāng)前已分配給沒一進(jìn)程的資源數(shù)。如果allocationi,j=k,則表示進(jìn)程i當(dāng)前已分得rj類資源的數(shù)目為k。需求矩陣need。這也是一個n*m的矩陣,用以表示每一個進(jìn)程尚需的各類資源數(shù)。如果needi,j=k,則表示進(jìn)程i還需要rj類資源k個,方能完成其任務(wù)。上述三個矩陣存在如下關(guān)系: needi,j= maxi,j- allocationi,j2)銀行家算法設(shè)requesti 是進(jìn)程pi的請求向量,如果requesti,j=k,表示進(jìn)程pi需要k個rj類型的資源。當(dāng)pi發(fā)出資源請求后,系統(tǒng)按下述步驟進(jìn)行檢查:如果requesti,j= needi,j,便轉(zhuǎn)向步
4、驟2;否則認(rèn)為出錯,因?yàn)樗枰馁Y源數(shù)已超過它所宣布的最大值。三、設(shè)計思路設(shè)計思路a、 設(shè)計進(jìn)程對各在資源最大申請表示及初值確定。b、 設(shè)定系統(tǒng)提供資源初始狀態(tài)。c、 設(shè)定每次某個進(jìn)程對各類資源的申請表示。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è)進(jìn)程cusneed提出請求request i,則銀行家算法按如下規(guī)則進(jìn)行判斷。(1)如果request cusneed i= needcusneedi,則轉(zhuǎn)(2);否則,出錯。(2)如果request cusneed i= availablecusneedi,則轉(zhuǎn)(3);否則,出錯。銀行家算法的數(shù)據(jù)結(jié)構(gòu)假設(shè)有m個進(jìn)程n類資源,則有如下數(shù)據(jù)結(jié)構(gòu):#define w 10#define r 20int m ; /總進(jìn)程數(shù)int n ; /資源種類 int all_resourcew;
6、 /各種資源的數(shù)目總和int maxwr; /m個進(jìn)程對n類資源最大資源需求量int availabler; /系統(tǒng)可用資源數(shù)int allocationwr; /m個進(jìn)程已經(jīng)得到n類資源的資源量int needwr; /m個進(jìn)程還需要n類資源的資源量int requestr; /請求資源個數(shù) 3.安全性檢測算法 1)先定義兩個變量,用來表示推算過程的數(shù)據(jù). fn=an,表示推算過程中,系統(tǒng)中剩余資源量的變化. jn=false表示推算過程中各進(jìn)程是否假設(shè)已完成 系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù):availablei-=requestcusneedi;allocationcusneedi+=re
7、questcusneedi;、needcusneedi-=requestcusneedi;4、安全性檢查算法1)設(shè)置兩個工作向量work=available;finish2)從進(jìn)程集合中找到一個滿足下述條件的進(jìn)程,finish=false;need=work;如找到,執(zhí)行(3);否則,執(zhí)行(4)3)設(shè)進(jìn)程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。work+=allocation;finish=true;goto 24)如所有的進(jìn)程finish= true,則表示安全;否則系統(tǒng)不安全。 安全狀態(tài): 在某時刻系統(tǒng)中所有進(jìn)程可以排列一個安全序列: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 在每一次進(jìn)程中申請的資源,判定一下,若實(shí)際分配的話,之后系統(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類資源或該進(jìn)程還需數(shù)量banker.remain_b)|(bprocessesp.need_b-processesp.b) cout錯誤,所申請b類資源大于銀
14、行家所剩b類資源或該進(jìn)程還需數(shù)量banker.remain_c)|(cprocessesp.need_c-processesp.c) cout錯誤,所申請c類資源大于銀行家所剩c類資源或該進(jìn)程還需數(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; 六、使用說明運(yùn)行環(huán)境c-free4.0,新建任務(wù)。將編制好的代碼輸入此運(yùn)行環(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保險理賠調(diào)解協(xié)議書
- 馬陸灼傷病因介紹
- (范文)石子項(xiàng)目立項(xiàng)報告
- (2024)洗煤機(jī)項(xiàng)目可行性研究報告寫作范本(一)
- 內(nèi)蒙古包頭市昆都侖區(qū)第九中學(xué)2024-2025學(xué)年八年級上學(xué)期期中考試道德與法治試題-A4
- 2023年網(wǎng)絡(luò)監(jiān)控系統(tǒng)項(xiàng)目融資計劃書
- 2023年LMDPE項(xiàng)目融資計劃書
- 2024秋新滬科版物理八年級上冊教學(xué)課件 第五章 質(zhì)量 第二節(jié) 測量:物體的質(zhì)量
- 2023年氣門嘴項(xiàng)目籌資方案
- 2023年聚烯烴類線纜項(xiàng)目融資計劃書
- 《社會調(diào)查研究與方法》形成性考核冊及參考答案
- 腫瘤所治療所致血小板減少癥診療指南
- 中考英語詞匯
- 2023-2024學(xué)年高一上學(xué)期期末真題綜合測試遼寧卷A地理試題(解析版)
- 《Java程序設(shè)計基礎(chǔ)與應(yīng)用》全套教學(xué)課件
- 2024年山東省濟(jì)南市地理高一上學(xué)期試卷及解答
- 3.3 場域與對話-公共空間里的雕塑 課件-高中美術(shù)人美版(2019)美術(shù)鑒賞
- 廣東省深圳市2024年九年級中考提分訓(xùn)練《六選五》專題練習(xí)
- 2024年永州職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及答案解析
- 注射相關(guān)感染預(yù)防與控制(全文)
- SMP-10-003-00 藥品上市后風(fēng)險管理規(guī)程
評論
0/150
提交評論