资源简介
本实验要求设计并实现银行家算法。银行家算法是死锁避免的经典算法,其核心思想是:进程动态地申请资源,每次申请资源时系统都执行安全状态检查算法判断本次申请是否会造成系统处于不安全状态,如果不安全则阻塞进程;如果安全状态,则完成资源分配。
安全状态检查算法的思想是找到一个安全序列,使所有进程都能执行完毕。如果找到,则处于安全状态,否则为不安全状态。
代码片段和文件信息
#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
相关资源
- n阶汉诺塔源代码与演示程序
- 模拟病人排队看病实验程序代码
- 一个销售管理系统适用的Delphi界面源
- Delphi遍历二叉树源代码..rar
- Delphi批量打印工作证源代码..rar
- 桌面弹球游戏代码以及个人总结
- k-d树源代码
- Qt自定义搜索框代码实现
- 签名signtool与使用批处理
- event-B入门基础手册
- js判断微信打开提示在浏览器打开代码
- De Jong 测试函数及源代码
- stm32 完整IIC通讯代码,三轴加速度计
- 用QT自己写的贪吃蛇源代码
- grbl 代码 0.9j
- 自习室开放优化模型,毕业论文,付
- 基于图像颜色特征的图像检索源代码
- stata基尼系数算法
- 文本编辑器的汇编源代码
- G.711 G.721 G.723声音压缩标准压缩、解压
- 局域网跳棋源代码
- 机房管理系统(源代码)
- 在局域网内多播稳定传送大文件
- IAR代码MSP430初学者必备
- JPEG图像压缩编码及解码源代码可定图
- 百度地图 内置覆盖物overlayutil相关源
- 易语言中控指纹仪连接代码
- 2d simple cfd c代码
- 近10个团队的飞思卡尔小车程序源代码
- 基于小波变换的图像融合源代码
评论
共有 条评论