• 大小: 53KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签:

资源简介

内容:编程实现银行家算法、安全性算法 基本要求 能够根据给定的资源分配情况,及某进程提出的资源请求,通过算法得出是否能进行分配。如能分配,需得出相应的安全序列。 内含多个实验报告 资源整合

资源截图

代码片段和文件信息

#include 
#include 
#include “banker.h“


//试探分配
void ProbeAlloc(int processRESOURCE *res)
{
Available.A -= res->A;
Available.B -= res->B;
Available.C -= res->C;

Allocation[process].A += res->A;
Allocation[process].B += res->B;
Allocation[process].C += res->C;

Need[process].A -= res->A;
Need[process].B -= res->B;
Need[process].C -= res->C;
}

//若试探分配后进入不安全状态,将分配回滚
void RollBack(int processRESOURCE *res)
{
Available.A += res->A;
Available.B += res->B;
Available.C += res->C;

Allocation[process].A -= res->A;
Allocation[process].B -= res->B;
Allocation[process].C -= res->C;

Need[process].A += res->A;
Need[process].B += res->B;
Need[process].C += res->C;
}

//安全性检查
bool SafeCheck()
{
RESOURCE Work = Available;
bool Finish[PROCESSES_NUMBER] = {falsefalsefalsefalsefalse};
int i;
int j = 0;

for (i = 0; i < PROCESSES_NUMBER; i++)
{
//是否已检查过
if(Finish[i] == false)
{
//是否有足够的资源分配给该进程
if(Need[i].A <= Work.A && Need[i].B <= Work.B && Need[i].C <= Work.C)
{
//有则使其执行完成,并将已分配给该进程的资源全部回收
Work.A += Allocation[i].A;
Work.B += Allocation[i].B;
Work.C += Allocation[i].C;
Finish[i] = true;
safe[j++] = i;
i = -1; //重新进行遍历
}
}
}

//如果所有进程的Finish向量都为true则处于安全状态,否则为不安全状态
for (i = 0; i < PROCESSES_NUMBER; i++)
{
if (Finish[i] == false)
{
return false;
}
}
return true;
}

//资源分配请求
bool request(int processRESOURCE *res)
{
//request向量需小于Need矩阵中对应的向量
if(res->A <= Need[process].A && res->B <= Need[process].B && res->C <= Need[process].C)
{
//request向量需小于Available向量
if(res->A <= Available.A && res->B <= Available.B && res->C <= Available.C)
{
//试探分配
ProbeAlloc(processres);

//如果安全检查成立,则请求成功,否则将分配回滚并返回失败
if(SafeCheck())
{
return true;
}
else
{
printf(“安全性检查失败。原因:系统将进入不安全状态,有可能引起死锁。\n“);
printf(“正在回滚...\n“);
RollBack(processres);
}
}
else
{
printf(“安全性检查失败。原因:请求向量大于可利用资源向量。\n“);
}
}
else
{
printf(“安全性检查失败。原因:请求向量大于需求向量。\n“);
}
return false;
}

//输出资源分配表
void PrintTable()
{
printf(“\t\t\t*********资源分配表*********\n“);
printf(“Process       Max          Allocation          Need          Available\n“);
printf(“          A    B    C     A    B    C       A    B    C      A    B    C\n“);
printf(“  P0      %d    %d    %d     %d    %d    %d       %d    %d    %d      %d    %d    %d\n“Max[0].AMax[0].BMax[0].CAllocation[0].AAllocation[0].BAllocation[0].CNeed[0].ANeed[0].BNeed[0].CAvailable.AAvailable.BAvailable.C);
printf(“  P1      %d    %d    %d     %d    %d    %d       %d    %d    %d\n“Max[1].AMax[1].BMax[1].CAllocation[1].AAllocation[1].BAllocation[1].CNeed[1].ANeed[1].BNeed[1].C);
printf(“  P2      %d    %d    %d     %d    %d    %d       %d    %d    %d\n“Max[2].AMax[2].BMax[2].CAllocation[2].AAllocation[2].BAllocation[2].CNeed[2].ANeed[2].BNe

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        637  2011-05-15 14:59  banker.h

     文件       4537  2011-05-15 19:32  main.c

----------- ---------  ---------- -----  ----

                 5174                    2


评论

共有 条评论