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

下載本文檔

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

文檔簡介

實驗報告三——銀行家算法姓名:叢菲學(xué)號:20100830205班級:信息安全二班一、實習(xí)內(nèi)容運用某種高級語言(如C或C++)模擬銀行家算法的處理過程。二、實習(xí)目的銀行家算法是避免死鎖的代表性算法。本實習(xí)旨在加深了解有關(guān)資源申請、避免死鎖、狀態(tài)安全性等概念,并體會和運用避免死鎖的具體實施方法。然后依照本實習(xí),自行設(shè)計模擬程序。三、實習(xí)題目銀行家算法的模擬提示1我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當(dāng)于銀行家管理的資金,進(jìn)程向操作系統(tǒng)請求分配資源相當(dāng)于用戶向銀行家貸款。操作系統(tǒng)按照銀行家制定的規(guī)則為進(jìn)程分配資源。當(dāng)進(jìn)程首次申請資源時,要測試該進(jìn)程對資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當(dāng)前的申請量分配資源,否則就推遲分配。當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請資源時,先測試該進(jìn)程已占用的資源數(shù)與本次申請的資源數(shù)之和是否超過了該進(jìn)程對資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測試系統(tǒng)現(xiàn)存的資源能否滿足該進(jìn)程尚需的最大資源量,若能滿足則按當(dāng)前的申請量分配資源,否則也要推遲分配。提示2安全狀態(tài):如果存在一個由系統(tǒng)中所有進(jìn)程構(gòu)成的安全序列P1,…,Pn,則系統(tǒng)處于安全狀態(tài)。安全狀態(tài)一定是沒有死鎖發(fā)生。不安全狀態(tài):不存在一個安全序列。不安全狀態(tài)一定導(dǎo)致死鎖。安全序列:一個進(jìn)程序列{P1,…,Pn}是安全的,如果對于每一個進(jìn)程Pi(1≤i≤n),它以后尚需要的資源量不超過系統(tǒng)當(dāng)前剩余資源量與所有進(jìn)程Pj(j<i)當(dāng)前占有資源量之和。提示3設(shè)requesti為進(jìn)程p[i]的請求向量,如果requesti[j]=K,表示進(jìn)程p[i]需要K個Rj資源。當(dāng)系統(tǒng)發(fā)出請求后,系統(tǒng)按下述步驟開始檢查:1)如果requesti[j]<=need[i][j],轉(zhuǎn)向步驟2;否則報告出錯,申請的資源已經(jīng)大于它需要的最大值。2)如果requesti[j]<=available[j],轉(zhuǎn)向步驟3;否則報告出錯,尚無足夠的資源。3)系統(tǒng)試探著把資源分配給p[i],并修改下列數(shù)據(jù)結(jié)構(gòu)中的值:available[j]=available[j]-request[j]allocation[i][j]=allocation[i][j]+request[j]need[i][j]=need[i][j]-request[j]4)系統(tǒng)進(jìn)行安全性算法,檢查此次分配后,系統(tǒng)是否還處于安全狀態(tài),若安全,把資源分配給進(jìn)程p[i];否則,恢復(fù)原來的資源分配狀態(tài),讓進(jìn)程p[i]等待。提示4安全性算法:intwork[RESOURCE_NUMBER];boolfinish[PROCESS_NUMBER];1)Work=Available;Finish=false;2)尋找滿足條件的i:A、Finish[i]=false;B、Need[i]≤Work;如果不存在,則轉(zhuǎn)4)3)Work:=Work+Allocation[i];Finish[i]:=true;轉(zhuǎn)2)4)若對所有i,Finish[i]=true,則系統(tǒng)處于安全狀態(tài),否則處于不安全狀態(tài)

提示5(銀行家算法的程序流程圖)四、實現(xiàn)代碼為:#include<stdio.h>#include<stdlib.h>#defineN100intsource[N];intprocessMax[N][N];intprocessNeed[N][N];intallocation[N][N];intavailable[N];intavailable1[N];intwork[N];intrequire[N]={0};voidprint(inta,intb);voidreq(inta,intb);voidcheck(inta,intb);voidyhj(inta,intb){ inti=0,j=0,k=0,z=0; printf("Pleaseinputthe%dsources'number:\n",a); for(i=0;i<a;i++) { printf("thenumberofsource%d:",i+1); scanf("%d",&source[i]); work[i]=source[i]; available[i]=source[i]; } for(j=0;j<b;j++) { printf("pleaseinputthenumberofeveryresourceofprocess%d\n",j+1); for(k=0;k<a;k++) { printf("Thenumberofmaxresource%d:",k+1); scanf("%d",&processMax[j][k]); } } //是否出現(xiàn)單個需要資源大于當(dāng)個總資源 for(i=0;i<b;i++) { for(j=0;j<a;j++) { if(processMax[i][j]>source[j]) { printf("\n"); break; } } if(j!=a) break; } //出現(xiàn) if(i!=b) { printf("Emergenceofindividualneedsresourcesthanthatofsingleresource,cannotundertakeallocation\n"); return; } //沒出現(xiàn) else { for(j=0;j<b;j++) { printf("pleaseinputthenumberofeveryresourceofprocess%d\n",j+1); for(k=0;k<a;k++) { printf("Thenumberofallocatedresource%d:",k+1); scanf("%d",&allocation[j][k]); processNeed[j][k]=processMax[j][k]-allocation[j][k]; available[k]-=allocation[j][k]; } } } //銀行家算法 print(a,b); req(a,b);}voidprint(inta,intb) //各個矩陣的打印{ inti=0,j=0,k=0,z=0; printf("\n\nresourceavailablesource\n"); for(i=0;i<a;i++) { printf("%4d%4d\n",source[i],available[i]); } printf("processMaxallocationNeed\n"); for(i=0;i<b;i++) { printf("P%d",i); for(j=0;j<a;j++) { printf("%2d",processMax[i][j]); } printf(""); for(j=0;j<a;j++) { printf("%2d",allocation[i][j]); } printf(""); for(j=0;j<a;j++) { printf("%2d",processNeed[i][j]); } printf("\n"); } for(i=0;i<b;i++) { for(j=0;j<a;j++) { if(processNeed[i][j]<0) printf("TheallocatedsourceislagerthanmaxofP%d\n",i); } }}voidreq(inta,intb){ inti=0,j=0,k=0,z=0; intjch=0; intshuxu[N]={0}; do{ printf("Pleaseinputthenumberofprocesswhichwanttoaskforsource(1~%d):",b); scanf("%d",&jch); if(!(jch-1>=0&&jch-1<=b)) printf("error,pleaseinputagain"); }while(!(jch-1>=0&&jch-1<b)); for(i=0;i<a;i++) { printf("Pleaseinputthenumberofsource%dyouwanttoaskfor:",i+1); scanf("%d",&require[i]); if(require[i]<=processNeed[jch-1][i]&&require[i]<=available[i]) { available[i]-=require[i]; allocation[jch-1][i]+=require[i]; processNeed[jch-1][i]-=require[i]; work[i]-=require[i]; } else { printf("therequiresourceoftheprocessislargerthanneedorexisting,pleaseinputagain:\n"); i--; } } for(i=0;i<a;i++) available1[i]=available[i]; check(a,b); printf("\n");}voidcheck(inta,intb){ inti=0,j=0,k=0,z=0; intjch=0; intx; intshuxu[N]={0}; intfinish[N]={0}; for(i=0;i<b;i++) { for(j=0;j<b;j++) { if(finish[j]==1) continue; else { for(k=0;k<a;k++) { if(processNeed[j][k]>available[k]) break; } if(k==a) { finish[j]=1; shuxu[j]=++z; for(x=0;x<a;x++) { available[x]+=allocation[j][x]; } j=0; } } for(k=0;k<b;k++) { if(finish[k]==0) break; } if(k==b) break; } } printf("\n"); for(i=0;i<a;i++) available[i]=available1[i]; for(j=0;j<b;j++) { if(shuxu[j]==0) { printf("Thereisarisk,donotagreewiththeresourcerequest\n"); for(i=0;i<a;i++) { available[i]+=require[i]; allocation[jch-1][i]-=require[i]; processNeed[jch-1][i]+=require[i]; work[i]+=require[i]; } return; } } printf("Agreetotheresourcerequest,Safesequenceis(accordingtotheprocessofsignalsorting):\n"); //安全序列打印 for(j=1;j<b+1;j++) { for(i=0;i<b;i++) { if(shuxu[i]==j) { p

溫馨提示

  • 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

提交評論