銀行家算法C語言代碼_第1頁
銀行家算法C語言代碼_第2頁
銀行家算法C語言代碼_第3頁
銀行家算法C語言代碼_第4頁
銀行家算法C語言代碼_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗名稱: 銀行家算法 姓 名: 楊秀龍 學 號: 專業(yè)班級: 創(chuàng)新實驗班111 指導老師: 霍林 實驗題目銀行家算法實驗?zāi)康母顚拥牧私忏y行家算法是如何避免死鎖的設(shè)計思想銀行家算法是根據(jù)進程的請求,假設(shè)在已分配給該進程請求的資源后,進行安全性算法,如果都能滿足其他進程的請求,則滿足該進程的請求,否則掛起該進程的請求。假設(shè)在一個系統(tǒng)中,知道相應(yīng)的進程的狀態(tài)(最大需求、已占用的資源量、還需要的資源量和可利用的資源數(shù)),某個進程發(fā)出請求,在請求滿足兩大請求(小于還需要的資源并小于可利用資源數(shù))時,分配給該進程相應(yīng)的資源,再進行安全檢測,在確認安全的情況下,才把資源真正分配給該進程,否則終止請求!主

2、要數(shù)據(jù)結(jié)構(gòu)根據(jù)算法的相應(yīng)需求,需要定義int maxMM;int allocationMM;int needMM;int availableM;int workM;等數(shù)組開始結(jié)束輸入總進程數(shù)輸入資源數(shù)輸入Max矩陣輸入Allocation矩陣是否添加進程請求輸入進程號和請求資源否是流程圖運行結(jié)果圖(1)分配進程的相應(yīng)狀態(tài)圖(2)請求和請求完全部資源后釋放資源圖(3)繼續(xù)請求并釋放其他進程圖(2)所有進程請求完成后系統(tǒng)資源還原附錄原代碼如下:# include stdio.h # define M 50int maxMM;int allocationMM;int needMM;int avail

3、ableM; int i, j, n, m, anquan,x=0;/*7 5 3 0 1 0 7 4 3 3 3 2 3 2 2 2 0 0 1 2 2 9 0 2 3 0 2 6 0 0 2 2 2 2 1 1 0 1 1 4 3 3 0 0 2 4 3 1*/ main() void check(); int p,q,control; int reqM,allocation1MM,need1MM,available1M; printf(輸入進程總數(shù):); scanf(%d, &n); printf(輸入資源種類數(shù)量:); scanf(%d, &m); printf(輸入需求矩陣Max:n

4、); for(i=0;in; i+) for(j=0;jm; j+) scanf(%2d,&maxij); printf(輸入已分配矩陣Allocation:n); for(i=0;in; i+) for(j=0;jm; j+) scanf(%d, &allocationij); for (i=0;in; i+) for(j=0;jm; j+) needij=maxij-allocationij; printf(輸入資源的系統(tǒng)初始值:n); for (j=0;jm;j+) scanf(%d, &availablej); for (j=0;jm;j+)for(i=0;in;i+)availabl

5、ej=availablej-allocationij; check(); if (anquan=1) /如果已知的狀態(tài)安全則執(zhí)行以下代碼 for(control=0;control+) p=0,q=0; printf(輸入請求的進程號: ); scanf(%d, &i); printf(輸入該進程的請求資源數(shù)組:); for(j=0;jm; j+) scanf(%d,&reqj); for(j=0;jneedij) p=1; if(p) printf(請求資源大于該進程還需要的資源!n); else for(j=0;javailablej)/判斷請求是否大于可用資源 q=1; if(q) pr

6、intf(可用資源不能滿足請求!n); else for(j=0;jm; j+) /滿足兩大條件 available1j=availablej; /保持資源的當前 allocation1ij=allocationij; need1ij=needij; availablej=availablej-reqj; /嘗試把資源分配給進程 allocationij=allocationij+reqj; needij=needij-reqj; if(needij=0)x=x+1; /當進程滿足時釋放資源 if(x=m) for(j=0;jm;j+) availablej=availablej+alloca

7、tionij; allocationij=0; available1j=availablej; x-; else x=0; check(); if(anquan=0) for (j=0;jm; j+) availablej=available1j; /還原分配前的狀態(tài) allocationij=allocation1ij; needij=need1ij; printf(執(zhí)行該進程不安全!返回繼續(xù)操作。n); printf(是否繼續(xù)請求?n); void check() /安全性算法 int k, f, no=0; int workM,aM; char finishM; anquan=1; fo

8、r(i=0;in; i+) finishi=F; for(j=0;jm; j+) workj=availablej; k=n; do for (i=0;in; i+) if (finishi=F) f=1; for (j=0;jworkj) f=0; if (f=1) /找到還沒完成的且需求數(shù)小于可提供進程繼續(xù)運行的 finishi=T; ano+=i; /記錄安全序列號 for (j=0;j0); f=1; for (i=0;in; i+) /判斷有沒有進程沒完成 if (finishi=F) f=0; break; if (f=0) printf(不安全狀態(tài)!n); anquan=0; e

9、lse printf(處于安全狀態(tài).); printf(安全序列號:); for (i=0;in;i+) printf (%d ,ai); printf(n); printf(進程); printf( ); printf( Max ); printf( ); printf(allocation); printf( ); printf(need); printf( ); printf(available); printf(n); for (i=0;in; i+) printf(%2d,i); printf( ); for(j=0;jm; j+) printf(%2d,maxij); printf( ); for(j=0;jm

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論