• 大小: 22KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: 代码  死锁检测  

资源简介

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

资源截图

代码片段和文件信息


#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


评论

共有 条评论