资源简介
操作系统 里的 银行家算法 用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语言 实现 家族谱 树结构
- 下一篇:二叉平衡树学生管理系统
相关资源
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
评论
共有 条评论