-
大小: 8KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-05-17
- 語言: C/C++
- 標簽:
資源簡介
(1) 簡單的交互界面
(2) 能顯示當前系統(tǒng)資源的剩余情況和占用情況
(3) 能輸入每個進程的最大資源要求
模擬利用銀行家算法為進程的若干次資源請求分配資源
(4) 輸入本次資源要求;
(5) 按銀行家算法為進程分配資源,本次分配是否成功要顯示出來(要能處理各種情況:可以滿足這次請求、由于資源不夠不能滿足這次請求、由于可能產(chǎn)生不安全不能滿足這次請求、請求不合理拒絕請求等)
(6) 作業(yè)撤銷時要回收資源
代碼片段和文件信息
//5.源程序代碼
#include?
#include?
#include?
#include?
//定義全局變量
const?int?x=10y=10;???//常量,便于修改
int?Available[x];??????//各資源可利用的數(shù)量
int?Allocation[y][y];??//各進程當前已分配的資源數(shù)量
int?Max[y][y];??//各進程對各類資源的最大需求數(shù)
int?Need[y][y];?//尚需多少資源
int?Request[x];?//申請多少資源
int?Work[x];?//工作向量,表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類資源數(shù)量
int?Finish[y];?//表示系統(tǒng)是否有足夠的資源分配給進程,1為是
int?p[y];??//存儲安全序列
int?ij;???//i表示進程,j表示資源
int?nm;??//n為進程i的數(shù)量m為資源j種類數(shù)
int?l=0;???//l用來記錄有幾個進程是Finish[i]=1的,當l=n是說明系統(tǒng)狀態(tài)是安全的
int?counter=0;
?
//函數(shù)聲明
void?chushihua();???//初始化函數(shù)
void?safe();??????//安全性算法
void?show();????//函數(shù)show輸出當前狀態(tài)
void?bank();?????//銀行家算法
void?jieshu();??????//結(jié)束函數(shù)
void?chushihua()
{
????cout<<“輸入進程的數(shù)量:?“;//從此開始輸入有關(guān)數(shù)據(jù)
????cin>>n;
????cout<<“輸入資源種類數(shù):?“;
????cin>>m;
????cout< cout<<“............................................“< ????for?(j=0;?j ????{
???????cout<<“????輸入資源?“< ???????cin>>Available[j];?//輸入數(shù)字的過程...
???????Work[j]=Available[j];??????//初始化Work[j],它的初始值就是當前可用的資源數(shù)
????}
????cout< ????cout<<“............................................“< for?(i=0;?i ????{
cout<<“?????輸入進程?“<????????for?(j=0;?j ????????{
???????
????????cin>>Allocation[i][j];
????????}
????cout< ????Finish[i]=0;//初始化Finish[i]
????}
????cout< ????for?(i=0;?i ????{??cout<<“???輸入進程?“<????????for?(j=0;?j ????????{
????????
??????????cin>>Max[i][j];
??????????if(Max[i][j]>=Allocation[i][j])?//若最大需求大于已分配,則計算需求量
??????????Need[i][j]?=?Max[i][j]-Allocation[i][j];
??????????else
??????????Need[i][j]=0;//Max小于已分配的時候,此類資源已足夠不需再申請
????????}
??????cout< ????}
????cout< }
//安全性算法函數(shù)
void?safe()
{
????l=0;
????for?(i=0;?i ?{??//i++
????if?(Finish[i]==0)
??{??//逐個查找Finish[i]==0的進程????條件一
????counter=0;???//記數(shù)器
????for?(j=0;?j ????{
????if?(Work[j]>=Need[i][j])??counter=counter+1;//可用大于需求,記數(shù)
????}
????if(counter==m)??//i進程的每類資源都符合Work[j]>=Need[i][j]?條件二
????{
????????p[l]=i;??//存儲安全序列
????????Finish[i]=1;??//i進程標志為可分配
????????for?(j=0;?j ???????????Work[j]=Work[j]+Allocation[i][j];??//釋放資源
????????l=l+1;?//記數(shù)現(xiàn)在有L個進程是安全的,當L=N時說明滿足安全序列
????????i=?-1;?//從第一個進程開始繼續(xù)尋找滿足條件一二的進程
????}
??}
?}
}
//顯示當前狀態(tài)函數(shù)
void?show()?//函數(shù)show輸出當前資源分配情況
{
????int?ij;?//局部變量
????int?All[y];?//各種資源的總數(shù)量
????int?L1;?//局部變量L1
????cout<<“當前的狀態(tài)為:“< ????cout<<“各種資源的總數(shù)量:“< ????for?(j=0;j ????{
????cout<<“?資源“< ????All[j]=Available[j];???//總數(shù)量=可用的+已分配的
????for?(i=0;i ????cout< ????}
????cout< ????for?(j=0;j ??????????cout<<“?資源“<
評論
共有 條評論