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