版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí) 驗(yàn) 報(bào) 告題 目名 稱C語(yǔ)言實(shí)現(xiàn)銀行家算法院 系信息科學(xué)與工程學(xué)院班 級(jí)完成時(shí)間指導(dǎo)老師本次實(shí)驗(yàn)成績(jī)組長(zhǎng)聯(lián)系電話郵件地址qq/com組員(姓名,學(xué)號(hào))主要任務(wù)程序算法的編寫、實(shí)現(xiàn)、運(yùn)行調(diào)試組員(姓名,學(xué)號(hào))主要任務(wù)實(shí)驗(yàn)報(bào)告的完成組員(姓名,學(xué)號(hào))主要任務(wù)實(shí)驗(yàn)報(bào)告的完成組員(姓名,學(xué)號(hào))主要原理及所參考的資料(包括實(shí)驗(yàn)內(nèi)容及條件)銀行家算法原理:我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當(dāng)于銀行家管理的資金,進(jìn)程向操作系統(tǒng)請(qǐng)求分配資源相當(dāng)于用戶向銀行家貸款。 為保證資金的安全,銀行家規(guī)定: (1) 當(dāng)一個(gè)顧客對(duì)資金的最大需求量不超過銀行家現(xiàn)有的資金時(shí)就可接納該顧客; (2) 顧客可
2、以分期貸款,但貸款的總數(shù)不能超過最大需求量; (3) 當(dāng)銀行家現(xiàn)有的資金不能滿足顧客尚需的貸款數(shù)額時(shí),對(duì)顧客的貸款可推遲支付,但總能使顧客在有限的時(shí)間里得到貸款; (4) 當(dāng)顧客得到所需的全部資金后,一定能在有限的時(shí)間里歸還所有的資金. 操作系統(tǒng)按照銀行家制定的規(guī)則為進(jìn)程分配資源,當(dāng)進(jìn)程首次申請(qǐng)資源時(shí),要測(cè)試該進(jìn)程對(duì)資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當(dāng)前的申請(qǐng)量分配資源,否則就推遲分配。當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請(qǐng)資源時(shí),先測(cè)試該進(jìn)程本次申請(qǐng)的資源數(shù)是否超過了該資源所剩余的總量。若超過則拒絕分配資源,若能滿足則按當(dāng)前的申請(qǐng)量分配資源,否則也要推遲分配。主要參考書:計(jì)算機(jī)操
3、作系統(tǒng)第三版 西安電子科技大學(xué)出版社 湯子瀛主編主要算法流程圖和具體實(shí)驗(yàn)步驟主要算法流程圖和具體實(shí)驗(yàn)步驟算法流程圖:附錄1 - 銀行家算法流程圖附錄2 - 安全性算法流程圖實(shí)驗(yàn)步驟:一銀行家算法進(jìn)程i發(fā)出請(qǐng)求資源申請(qǐng), (1)如果Request j<=needi,j,轉(zhuǎn)向步驟(2),否則認(rèn)為出錯(cuò),因?yàn)樗枰馁Y源數(shù)已經(jīng)超過它所宣布的最大值。(2)如果:Request ij<=availablei,j,轉(zhuǎn)向步驟(3),否則表示尚無足夠資源,進(jìn)程i需等待。(3)若以上兩個(gè)條件都滿足,則系統(tǒng)試探著將資源分配給申請(qǐng)的進(jìn)程,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:Availablei,j= Avail
4、ablei,j- Request j;Allocationij= Allocationij+ Request j;needij= needij- Request j;(4)試分配后,執(zhí)行安全性檢查,調(diào)用check()函數(shù)檢查此次資源分配后系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程;否則本次試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓該進(jìn)程等待。(5)用dowhile 循環(huán)語(yǔ)句實(shí)現(xiàn)輸入字符y/n判斷是否繼續(xù)進(jìn)行資源申請(qǐng)。二安全性檢查算法(check()函數(shù))(1)設(shè)置兩個(gè)向量:工作向量Work,它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類資源數(shù)目,在執(zhí)行安全性算法開始時(shí),Work= Avail
5、able。工作向量Finish,它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成。開始時(shí)先做Finishi=false;當(dāng)有足夠的資源分配給進(jìn)程時(shí),再令Finishi=true。(2)在進(jìn)程中查找符合以下條件的進(jìn)程:條件1:Finishi=false;條件2:needij<=Workj若找到,則執(zhí)行步驟(3)否則,執(zhí)行步驟(4)(3)當(dāng)進(jìn)程獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Workj= Workj+ Allocationij;Finishi=true;goto step (2);(4)如果所有的Finishi=true都滿足,則表示系統(tǒng)處于安全狀態(tài),否
6、則,處于不安全狀態(tài)。程序源代碼及調(diào)試結(jié)果附錄3 - 程序源代碼附錄4 - 程序運(yùn)行調(diào)試結(jié)果實(shí) 驗(yàn) 心 得本次實(shí)驗(yàn)我負(fù)責(zé)程序的編寫方面,雖然基礎(chǔ)一般,但是我仍然堅(jiān)持花了三天的時(shí)間終于把程序拿下,這是讓自己很欣慰的事,本次實(shí)驗(yàn)不僅讓我對(duì)銀行家算法有了更深入的理解,并且還讓我的編程能力得到了較大提高,希望能有更多這樣的機(jī)會(huì),借此較好的鍛煉自己,從而更好的掌握和運(yùn)用自己的專業(yè)知識(shí),提高能力水平。本次實(shí)驗(yàn)相對(duì)于c基礎(chǔ)并不好的我有一定的難度,所以我在程序方面所做的較少。而對(duì)銀行家算法了解的比較透徹,在程序設(shè)計(jì)的原理和流程圖方面做的工作較多,本次實(shí)驗(yàn)我學(xué)到的東西好多,也知道自己在很多方面的不足,雖然我給自己
7、的發(fā)展方向定位為硬件方向,但是對(duì)C語(yǔ)言還是要進(jìn)一步的學(xué)習(xí)。 YNYNYNYN系統(tǒng)初始化輸入進(jìn)程個(gè)數(shù)no1輸入資源類數(shù)no2輸入進(jìn)程最大需求矩陣Max、已分配矩陣Allocation和可利用資源矩陣Available打印輸出此時(shí)資源分配情況表Need=Max-Allocation輸入欲申請(qǐng)資源進(jìn)程號(hào)輸入是否合法輸入該進(jìn)程申請(qǐng)的資源量Request>Need?繼續(xù)分配(Y)?or退出(N)?Request>Available?預(yù)分配調(diào)用check()函數(shù)進(jìn)行安全性檢查退出系統(tǒng)附錄 1銀行家算法流程圖附錄 2安全性算法流程圖調(diào)用check()函數(shù)work=availablefinish=
8、false need<=workfinish=false ?work=work+allocationfinish=trueYN所有進(jìn)程的finish=true?YN輸出安全序列,并打印出當(dāng)前資源分配情況輸出提示:系統(tǒng)不安全調(diào)用結(jié)束附錄3程序源代碼:#include <stdio.h>#include <stdlib.h>#include <conio.h> # define m 50 int no1; /進(jìn)程數(shù)int no2; /資源數(shù)int r;int allocationmm,needmm,availablem,maxmm; char name1m
9、,name2m; /定義全局變量void main()void check();void print();int i,j,p=0,q=0;char c;int requestm,allocation1mm,need1mm,available1m;printf("*n");printf("* 銀行家算法的設(shè)計(jì)與實(shí)現(xiàn) *n"); printf("*n");printf("請(qǐng)輸入進(jìn)程總數(shù):n");scanf("%d",&no1);printf("請(qǐng)輸入資源種類數(shù):n");s
10、canf("%d",&no2); printf("請(qǐng)輸入Max矩陣:n");for(i=0;i<no1;i+)for(j=0;j<no2;j+)scanf("%d",&maxij); /輸入已知進(jìn)程最大資源需求量printf("請(qǐng)輸入Allocation矩陣:n");for(i=0;i<no1;i+)for(j=0;j<no2;j+)scanf("%d",&allocationij); /輸入已知的進(jìn)程已分配的資源數(shù) for(i=0;i<no
11、1;i+)for(j=0;j<no2;j+)needij=maxij-allocationij; /根據(jù)輸入的兩個(gè)數(shù)組計(jì)算出need矩陣的值 printf("請(qǐng)輸入Available矩陣n");for(i=0;i<no2;i+)scanf("%d",&availablei); /輸入已知的可用資源數(shù)print(); /輸出已知條件check(); /檢測(cè)T0時(shí)刻已知條件的安全狀態(tài)if(r=1) /如果安全則執(zhí)行以下代碼do q=0; p=0;printf("n請(qǐng)輸入請(qǐng)求資源的進(jìn)程號(hào)(04):n");for(j=0;
12、j<=10;j+)scanf("%d",&i);if(i>=no1)printf("輸入錯(cuò)誤,請(qǐng)重新輸入:n"); continue; else break;printf("n請(qǐng)輸入該進(jìn)程所請(qǐng)求的資源數(shù)requestj:n");for(j=0;j<no2;j+)scanf("%d",&requestj);for(j=0;j<no2;j+)if(requestj>needij) p=1; /判斷請(qǐng)求是否超過該進(jìn)程所需要的資源數(shù)if(p)printf("請(qǐng)求資源超
13、過該進(jìn)程資源需求量,請(qǐng)求失?。");elsefor(j=0;j<no2;j+)if(requestj>availablej) q=1; /判斷請(qǐng)求是否超過可用資源數(shù)if(q) printf("沒有做夠的資源分配,請(qǐng)求失敗!n");else /請(qǐng)求滿足條件for(j=0;j<no2;j+) available1j=availablej; allocation1ij=allocationij;need1ij=needij; /保存原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)availablej=availablej-requestj; alloc
14、ationij+=requestj;needij=needij-requestj; /系統(tǒng)嘗試把資源分配給請(qǐng)求的進(jìn)程print();check(); /檢測(cè)分配后的安全性if(r=0) /如果分配后系統(tǒng)不安全for(j=0;j<no2;j+)availablej=available1j; allocationij=allocation1ij; needij=need1ij; /還原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)printf("返回分配前資源數(shù)n");print();printf("n你還要繼續(xù)分配嗎?Y or N ?n"); /判斷是
15、否繼續(xù)進(jìn)行資源分配c=getche();while(c='y'|c='Y');void check() /安全算法函數(shù)int k,f,v=0,i,j;int workm,am;bool finishm;r=1;for(i=0;i<no1;i+)finishi=false; / 初始化進(jìn)程均沒得到足夠資源數(shù)并完成for(i=0;i<no2;i+) worki=availablei;/worki表示可提供進(jìn)程繼續(xù)運(yùn)行的各類資源數(shù)k=no1;dofor(i=0;i<no1;i+)if(finishi=false)f=1;for(j=0;j<no
16、2;j+)if(needij>workj)f=0;if(f=1) /找到還沒有完成且需求數(shù)小于可提供進(jìn)程繼續(xù)運(yùn)行的資源數(shù)的進(jìn)程finishi=true;av+=i; /記錄安全序列號(hào)for(j=0;j<no2;j+)workj+=allocationij; /釋放該進(jìn)程已分配的資源k-; /每完成一個(gè)進(jìn)程分配,未完成的進(jìn)程數(shù)就減1while(k>0);f=1;for(i=0;i<no1;i+) /判斷是否所有的進(jìn)程都完成if(finishi=false) f=0;break;if(f=0) /若有進(jìn)程沒完成,則為不安全狀態(tài)printf("系統(tǒng)處在不安全狀態(tài)!&
17、quot;);r=0;elseprintf("n系統(tǒng)當(dāng)前為安全狀態(tài),安全序列為:n");for(i=0;i<no1;i+)printf("p%d ",ai); /輸出安全序列void print() /輸出函數(shù)int i,j;printf("n");printf("*此時(shí)刻資源分配情況*n");printf("進(jìn)程名/號(hào) | Max | Allocation | Need |n"); for (i = 0; i < no1; i+)printf(" p%d/%d ",i,i); for (j = 0; j < no2; j+) printf("%d ",maxij);for (j = 0; j < no2; j+) printf(" %d ",allocationij);for (j =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Venlo型溫室非均勻環(huán)境通風(fēng)策略研究
- 勝利精密商譽(yù)減值后的盈余管理行為及影響分析
- MiRNA在沙蔥螢葉甲生長(zhǎng)發(fā)育中的調(diào)控作用
- 2025年度贈(zèng)與房屋裝修設(shè)計(jì)與施工質(zhì)量保證協(xié)議
- 漆酶催化植物染料五倍子對(duì)竹漿纖維織物的染色研究
- 二零二五年度跨境電商銷售返利合作協(xié)議
- 二零二五年度酒店前臺(tái)員工工作時(shí)長(zhǎng)與休息時(shí)間規(guī)定合同
- 2025年度酒店家具設(shè)計(jì)與生產(chǎn)一體化采購(gòu)合同
- 二零二五年度貨運(yùn)代理委托合同范本(含合同解除)
- 二零二五年度土地一級(jí)開發(fā)合同
- 山東省桓臺(tái)第一中學(xué)2024-2025學(xué)年高一上學(xué)期期中考試物理試卷(拓展部)(無答案)
- 中華人民共和國(guó)保守國(guó)家秘密法實(shí)施條例培訓(xùn)課件
- 管道坡口技術(shù)培訓(xùn)
- 2024年全國(guó)統(tǒng)一高考英語(yǔ)試卷(新課標(biāo)Ⅰ卷)含答案
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識(shí) CCAA年度確認(rèn) 試題與答案
- 皮膚儲(chǔ)存新技術(shù)及臨床應(yīng)用
- 外研版七年級(jí)英語(yǔ)上冊(cè)《閱讀理解》專項(xiàng)練習(xí)題(含答案)
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
- 上海市復(fù)旦大學(xué)附中2024屆高考沖刺模擬數(shù)學(xué)試題含解析
- 幼兒園公開課:大班健康《國(guó)王生病了》課件
- 小學(xué)六年級(jí)說明文閱讀題與答案大全
評(píng)論
0/150
提交評(píng)論