操作系統(tǒng)實驗銀行家算法C語言實現(xiàn)_第1頁
操作系統(tǒng)實驗銀行家算法C語言實現(xiàn)_第2頁
操作系統(tǒng)實驗銀行家算法C語言實現(xiàn)_第3頁
操作系統(tǒng)實驗銀行家算法C語言實現(xiàn)_第4頁
操作系統(tǒng)實驗銀行家算法C語言實現(xiàn)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上#include<stdio.h>#include<stdlib.h>#include<string.h>#define a 10#define b 10 /*銀行家算法中的數(shù)據(jù)結(jié)構(gòu)*int Availablea; /.各資源可利用的數(shù)量int Maxbb; /.各進(jìn)程對各類資源的最大需求數(shù)int Allocationbb; /.各進(jìn)程當(dāng)前已分配的資源數(shù)量int Needbb; /.尚需多少資源/*int Requesta; /.申請多少資源int Worka; /.工作向量,表示系統(tǒng)可提供給進(jìn)程繼續(xù)運行所需的各類資源數(shù)量int F

2、inishb; /.表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,1為是/*函數(shù)聲明*void init();/.創(chuàng)建進(jìn)程,資源種類與分配等,初始化函數(shù)int banker();/.銀行家分配算法 void safe(); /.判斷算法的安全性/*/*過程中定義的全局變量*int i,j,x,y,l,counter=0;int p; /記錄是哪個進(jìn)程正在申請資源int qb; /存儲安全序列/*/*創(chuàng)建進(jìn)程*void init()/初始化 printf("輸入當(dāng)前進(jìn)程量:n"); scanf("%d",&x);printf("輸入資源的種類數(shù)目:

3、n"); scanf("%d",&y);printf("*輸入各種資源當(dāng)前可用的數(shù)量*n");for( i=0;i<y;i+)printf("請輸入資源%d的資源可利用量n",i);scanf("%d",&Availablei);Worki=Availablei; /初始化Worki,它的初始值就是當(dāng)前可用的資源數(shù)printf("請輸入每個進(jìn)程申請到的資源n");for( j=0;j<x;j+)for(i=0;i<y;i+)printf("請

4、輸入進(jìn)程%d的申請到的資源%d:n",j,i);scanf("%d",&Allocationji);Finishj=0;/初始化Finishjprintf("請輸入每個進(jìn)程需要的最大的資源數(shù)目:n");for(j=0;j<x;j+)for(i=0;i<y;i+)printf("請輸入進(jìn)程%d需要的最大的資源數(shù)目%d:n",j,i);scanf("%d",&Maxji); if (Maxji>=Allocationji) /根據(jù) 需求量=需要最大資源數(shù)目-已分配數(shù)目,計算需

5、求量need Needji=Maxji-Allocationji; else Needji=0;/資源充足,不需要再申請printf("初始化完成n");/安全性算法函數(shù)void safe() l=0; for (j=0; j<y;j+) if (Finishj=0) /逐個查找Finishj=0的進(jìn)程 條件一 counter=0; /記數(shù)器for (i=0; i<x; i+) if (Worki>=Needji) counter=counter+1;/可用大于需求,記數(shù) if(counter=x) /i進(jìn)程的每類資源都符合Worki>=Needji

6、 條件二 ql=j; /存儲安全序列Finishj=1; /i進(jìn)程標(biāo)志為可分配for (i=0; i<x;i+) Worki=Worki+Allocationji; /釋放資源l=l+1; /記數(shù),現(xiàn)在有L個進(jìn)程是安全的,當(dāng)L=N時說明滿足安全序列 j= -1; /從第一個進(jìn)程開始繼續(xù)尋找滿足條件一二的進(jìn)程 /*銀行家算法* int banker()/.銀行家分配算法 printf("請輸入請求資源的進(jìn)程n"); scanf("%d",&p); printf("n請輸入此進(jìn)程請求各種資源的個數(shù)n"); for(i=0;i

7、<x;i+) do printf("進(jìn)程%d申請資源%d的數(shù)量",p,i); scanf("%d",&Requesti); if(Requesti>Needpi)/申請量不能超過需求量printf("申請量超過需求量出錯;!請重新輸入!n");else if(Requesti>Availablei) printf("資源不充足,目前可用資源只有%d,進(jìn)程要等待!",Availablei); Finishp=0; /該進(jìn)程等待return 0; while(Requesti>Needp

8、i|Requesti>Availablei); for (i=0; i<x; i+) Availablei=Availablei-Requesti;Allocationpi=Allocationpi+Requesti;Needpi=Needpi-Requesti;Worki=Availablei; /改變Avilable、Allocation、Need的值 /判斷銀行家算法的安全性if(l<x) l=0;printf("試分配不成功,不與分配,恢復(fù)原狀態(tài)!"); for (i=0; i<x; i+) Availablei = Availablei+R

9、equesti; Allocationpi = Allocationpi-Requesti; Needpi = Needpi+Requesti; Worki = Availablei; for (j=0; j<y; j+) Finishj=0; /進(jìn)程置為未分配狀態(tài)else l=0; printf("n申請資源成功!n");for(i=0;i<x;i+) if(Needpi=0); else /有一種資源還沒全部申請到,該進(jìn)程還處于就緒態(tài) l=1; /判斷標(biāo)志 break; if(l!=1) /進(jìn)程可以執(zhí)行,釋放該進(jìn)程的所有資源 for (i=0;i<x;

10、i+) Availablei=Availablei+Allocationpi; Allocationpi=0; printf("有需求資源,執(zhí)行后將釋放其所有擁有資源!"); l=0; /歸零printf("安全序列為:n"); printf("進(jìn)程%d",q0); /輸出安全序列,考慮顯示格式,先輸出第一個 Finish0=0; for (i=1; i<y; i+) printf(" 進(jìn)程%d",qi); Finishi=0; /重新將所有進(jìn)程置為未分配狀態(tài) printf(" nnn"); return 0; void main()printf("n*n");printf("n 銀行家算法模擬 n");printf("n*n");init();/safe(); /判斷當(dāng)前狀態(tài)的安全性if(l<y)printf("找不到安全序列,拒絕申請n");else i

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論