操作系統銀行家算法_第1頁
操作系統銀行家算法_第2頁
操作系統銀行家算法_第3頁
操作系統銀行家算法_第4頁
操作系統銀行家算法_第5頁
已閱讀5頁,還剩1頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

一、實驗目的銀行家算法是由Dijkstra設計的最具代表性的避免死鎖的算法,本實驗要求用高級語言編寫一個銀行家的模擬算法,通過本實驗可以對預防死鎖和銀行家算法有更深刻的認識。二、實驗儀器設備儀器設備名稱規格型號編號備注PCWindos764位操作系統軟件Vc++三、實驗內容.設置數據結構包括可利用資源向量(Availiable),最大需求矩陣(MAX),分配矩陣(Allocation),需求矩陣(Need).設計安全性算法設置工作向量Work表示系統可提供進程繼續運行可利用資源數目,Finish表示系統是否有足夠的資源分配給進程。四、實驗代碼#include<string.H>#include<stdio.h>#include<stdlib.h>include<conio.H>/*用至1」了getch()*/defineM5/*進程數*/defineN3/*資源數*/defineFALSE0defineTRUE1/*M個進程對N類資源最大資源需求量*/intMAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};/*系統可用資源數*/intAVAILABLE[N]={3,3,2};/*M個進程已分配到的N類數量*/intALLOCATION[M][N]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};/*M個進程已經得到N類資源的資源量*/intNEED[M][N]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};/*M個進程還需要N類資源的資源量*/intRequest[N]={0,0,0};voidmain(){inti=0,j=0;chark;charflag;voidshowdata();voidchangdata(int);voidrstordata(int);intchkerr(int);showdata();enter:{printf(”請輸入需申請資源的進程號(從0到)printf("%d",M-1);printf("):");scanf("%d",&i);}if(i<0||i>=M){printf("輸入的進程號不存在,重新輸入!也");gotoenter;}err:{printf("請輸入進程”);printf("%d",i);printff呻請的資源數山,);printf("類別:ABC'n");printf("");for(j=0;j<N;j++){scanf("%d",&Request[j]);if(Request[j]>NEED[i][j]){printf("%d",i);printfC號進程”);printf("申請的資源數>進程)printf("%d",i);printf("還需要");printf("%d",j);printf("類資源的資源量!申請不合理,出錯!請重新選擇!\n");gotoerr;)else(if(Request[j]>AVAILABLE[j])(printf("進程");printf("%d",i);printf("申請的資源數大于系統可用)printf("%d",j);printfC類資源的資源量!申請不合理,出錯!請重新選擇!\n");gotoerr;))))changdata(i);if(chkerr(i))(rstordata(i);showdata();)elseshowdata();printf("\n");printf("按'y'或'Y'鍵繼續,否則退出\n");flag=getch();if(flag=='y'||flag=='Y')(gotoenter;)else(exit(0);))/*顯示數組*/voidshowdata()(inti,j;printf("系統可用資源向量:\n");printf("***Available***\n");printfC資源類別:ABC'n");printff資源數目:");for(j=0;j<N;j++)(printf("%d",AVAILABLE[j]);)printf("\n");printf("\n");printf("各進程還需要的資源量:\n");printf("******Need******\n");printf("資源類別:ABC'n");for(i=0;i<M;i++)(printf("");printf("%d",i);printf("號進程:");for(j=0;j<N;j++)(printf("%d",NEED[i][j]);)printf("\n");)printf("\n");printff各進程已經得到的資源量:\n");printf("***Allocation***\n");printf("資源類別:ABC'n");for(i=0;i<M;i++)(printf("");printf("%d",i);printf("號進程:");/*printf(":\n");*/for(j=0;j<N;j++)(printf("%d",ALLOCATION[i][j]);)printf("\n");)printf("\n");)/*系統對進程請求響應,資源向量改變*/voidchangdata(intk)(intj;for(j=0;j<N;j++)(AVAILABLE[j]=AVAILABLE[j]-Request[j];ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j];NEED[k][j]=NEED[k][j]-Request[j];))/*資源向量改變*/voidrstordata(intk)(intj;for(j=0;j<N;j++)(AVAILABLE[j]=AVAILABLE[j]+Request[j];ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j];NEED[k][j]=NEED[k][j]+Request[j];))/*安全性檢查函數*/intchkerr(ints)(intWORK,FINISH[M],temp[M];inti,j,k=0;for(i=0;i<M;i++)FINISH[i]=FALSE;for(j=0;j<N;j++)(WORK=AVAILABLE[j];i=s;while(i<M)(if(FINISH[i]==FALSE&&NEED[i][j]<=WORK)(WORK=WORK+ALLOCATION[i][j];FINISH[i]=TRUE;temp[k]=i;k++;i=0;)else(i++;))for(i=0;i<M;i++)if(FINISH[i]==FALSE)(printf("\n");printf("系統不安全!本次資源申請不成功!\n");printf("\n");return1;))printf("\n");printf("經安全性檢查,系統安全,本次分配成功。\n");printf("\n");printf("本次安全序列:\n");printf("進程依次為");for(i=0;i<M;i++)(printf("%d",temp[i]);printf("->");)printf("\n");return0;)五、實驗效果圖

進程已經得到的費源量C:\U5ers\Arlen\Deekto §l.exe清新人進程例請的簌源以類別:口毗進程已經得到的費源量C:\U5ers\Arlen\Deekto §l.exe清新人進程例請的簌源以類別:口毗1經安全性檢查:系疣芟全,本次分配成攻。莓贏解;3—共筑口」用資源叵I量:liable***修源類別哨即黃源數目:23日容進程逕需要的資源量:?M.K'MNeEdXMXMXK資源秀別:口BC號植賽641號選棹皿號遇桂:£■四號選替011號速槨M31備進程二丕需要按,,或,F犍繼續,否則退出備進程二丕需要按,,或,F犍繼續,否則退出資源登ImmmmkmHced******濟源恚利:ABC號逆程:641一號逑祗12?2號逑程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論