銀行家算法實驗報告.doc_第1頁
銀行家算法實驗報告.doc_第2頁
銀行家算法實驗報告.doc_第3頁
銀行家算法實驗報告.doc_第4頁
銀行家算法實驗報告.doc_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、計算機(jī)操作系統(tǒng)實驗報告一、實驗名稱: 銀行家算法二、實驗?zāi)康模?銀行家算法是避免死鎖的一種重要方法,通過編寫一個簡單的銀行家算法程序,加深了解有關(guān)資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。三、問題分析與設(shè)計:1、算法思路 :先對用戶提出的請求進(jìn)行合法性檢查,即檢查請求是否大于需要的,是否大于可利用的。若請求合法,則進(jìn)行預(yù)分配,對分配后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安全,則分配;若不安全,則拒絕申請,恢復(fù)到原來的狀態(tài),拒絕申請。2、銀行家算法步驟: (1)如果 Requestior =Need,則轉(zhuǎn)向步驟 (2);否則,認(rèn)為出錯,因為它所需要的資源數(shù)已超過它所宣布的最

2、大值。( 2)如果 Requestor=Available, 則轉(zhuǎn)向步驟( 3);否則,表示系統(tǒng)中尚無足夠的資源,進(jìn)程必須等待。( 3)系統(tǒng)試探把要求的資源分配給進(jìn)程 Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:Available=Available-Requesti;Allocation=Allocation+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=Allocation;布爾向量 F

3、inish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成,開始時先做 Finishi=false,當(dāng)有足夠資源分配給進(jìn)程時,令 Finishi=true 。(2)從進(jìn)程集合中找到一個能滿足下述條件的進(jìn)程: Finishi=false Needor=Work如找到,執(zhí)行步驟( 3);否則,執(zhí)行步驟( 4)。( 3)當(dāng)進(jìn)程 P 獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Work=Work+Allocation;Finishi=true;轉(zhuǎn)向步驟( 2)。( 4)如果所有進(jìn)程的 Finishi=true, 則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。.4、流程圖

4、:系統(tǒng)主要過程流程圖銀行家算法流程圖安全性算法流程圖.四、實驗代碼:/#define M5/#define N3#include /本實驗中使用到的庫函數(shù)#include #include int max51;/開始定義銀行家算法中需要用到的數(shù)據(jù)int allocation51;int need51;int available1;int request51;char *finish5;int safe5;int n,i,m;int k=0;int j=0;int work1;int works51;.void line()/美化程序,使程序運(yùn)行時更加明朗美觀printf(-n);void st

5、art()/表示銀行家算法開始line();printf(銀行家算法開始n);printf(-死鎖避免方法n);line();void end()/表示銀行家算法結(jié)束line();printf(銀行家算法結(jié)束,謝謝使用n);line();void input() /輸入銀行家算法起始各項數(shù)據(jù)for (n=0;n5;n+)printf(請輸入進(jìn)程P%d的相關(guān)信息:n,n);printf(Max:);for (m=0;m1;m+)scanf(%d,&maxnm);printf(Allocation:);for (m=0;m1;m+)scanf(%d,&allocationnm);for (m=0;

6、m1;m+).neednm=maxnm-allocationnm;printf(請輸入系統(tǒng)可利用資源數(shù)Available:);for (m=0;m1;m+)scanf(%d,&availablem);void output() /輸出系統(tǒng)現(xiàn)有資源情況line();printf(資源情況MaxAllocationNeedAvailablen);printf(進(jìn)程AAAA n);line();for(n=0;n5;n+)printf(P%d%3d%3d%3d,n,maxn0,allocationn0,needn0);if (n=0)printf(%3d%3dn,available0);elsepr

7、intf(n);line();void change()/當(dāng) Requesti,j=Availablej時,系統(tǒng)把資源分配給進(jìn)程 Pi , Availablej和 Needi,j發(fā)生改變for (m=0;m1;m+)availablem-=requestim;allocationim+=requestim;.needim-=requestim;void outputsafe()/輸出安全序列的資源分配表printf(該安全序列的資源分配圖如下:n);line();printf( 資源情況 Work Need Allocation Work+Allocation Finishn);printf(

8、進(jìn)程AAAA n);line();for(n=0;n5;n+)printf(P%d%9d%3d%3d%5d%12sn,safen,workssafen0,needsaf en0,allocationsafen0,workssafen0+allocationsafen0 ,finishn);line();int check()/安全性算法printf(開始執(zhí)行安全性算法 n);for (m=0;m1;m+)/數(shù)組 work 和 finish初始化workm=availablem;for (n=0;n5;n+)finishn=false;safen=0;k=0;for (m=0;m5;m+)for

9、 (n=0;n5;n+).if(strcmp(finishn,false)=0 &needn0=work0 )/查找可以分配資源但尚未分配到資源的進(jìn)程safek=n; /以數(shù)組 safek記下各個進(jìn)程得到分配的資源的順序workssafek0=work0;work0+=allocationn0;/進(jìn)程執(zhí)行后釋放出分配給它的資源finishn=ture; /finishn變?yōu)?1 以示該進(jìn)程完成本次分k+;for (m=0;mP%d-P%d-P%d-P%d,系統(tǒng)是安全的 n,safe0,safe1,safe2,safe3,safe4);j=1;outputsafe();/輸出安全序列的資源分配表

10、return 1;.void main() /主程序開始start();for (;j=0;)/確認(rèn)輸入數(shù)據(jù)的正確性,若輸入錯誤,重新輸入input();printf(以下為進(jìn)程資源情況,請確認(rèn)其是否正確:n);output();printf(數(shù)據(jù)是否無誤:n 正確:輸入1n 錯誤:輸入0n 請輸入: );scanf(%d,&j);printf(數(shù)據(jù)確認(rèn)無誤,算法繼續(xù)。n);if (check()=0)/若 check 函數(shù)返回值為0,表示輸入的初始數(shù)據(jù)找不到安全序列,無法進(jìn)行下一步,程序結(jié)束end();exit(0);for(;j=1;)/當(dāng)有多個進(jìn)程請求資源時,循環(huán)開始printf( 請輸

11、入請求資源的進(jìn)程 i(0 、 1、 2、 3、 4) : ); / 輸入發(fā)出請求向量的進(jìn)程及請求向量scanf(%d,&i);printf(請輸入進(jìn)程P%d的請求向量Request%d:,i,i);for(n=0;nneedi0;) /若請求向量大于需求資源,則認(rèn)為是輸入錯誤,要求重新輸入printf( 數(shù)據(jù)輸入有誤,請重試! n 請輸入進(jìn)程 P%d的請求向量 Request%d:,i,i);.for(n=0;n1;n+)scanf(%d,&requestin);if(requesti0=available0) /判斷系統(tǒng)是否有足夠資源提供分配printf(系統(tǒng)正在為進(jìn)程P%d分配資源 n,i

12、);change();/分配資源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;m1;m+)/恢復(fù)分配資源前的系統(tǒng)資源狀態(tài)availablem+=requestim;allocationim-=requestim;needim+=requestim;output();/輸出系統(tǒng)資源狀態(tài).printf(是否還有進(jìn)程請求資源?n 是

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論