試驗四銀行家算法解析_第1頁
試驗四銀行家算法解析_第2頁
試驗四銀行家算法解析_第3頁
試驗四銀行家算法解析_第4頁
試驗四銀行家算法解析_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、操作系統(tǒng)實驗實驗四 銀行家算法學(xué)號 1115107047姓名 吳煒?biāo)砂嗉?1 電子 B華僑大學(xué)電子工程系1、銀行家算法和安全性檢查算法原理操作系統(tǒng)的銀行家算法: 當(dāng)進(jìn)程首次申請資源時, 要測試該進(jìn)程對資源的最 大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當(dāng)前的申請量分配 資源,否則就推遲分配。 當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請資源時, 先測試該進(jìn)程本次申 請的資源數(shù)是否超過了該資源所剩余的總量。 若超過則拒絕分配資源, 若能滿足 則按當(dāng)前的申請量分配資源,否則也要推遲分配。1、程序流程描述。進(jìn)程 i 發(fā)出請求資源申請,(1) 如果 Request j=needi,j,轉(zhuǎn)向步驟 (2),否則認(rèn)為

2、出錯,因為他所需要的資 源數(shù)已經(jīng)超過它所宣布的最大值。(2) 如果: Request ij=availablei,j ,轉(zhuǎn)向步驟 (3) ,否則提示尚無足夠資源, 進(jìn)程 i 需等待。(3) 系統(tǒng)試探著將資源分配給申請的進(jìn)程(有預(yù)先寄存操作) ,并修改下面數(shù) 據(jù)結(jié)構(gòu)中的數(shù)值: Availablei,j= Availablei,j- Request j ; Allocationij= Allocationij+ Request j ; needij= needij- Request j ;(4) 試分配后,執(zhí)行安全性檢查,調(diào)用 check()函數(shù)檢查此次資源分配后系統(tǒng) 是否處于安全狀態(tài)。若安全,才

3、正式將資源分配給進(jìn)程,并修改系統(tǒng)狀態(tài);否則 本次試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓該進(jìn)程等待。(5) 用 do while 循環(huán)語句,實現(xiàn)輸入字符 y/n 控制是否進(jìn)行進(jìn)一步的資源 申請。安全性檢查算法(子程序) :(1) 設(shè)置兩個向量: Work(它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類資 源數(shù)目)在執(zhí)行安全性算法開始時, Work= Available。 Finish(它表示系統(tǒng)是否 有足夠的資源分配給進(jìn)程)初始化, Finishi=false ;當(dāng)有足夠的資源分配給進(jìn)程 時,再令 Finishi=true 。(2) 在進(jìn)程中查找符合以下條件的進(jìn)程: 條件 1:Finishi=fal

4、se ; 條件 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),否則,處 于不安全狀態(tài)。流程圖:嘗試分配資源由于 print 函數(shù)只是把所有信息按矩陣輸出,比較簡單,這里就不寫 流程圖了。2、程序及注釋#include #include #include # define m 50# de

5、fine false 0# define true 1int no1; / 進(jìn)程數(shù)int no2; / 資源數(shù)int r;int allocationmm, maxmm,needmm, availablem;char name1m, name2m;/定義全局變量 void main()void check(); void print();void shoudon(); int i,j,p=0,q=0; char c;int s;int requestm,allocation1mm,need1mm,available1m,fm;int mx54=0,0,1,2,1,7,5,0,2,3,5,6,0

6、,6,5,2,0,6,5,6;int an54=0,0,1,2,1,0,0,0,1,3,5,4,0,6,3,2,0,0,1,4;int ann54=0,0,1,2,1,4,2,0,2,3,5,6,0,6,5,2,0,6,5,6;printf(*n);printf(*sf 銀行家算法演示*n);printf(*n);printf(n1. 演示報告給定系統(tǒng) 1.);printf(n2. 演示報告給定系統(tǒng) 2.( P1提出需要( 0、4、2、0)個資源) );printf(n3. 演示手動輸入系統(tǒng) .);printf(n0. 退出程序 .);printf(n 請選擇( 03 ):);scanf(%d

7、,&s);switch(s)case 1:no1=5; no2=4;for(i=0;ino1;i+)for(j=0;jno2;j+)maxij=mxij;allocationij=anij;break;case 2:no1=5; no2=4; for(i=0;ino1;i+) for(j=0;jno2;j+) maxij=mxij; allocationij=annij; break;case 3:shoudon();break;case 0:printf(n thanks for you watching! n);exit(0);/* 退出程序 */default:printf(n 請輸入有

8、效指令 n); break; /* 提示輸入無效提示 */ for(i=0;ino1;i+)for(j=0;jno2;j+)needij=maxij-allocationij; /根據(jù)輸入的兩個數(shù)組計算出 need 矩陣的值printf( 請輸入 Available 矩陣 n); for(i=0;ino2;i+) scanf(%d,&availablei);print(); check();if(r=1)doq=0;p=0;printf(n 請輸入請求資源的進(jìn)程號 for(j=0;j=no1)printf( 輸入錯誤,請重新輸入: n); continue;else break;printf(

9、n 請輸入該進(jìn)程所請求的資源數(shù) requestj:n);for(j=0;jno2;j+)scanf(%d,&requestj);for(j=0;jneedij) p=1; / 判斷請求是否超過該進(jìn)程所需要的資源數(shù) if(p) printf( 請求資源超過該進(jìn)程資源需求量,請求失??! n); else for(j=0;javailablej) / 判斷請求是否超過可用資源數(shù) q=1;if(q)printf( 沒有做夠的資源分配,請求失??! n);else / 請求滿足條件for(j=0;jno2;j+)available1j=availablej; allocation1ij=allocatio

10、nij;need1ij=needij; / 寄存 (原已分配的資源數(shù)、仍需要的資源數(shù)、 可用的資源數(shù))availablej=availablej-requestj;allocationij+=requestj;needij=needij-requestj;/ 系統(tǒng)嘗試把資源分配給請求的進(jìn)程check(); /檢測分配后的安全性if(r=1)for(j=0;jno2;j+) fj=allocation1ij+requestj;if(fj=maxij)allocationij=0;else allocationij=fj;availablej=available1j+allocation1ij-a

11、llocationij; / 改寫 (已分配的資源 數(shù)、仍需要的資源數(shù)、可用的資源數(shù))needij=need1ij-requestj;else/如果分配后系統(tǒng)不安全for(j=0;jno2;j+)/ 還原 (已分配的資源數(shù)、仍需availablej=available1j; allocationij=allocation1ij; needij=need1ij;要的資源數(shù)、可用的資源數(shù))print();/顯示相關(guān)信息printf( 返回分配前資源數(shù) n);/判斷是否繼續(xù)進(jìn)行資源分配printf(n 你還要繼續(xù)分配嗎? Y or N ?n); c=getche();while(c=y|c=Y);/

12、手動輸入void shoudon() int i,j;printf( 請輸入進(jìn)程總數(shù) :n); scanf(%d,&no1);printf( 請輸入資源種類數(shù) :n); scanf(%d,&no2);printf( 請輸入 Max 矩陣 :n); for(i=0;ino1;i+) for(j=0;jno2;j+)scanf(%d,&maxij);/ 輸入已知進(jìn)程最大資源需求量printf( 請輸入 Allocation 矩陣 :n);for(i=0;ino1;i+)for(j=0;jno2;j+)scanf(%d,&allocationij);/輸入已知的進(jìn)程已分配的資源數(shù)return;/安全

13、算法函數(shù) void check() int k,f,v=0,i,j;int workm,am; int finishm;/安全標(biāo)志/ 初始化進(jìn)程均沒得到足夠資源數(shù),未完成r=1;for(i=0;ino1;i+) finishi=false;for(i=0;ino2;i+)worki=availablei;k=no1;dofor(i=0;ino1;i+)if(finishi=false)f=1;for(j=0;jworkj) f=0;if(f=1) 的資源數(shù)的進(jìn)程/worki 表示可提供進(jìn)程繼續(xù)運(yùn)行的各類資源數(shù)/找到還沒有完成且需求數(shù)小于可提供進(jìn)程繼續(xù)運(yùn)行 finishi=true; av+=i

14、;/標(biāo)記完成/記錄安全序列號for(j=0;j0);f=1;for(i=0;ino1;i+)if(finishi=false) f=0; break; if(f=0)/判斷是否所有的進(jìn)程都完成/未完成/若有進(jìn)程沒完成,則為不安全狀態(tài)printf( 系統(tǒng)處在不安全狀態(tài)! );r=0; elseprintf(n 系統(tǒng)當(dāng)前為安全狀態(tài),安全序列為: n); for(i=0;ino1;i+)printf(p%d ,ai); /輸出安全序列 /顯示函數(shù)void print() int i,j; printf(n);printf(資源分配情況*n);printf( 進(jìn)程名 /號碼| Max| Allocat

15、ion |Need |n);for (i = 0; i no1; i+) ,i,i);printf( p%d/%dfor (j = 0; j no2; j+) printf(%d ,maxij);for (j = 0; j no2; j+) printf( %d,allocationij); for (j = 0; j no2; j+)printf( %d,needij); printf(n);printf(n);printf( 各類資源可利用的資源數(shù)為 :);for (j = 0; j no2; j+)printf( %d,availablej); printf(n);3、運(yùn)行結(jié)果以及結(jié)論?,F(xiàn)在系統(tǒng)中 A、B、C、D 4 類資源分別還剩 1、5、2、0個,請按銀行家算法回 答:1、現(xiàn)在系統(tǒng)是否處于安全狀態(tài)? 是,且有安全序列 0、2、3 、4、1。2、如果現(xiàn)在進(jìn)程 P1提出需要( 0、4、2、0)個資源的請求,系統(tǒng)能否滿足它的 請求?可以,安全序列仍為 0、2、 3 、4、1。運(yù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

提交評論