资源简介
操作系统 里的 银行家算法 用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语言 实现 家族谱 树结构
- 下一篇:二叉平衡树学生管理系统
相关资源
- More effective C++ 中文版, 35个改善编程
- apriori算法(C++实现)28359
- 五子棋(棋盘)(MFC编写)
- 基于vc6开发的计算器
- C++语言编写的输入法精简模型
- 魔王语言c++
- libstdc++.so.6.0.20
- sobel边缘检测的c/c++代码
- 杭电ACMonline习题答案-C++版
- C++录屏代码
- c++ qt 静态函数中发信号
- 简单的通讯录程序 c++
- get internet time.zip
- C++ 汉字识别源代码
- 理发师问题C++版程序代码
- 《计算机图形学》实验报告C++
- jacobi符号计算
- 在线考试系统VC++MFC
- VC++ 视频播放器 程序及源码
- 用C++链表结构实现多项式的加法,乘
- 深信服笔试题目C语言和C++
- BP三层神经网络实现C++代码注释详细
- Forstner点特征提取源文件,C++版本
- C 语言编译器源码
- 《信息学奥赛课课通C++》49375-00配套资
- UE4C++写入CSV文件.docx
- 学生选修课系统设计.rar
- 模拟ATM机存取款管理设计.rar
- 用C++写的简单的表白小程序.zip
- C++内存泄漏演示程序
评论
共有 条评论