下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、計算機(jī)操作系統(tǒng)實驗報告一、實驗名稱:銀行家算法二、實驗?zāi)康模恒y行家算法是避免死鎖的一種重要方法,通過編寫 一個簡單的銀行家算法程序,加深了解有關(guān)資源申請、避免死 鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。三、問題分析與設(shè)計:1、算法思路:先對用戶提出的請求進(jìn)行合法性檢查,即檢查 請求是否大于需要的,是否大于可利用的。若請求合法,則進(jìn) 行預(yù)分配,對分配后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安 全,則分配;若不安全,則拒絕申請,恢復(fù)到原來的狀態(tài),拒 絕申請。2、 銀行家算法步驟:(1)如果Requesti v or二Need,則轉(zhuǎn)向步驟;否則,認(rèn)為出錯,因為它所需要的資源數(shù)已超過它所宣布的最
2、大值。(2) 如果 Request v or二Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)中尚無足夠的資源,進(jìn)程必須等待。(3) 系統(tǒng)試探把要求的資源分配給進(jìn)程 Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:Available二Available-Requesti;Allocatio n=Allocatio n+Request;Need二Need-Request;(4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于 安全狀態(tài)。3、安全性算法步驟:(1)設(shè)置兩個向量 工作向量Work。它表示系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)行所需要的各類資源數(shù)目,執(zhí)行安全算法開始時,Work二Allocatio n; 布爾
3、向量Finish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使 之運(yùn)行完成,開始時先做Fi ni shi=false ,當(dāng)有足夠資源分配給進(jìn) 程時,令 Finishi=true 。(2)從進(jìn)程集合中找到一個能滿足下述條件的進(jìn)程: Fini shi=false Need<or=Work如找到,執(zhí)行步驟(3);否則,執(zhí)行步驟(4 )。(3)當(dāng)進(jìn)程P獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Work二Work+Allocatio n;Fini shi=true;轉(zhuǎn)向步驟(2)(4) 如果所有進(jìn)程的Finishi=true,則表示系統(tǒng)處于安全狀態(tài);否 則,系統(tǒng)處于不安全狀態(tài)
4、。4、流程圖:系統(tǒng)主要過程流程圖銀行家算法流程圖安全性算法流程圖四、實驗代碼:#defi ne M 5#defi ne N 3#i nclude <stdio.h> /本實驗中使用到的庫函數(shù)#i nclude <stdlib.h>#in elude <stri ng.h>in t max 51;/開始定義銀行家算法中需要用到的數(shù)據(jù)int allocatio n5 1;int need 51;int available1;int request51;char *fini sh5;int safe5;int n,i,m;int k=0;int j=0;int w
5、ork1;int works51;void lin e() II美化程序,使程序運(yùn)行時更加明朗美觀printf(”-n ”);void start() II 表示銀行家算法開始lin e();printf(”銀行家算法開始n");prin tf("-死鎖避免方法n");lin e();void en d()/表示銀行家算法結(jié)束lin e();prin tf(”銀行家算法結(jié)束,謝謝使用n");lin e();void in put() /輸入銀行家算法起始各項數(shù)據(jù)for (n=0;n<5;n+)printf("請輸入進(jìn)程P%d的相關(guān)信息:n
6、",n);prin tf("Max:");for (m=0;m<1;m+)scan f("%d", &max nm);prin tf("Allocatio n:");for (m=0;m<1;m+)scan f("%d", &allocatio nn m);for (m=0;m<1;m+)n eed nm=max nm-allocatio nn m;printf("請輸入系統(tǒng)可利用資源數(shù)Available:");for (m=0;m<1;m+)s
7、ea nf("%d",&availablem);void output。/輸出系統(tǒng)現(xiàn)有資源情況lin e();printf("資源情況MaxAllocation NeedAvailablen");printf("進(jìn)程 A A A A n");lin e();for(n=0;n<5;n+)prin tf("P%d%3d%3d%3d", n,max n0,allocatio nn 0, need n0); if (n=0)prin tf("%3d%3dn",available0);el
8、seprin tf("n");lin e();void cha nge() /當(dāng) Requesti,j<=Availablej時,系統(tǒng)把資源分配給進(jìn)程Pi , Availablej和 Needi,j發(fā)生改變for (m=0;m<1;m+)availablem-=requestim;allocati on im+=requestim;n eedim_=requestim;void outputsafe() /輸出安全序列的資源分配表printf("該安全序列的資源分配圖如下:n”);lin e();printf("資源情況Work Need A
9、llocation Work+AllocationFi nishn");printf("進(jìn)程 A A A A n");lin e();for(n=0;n<5;n+)prin tf("P%d%9d%3d%3d%5d%12sn",safe n,workssafe n0, need safe n 0,allocatio nsafe n0,workssafe n0+allocatio n safe n 0,fi nis hn );lin e();int check() /安全性算法printf("開始執(zhí)行安全性算法n");fo
10、r (m=0;m<1;m+) / 數(shù)組 work 和 finish 初始化workm=availablem;for (n=0;n<5;n+)fini sh n=" false"safe n=0;k=0;for (m=0;m<5;m+)for (n=0;n<5;n+)if(strcmp(finishn,"false")=0 &&need n0<=work0 ) /查找可以分配資源但尚未分配到資源的進(jìn)程safek=n; / 以數(shù)組safek記下各個進(jìn)程得到分配的資源的順序workssafek0=work0;進(jìn)程執(zhí)
11、行后釋放出work0+=allocatio nn 0; /分配給它的資源finishn="ture" /finishn變?yōu)?以示該進(jìn)程完k+;判斷是否所有進(jìn)程分配資源完成成本次分for (m=0;m<5;m+) /if (strcmp(fi ni shm,"false")=O)printf(”找不到安全序列,系統(tǒng)處于不安全狀態(tài)。n");return 0; /找不到安全序列,結(jié)束check函數(shù),返回0elseif (m=4)/ 此處m=4表示所有數(shù)組 finish的所有元素都為tureprintf(” 找到安全序列 P%d->P%d-
12、>P%d->P%d->P%d,系統(tǒng)是安全的 n”,safe0,safe1,safe2,safe3,safe4);j=1;outputsafe(); /輸出安全序列的資源分配表return 1;void mai n() / 主程序開始start();for (;j=0;) II確認(rèn)輸入數(shù)據(jù)的正確性,若輸入錯誤,重新輸入in put();printf("以下為進(jìn)程資源情況,請確認(rèn)其是否正確:n");output();printf(”數(shù)據(jù)是否無誤:n正確:輸入1n錯誤:輸入0n請輸 入:”);sea nf("%d",&j);print
13、f(”數(shù)據(jù)確認(rèn)無誤,算法繼續(xù)。n");if (check()=O) / 若cheek函數(shù)返回值為0 ,表示輸入的初始數(shù)據(jù)找不到安全序列,無法進(jìn)行下一步,程序結(jié)束en d();exit(0);for(;j=1;)/當(dāng)有多個進(jìn)程請求資源時,循環(huán)開始printf("請輸入請求資源的進(jìn)程i(0、1、2、3、4) : "); /輸入發(fā)出請求向量的進(jìn)程及請求向量sea nf("%d",&i);printf("請輸入進(jìn)程 P%d的請求向量 Request%d : ",i,i);for(n=0;n <1; n+)scan f(
14、"%d",&reques tin);for (;reques ti 0> needi0;)/若請求向量大于需求資源,則認(rèn)為是輸入錯誤,要求重新輸入printf("數(shù)據(jù)輸入有誤,請重試!n請輸入進(jìn)程P%d的請求向量 Request%d :",i,i);for(n=0;n <1; n+)scan f("%d", &requesti n);if(reques ti 0<=available0) /判斷系統(tǒng)是否有足夠資源提供分配printf("系統(tǒng)正在為進(jìn)程P%d分配資源n”,i);chan ge(
15、);/ 分配資源j=0;elseprintf(”系統(tǒng)沒有足夠的資源,進(jìn)程P%d需要等待。n",i);if (j=0) j=0表示系統(tǒng)有足夠資源分配的情況printf("當(dāng)前系統(tǒng)資源情況如下:n"); /輸出分配資源后 的系統(tǒng)資源分配情況output。;if(check()=0) /若找不到安全系列,則之前的資源分配無效printf("本次資源分配作廢,恢復(fù)原來的資源分配狀 態(tài)。n");for (m=0;m<1;m+) /恢復(fù)分配資源前的系統(tǒng)資源狀態(tài)availablem+=requestim;allocati on im-=requesti
16、m;n eedim+=requestim;output(); /輸出系統(tǒng)資源狀態(tài)printf("是否還有進(jìn)程請求資源?n是:輸入1n否:輸入0n請輸入:”);seanf("%d",&j);/若還有進(jìn)程請求資源,j=1 ,之前的for循環(huán)條件滿足en d();五、程序執(zhí)行結(jié)果:銀行家7 軽方法請輸AttPO的相關(guān)信息Ihx: 7Mloca tig: 0請輸入進(jìn)程Pl的相關(guān)信息;lax; 3llocation:2溝輸入進(jìn)程P2的相關(guān)信息=lax:9Mlocation:3請輸入»P3的相關(guān)信息乂 lax: 2Mlocation;2請輸入進(jìn)程P4的相關(guān)信
17、息kx:4Ml (juatlon! U請輸入系統(tǒng)可利用資源數(shù)畑ailable;3 以下芮進(jìn)程資源情覓 請確認(rèn)其是否正確:資源情況 血 Allocation Need Available AAAA7 0 73170374431 3 2 1J2 9362 2 0 嗎生Q生毀據(jù)是否無誤:輸入1 普沽輸入o 青紛k: 1 故據(jù)確認(rèn)無誤,算法繼續(xù)。 刊臺執(zhí)行安全性算法 歩到安全序列Pl->P3->P4->P0->F25系圭趕安全的 r _°、 七 hI 匚占 幾u(yù) JE- rsn 丄 n r該安全序列的資源分配圖如下:資源情況 WorkNe日dAllocation
18、165;ork+Allocation Finish進(jìn)卡呈AAAA5 7 7 7 0_皿2 2 0 0 310 4 7 63 5 7 7 713 4 0 21 tf.turu ture ture ture ture21703744024J001'2'34I n IF始執(zhí)行安全性算法戈到安全序列Pl->P3->P4->P2->P0,系統(tǒng)是安全的 該安全序列的資源分配圖如下:7 15 0 4.2 2 0 4 010 4 5 72 4 6 6 013 4 2 0ture tura ture ture turei 1 o 有入人 還輸輸入 否:輸 是是否請諳輸入請
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《金雀異黃酮抗炎止癢作用及其分子機(jī)理的研究》
- 2024年度財務(wù)咨詢與審計服務(wù)合同
- 2024-2030年籃式嬰兒安全座椅行業(yè)市場現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評估規(guī)劃分析研究報告
- 2024-2030年新版中國燃?xì)鉄驹O(shè)備項目可行性研究報告
- 2024-2030年新版中國沖擊夯項目可行性研究報告
- 2024-2030年塑料清潔袋公司技術(shù)改造及擴(kuò)產(chǎn)項目可行性研究報告
- 2024-2030年北京古玩行業(yè)競爭格局及投資經(jīng)營狀況分析報告
- 2024-2030年全球口罩行業(yè)需求前景及未來發(fā)展規(guī)模預(yù)測報告
- 2024年房屋買賣合同法律效力
- 2024-2030年全球及中國老花眼處方鏡片行業(yè)現(xiàn)狀動態(tài)及投資效益預(yù)測報告
- 《全國技工院校專業(yè)目錄(2022年修訂)》專業(yè)主要信息
- EM277的DP通訊使用詳解
- 醫(yī)學(xué)考博閱讀強(qiáng)化3附答案
- 耐壓絕緣測試報告
- 野獸派 beast 花店 調(diào)研 設(shè)計-文檔資料
- 水泵房每日巡視檢查表
- 杭州市區(qū)汽車客運(yùn)站臨時加班管理規(guī)定
- 墊片沖壓模具設(shè)計畢業(yè)設(shè)計論文
- 冷庫工程特點(diǎn)施工難點(diǎn)分析及對策
- Python-Django開發(fā)實戰(zhàn)
- 小學(xué)道法小學(xué)道法1我們的好朋友--第一課時ppt課件
評論
0/150
提交評論