




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、#include <stdio.h> #include <stdlib.h> #include <conio.h> # define m 50 int no1; /進程數int no2; /資源數int r; int allocationmm,needmm,availablem,maxmm; char name1m,name2m; /定義全局變量void main() void check(); void print(); int i,j,p=0,q=0; char c; int requestm,allocation1mm,need1mm,availabl
2、e1m; printf("*n"); printf("* 銀行家算法的設計與實現 *n"); printf("*n"); printf("請輸入進程總數:n"); scanf("%d",&no1); printf("請輸入資源種類數: n"); scanf("%d",&no2); printf("請輸入Max矩陣:n"); for(i=0;i<no1;i+) for(j=0;j<no2;j+) scanf(&
3、quot;%d",&maxij); /輸入已知進程最大資源需求量printf("請輸入Allocation矩陣:n"); for(i=0;i<no1;i+) for(j=0;j<no2;j+) scanf("%d",&allocationij); /輸入已知的進程已分配的資源數for(i=0;i<no1;i+) for(j=0;j<no2;j+) needij=maxij-allocationij; /根據輸入的兩個數組計算出need矩陣的值 printf("請輸入Available矩陣n&qu
4、ot;); for(i=0;i<no2;i+) scanf("%d",&availablei); /輸入已知的可用資源數print(); /輸出已知條件check(); /檢測T0時刻已知條件的安全狀態if(r=1) /如果安全則執行以下代碼 do q=0; p=0; printf("n請輸入請求資源的進程號(04):n"); for(j=0;j<=10;j+) scanf("%d",&i); if(i>=no1) printf("輸入錯誤,請重新輸入:n"); continue;
5、 else break; printf("n請輸入該進程所請求的資源數requestj:n"); for(j=0;j<no2;j+) scanf("%d",&requestj); for(j=0;j<no2;j+) if(requestj>needij) p=1; /判斷請求是否超過該進程所需要的資源數if(p) printf("請求資源超過該進程資源需求量,請求失敗!n"); else for(j=0;j<no2;j+) if(requestj>availablej) q=1; /判斷請求是否超
6、過可用資源數if(q) printf("沒有做夠的資源分配,請求失敗!n"); else /請求滿足條件 for(j=0;j<no2;j+) available1j=availablej; allocation1ij=allocationij; need1ij=needij; /保存原已分配的資源數,仍需要的資源數和可用的資源數availablej=availablej-requestj; allocationij+=requestj; needij=needij-requestj; /系統嘗試把資源分配給請求的進程 print(); check(); /檢測分配后的
7、安全性if(r=0) /如果分配后系統不安全 for(j=0;j<no2;j+) availablej=available1j; allocationij=allocation1ij; needij=need1ij; /還原已分配的資源數,仍需要的資源數和可用的資源數 printf("返回分配前資源數n"); print(); printf("n你還要繼續分配嗎?Y or N ?n"); /判斷是否繼續進行資源分配c=getche(); while(c='y'|c='Y'); void check() /安全算法函數
8、 int k,f,v=0,i,j; int workm,am; bool finishm; r=1; for(i=0;i<no1;i+) finishi=false; / 初始化進程均沒得到足夠資源數并完成for(i=0;i<no2;i+) worki=availablei;/worki表示可提供進程繼續運行的各類資源數k=no1; do for(i=0;i<no1;i+) if(finishi=false) f=1; for(j=0;j<no2;j+) if(needij>workj) f=0; if(f=1) /找到還沒有完成且需求數小于可提供進程繼續運行的資
9、源數的進程 finishi=true; av+=i; /記錄安全序列號for(j=0;j<no2;j+) workj+=allocationij; /釋放該進程已分配的資源 k-; /每完成一個進程分配,未完成的進程數就減1 while(k>0); f=1; for(i=0;i<no1;i+) /判斷是否所有的進程都完成 if(finishi=false) f=0; break; if(f=0) /若有進程沒完成,則為不安全狀態 printf("系統處在不安全狀態!"); r=0; else printf("n系統當前為安全狀態,安全序列為:n&
10、quot;); for(i=0;i<no1;i+) printf("p%d ",ai); /輸出安全序列 void print() /輸出函數 int i,j; printf("n"); printf("*此時刻資源分配情況*n"); printf("進程名/號 | Max | Allocation | Need |n"); for (i = 0; i < no1; i+) printf(" p%d/%d ",i,i); for (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"); pr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 航空航天零部件高精度加工技術2025年市場前景與挑戰報告
- 葡萄酒行業產區特色品牌國際化:2025年全球市場機遇分析報告
- 2025屆滁州鳳陽縣聯考七下英語期末檢測試題含答案
- 2025年電商平臺內容營銷與種草經濟在電商區塊鏈技術應用報告
- 2025年醫藥行業合規運營策略與信息化建設深度分析報告
- 2025年BIM技術在建筑行業工程項目施工進度調整與優化報告
- 2025年醫藥企業研發外包(CRO)模式下的臨床試驗數據安全報告
- 2025年醫藥流通行業供應鏈優化與成本控制策略分析報告
- 繼教培訓課件模板
- 廣東省東莞市五校2025屆七年級英語第二學期期中學業水平測試模擬試題含答案
- 2023年杭州育才中學小升初語文考試真題卷含標準答案
- 2023年安徽六安市裕安區城鄉建設投資集團有限公司招聘筆試題庫及答案解析
- 超市營業員聘用勞務合同書(2篇)
- GB/T 2832-1996陶管抗外壓強度試驗方法
- GB/T 19974-2018醫療保健產品滅菌滅菌因子的特性及醫療器械滅菌過程的開發、確認和常規控制的通用要求
- GB/T 17530.4-1998工業丙烯酸酯酸度的測定
- GB/T 10095.1-2008圓柱齒輪精度制第1部分:輪齒同側齒面偏差的定義和允許值
- 湖北省荊州市商投資區國有企業招聘考試《綜合基礎知識》國考真題
- 熱電公司設備標志牌制作、懸掛標準
- 2022年XX中心學校教師“縣管校聘”工作實施方案
- 人教版七年級下冊數學《期末考試卷》(含答案)
評論
0/150
提交評論