資源簡介
操作系統 里的 銀行家算法 用C++語言實現

代碼片段和文件信息
#include
#define?MAXm?50????????????????//?定義最大進程數
#define?MAXn?100???????????????//定義最大資源數
int?MAX[MAXm][MAXn];???????????//最大需求矩陣
int?Allocation[MAXm][MAXn];????//已分配矩陣
int?Available[MAXn];???????????//可用資源數組
int?Need[MAXm][MAXn];??????????//需求矩陣
int?Request[MAXm][MAXn];???????//請求矩陣
int?Finish[MAXm];??????????????//系統是否有足夠的資源分配給進程
int?mn;???????????????????????//m個進程n個資源
#define?False?0
#define?True?1
void?init();??
int?safe();
void?banker();
void?main()
{init();safe();banker();}
//*************初始化算法***************
void?init()?
{
int?ij;
????//*****************自定義進程數目與資源種類***************************
cout<<“請輸入進程的數目:“;
cin>>m;
cout<<“請輸入資源的種類數目:“;
cin>>n;
//*****輸入每個進程對每種資源的最大需求、已經獲得的數量、每種類型資源的數目
cout<<“各進程資源最大需求(Max)按照“< for(i=0;i for(j=0;j cin>>MAX[i][j];?
cout<<“各進程當前獲得資源(Allocation)按照“< for(i=0;i {
for(j=0;j {
cin>>Allocation[i][j];
Need[i][j]=MAX[i][j]-Allocation[i][j];
?
}
}
cout<<“系統可用資源(Available):“< for(j=0;j {
cin>>Available[j];
}
}
//*****************銀行家算法,為進程分配資源***********
void?banker()?
{
int?ij;?
? int?choice;????
????while(1)
????{
???????cout< ???????cout<<“輸入要進行的操作(1:分配資源??2:離開)?:“;????//用戶選擇————
???????cin>>choice;
???????if(choice==1)???//分配資源————
???????{
cout<<“請輸入要分配資源的進程號(0123……):\n“;
cin>>i;
cout<<“請輸入進程申請的資源(Request):“< for(j=0;j cin>>Request[i][j];?
//**********銀行家算法進行檢查*************?????????
?????? for(j=0;j {
if(Request[i][j]>Need[i][j])
{
cout<<“申請的資源大于它需要的資源數請重新輸入!\n“;
continue;
?? }
if(Request[i][j]>Available[j])
{
cout<<“當前系統可用資源不夠,請等待!“< continue;??
}
}
for(j=0;j {
? ??
??Available[j]=Available[j]-Request[i][j];???//可用資源減少
??Allocation[i][j]=Allocation[i][j]+Request[i][j];//所得資源增加
??Need[i][j]=Need[i][j]-Request[i][j];???????//仍需資源減少
}
if(safe()<0)
{
cout<<“分配不成功,請等待!“;
for?(j=0;j
{?
Available[j]=Available[j]+Request[i][j];?
Allocation[i][j]=Allocation[i][j]-Request[i][j];?
Need[i][j]=Need[i][j]+Request[i][j];?
}
for(i=0;i {
?Finish[i]=False;
}
?} ?
else
{
cout<<“同意分配請求!“< }
}
else?if(choice==2)????//離開————
break;?
else?cout<<“請輸入合法數字!“;
}
}
?
//*********安全性算法?************
int?safe()?
{
?int?ijkl=0;
?int?Work[MAXn];????????????????????//工作組
?int?p[MAXm];???????????????????????//記錄序列
?for(i=0;i ?Work[i]=Available[i];??????????????//工作分配初始化為系統可用資源?
?for(i=0;i ?{
Finish[i]=False;
?}
?for(i=0;i ?{?
if(Finish[i]==True)
?{
continue;
?}
?else
?{
?for(
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????213094??2011-06-14?10:15??Debug\bank.exe
?????文件?????248452??2011-06-14?10:15??Debug\bank.ilk
?????文件??????15845??2011-06-14?10:15??Debug\bank.obj
?????文件?????244436??2011-06-14?10:15??Debug\bank.pch
?????文件?????427008??2011-06-14?10:15??Debug\bank.pdb
?????文件??????41984??2011-06-14?10:15??Debug\vc60.idb
?????文件??????61440??2011-06-14?10:15??Debug\vc60.pdb
?????文件???????3980??2011-05-03?11:58??bank.cpp
?????文件???????3377??2011-06-14?10:14??bank.dsp
?????文件????????516??2011-06-14?10:15??bank.dsw
?????文件??????41984??2011-06-14?10:15??bank.ncb
?????文件??????48640??2011-06-14?10:15??bank.opt
?????文件????????736??2011-06-14?10:15??bank.plg
?????文件????????536??2011-05-03?11:58??bank_.dsw
?????目錄??????????0??2011-06-14?10:15??Debug
-----------?---------??----------?-----??----
??????????????1352028????????????????????15
- 上一篇:C語言 實現 家族譜 樹結構
- 下一篇:二叉平衡樹學生管理系統
評論
共有 條評論