资源简介
本实验要求设计并实现银行家算法。银行家算法是死锁避免的经典算法,其核心思想是:进程动态地申请资源,每次申请资源时系统都执行安全状态检查算法判断本次申请是否会造成系统处于不安全状态,如果不安全则阻塞进程;如果安全状态,则完成资源分配。
安全状态检查算法的思想是找到一个安全序列,使所有进程都能执行完毕。如果找到,则处于安全状态,否则为不安全状态。

代码片段和文件信息
#include “stdafx.h“
#include
using namespace std;
/*
//所有资源
int resource[3] = { 1057 };//如果知道可用资源,所有资源是不用知道的
*/
//可用资源向量
int available[3] = { 332 };
//已分配矩阵A
int allocation[5][3] = { { 010 }{ 200 }{ 302 }{ 211 }{ 002 } };
//最大需求矩阵C
int maxRequest[5][3] = { { 753 }{ 322 }{ 902 }{ 222 }{ 433 } };
//C-A需求矩阵
int nneed[5][3] = { { 743 }{ 122 }{ 600 }{ 011 }{ 431 } };
bool safeTest();
void request();
int main()
{
request();
return 0;
}
void request()
{
char contn;
cout << endl << “进程个数:5 资源个数:3“ << endl << “可用资源向量Available:“ << endl;
for (int i = 0; i<3; i++)
cout << available[i] << “ “;
cout << endl << “最大需求矩阵Max:“ << endl;
for (int i = 0; i<5; i++)
{
for (int l = 0; l<3; l++)
cout << maxRequest[i][l] << “ “;
cout << endl;
}
cout << “已分配矩阵Allocation:“ << endl;
for (int i = 0; i<5; i++)
{
for (int l = 0; l<3; l++)
cout << allocation[i][l] << “ “;
cout << endl;
}
cout << “需求矩阵Need:“ << endl;
for (int i = 0; i<5; i++)
{
for (int l = 0; l<3; l++)
cout << nneed[i][l] << “ “;
cout << endl;
}
int p;
cout << “请输入发起请求的进程,(0-4):“;
cin >> p;
while (p > 4 || p < 0) {
cout << “不要乱输,进程是0到4之间的某个数:“ << endl;
cout << “请输入发起请求的进程,(0-4):“;
cin >> p;
}
int a b c;
cout << “请输入请求资源数目,如3 4 5:“;
cin >> a >> b >> c;
/*
首先,进程p请求的资源必须得小于进程p的需求,如果大于需求,坚决不给分配。
其次,请求的资源必须得少于当前可用资源,若大于,给不了。
*/
if (a <= nneed[p][0] && b <= nneed[p][1] && c <= nneed[p][2])
{
cout << “请求资源满足进程“ << p << “的需求开始执行银行家算法:“ << endl;
if (a <= available[0] && b <= available[1] && c <= available[2])
{
//满足上两个要求,就给进程p分配资源,分配完,当前可用资源要减掉分配掉的。
available[0] = available[0] - a;
available[1] = available[1] - b;
available[2] = available[2] - c;
//进程p的已分配资源向量要增加
allocation[p][0] = allocation[p][0] + a;
allocation[p][1] = allocation[p][1] + b;
allocation[p][2] = allocation[p][2] + c;
//需求矩阵C-A也发生了变化
nneed[p][0] = nneed[p][0] - a;
nneed[p][1] = nneed[p][1] - b;
nneed[p][2] = nneed[p][2] - c;
cout << endl << “试分配完成。“ << endl;
if (safeTest())
{
/*
如果是安全的,那么开始分配资源,p执行完成后,将其已分配的资源还给availble
availble加上allocation[][],并且p的已分配资源变为0。
*/
cout << endl << “开始给第“ << p << “个进程分配资源。“ << endl;
cout << “分配资源完成,已更新所有资源矩阵图“ << endl;
for (int i = 0; i<5; i++)
if (nneed[i][0] == 0 && nneed[i][1] == 0 && nneed[i][2] == 0)
for (int j = 0; j < 3; j++) {
available[j] = available[j] + allocation[i][j];
allocation[i][j] = 0;
}
}
else
{
/*
如果不安全,要恢复至最初的资源状态,减了的加回来,加了的减回去
*/
cout << endl << “系统已恢复试分配前状态。“ << endl;
available[0] = available[0] + a;
available[1] = available[1] + b;
available[2] = available[2] + c;
allocation[p][0] = allocation[p][0] - a;
allocation[p][1] = allocation[p][1] - b;
allocation[p][2] = allocation[p][2]
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8738 2017-12-09 15:44 软工1506+201526811028+郑亚群\myprocess.cpp
文件 22476 2017-12-09 15:45 软工1506+201526811028+郑亚群\软工1506+201526811028+郑亚群-实验三.docx
目录 0 2017-12-09 15:46 软工1506+201526811028+郑亚群
----------- --------- ---------- ----- ----
31214 3
相关资源
- bp神经网络源代码,可直接运行
- 随机森林R语言代码
- 计算机图形学 边填充算法实现代码
- 直流无刷电机方波驱动 stm32 例程代码
- 仿知乎界面小程序源代码
- 贪吃蛇源代码.fla
- 周立功开发板ProASIC3实验-syn_FIFO代码
- IMX385驱动代码.zip
- dotnet 写字板 实验 源代码 不好请要不
- 图像二维小波变换的实现源代码
- 八三编码器设计 VHDL代码 简单,包附
- linux应用层的华容道游戏源代码
- 交通咨询模拟系统完整代码
- http请求状态代码
- 数值分析所有实验代码
- 网上拍卖系统完整源代码
- 音乐代码转换软件 单片机编程时用
- CSMA/CD等动画演示加源代码
- silicon lab公司的收音IC SI47XX全套开发工
- 用51单片机实现G代码翻译
- 合同管理系统的源代码(附数据库)
- 用VC 编写的仿QQ聊天室程序源代码
- web班级网站设计代码
- 38k单片机红外发送代码、keil
- STM32F103 串口程序(完整版)
- 网络唤醒代码
- VPC3_DPV1源代码,Profibus
- PB做的托盘程序(最小化后在左下角显
- RSA算法源码
- ubuntu9.10 可加载内核模块和字符设备驱
评论
共有 条评论