资源简介
内容:编程实现银行家算法、安全性算法
基本要求
能够根据给定的资源分配情况,及某进程提出的资源请求,通过算法得出是否能进行分配。如能分配,需得出相应的安全序列。
内含多个实验报告 资源整合
代码片段和文件信息
#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
相关资源
- 操作系统银行家算法两个
- 进程调度算法和银行家算法
- 操作系统-银行家算法课设报告及源码
- 银行家算法linux下实现
- 操作系统实验-银行家算法
- 银行家算法讲解 带流程图
- 银行家算法报告
- 银行家算法的思想,编写程序,解决
- 银行家算法实验报告
- 毕业论文形式 银行家算法课程设计实
- 操作系统银行家算法实验报告
- 银行家算法&多级队列调度算法内含源
- 预防进程死锁的银行家算法
- 计算机操作系统实验—银行家算法
- 操作系统实验三 预防进程死锁的银行
- 操作系统课设银行家算法(C源码+报告
- 银行家算法实验报告 附源码
- 模拟银行家算法实现死锁避免
- 操作系统试验(三个,磁盘调度 进程
- \\操作系统课程设计银行家算法,生产
- 计算机操作系统实验代码6个实验.ra
- 银行家算法
- 银行家算法20480
- 操作系统上机程序集合
- 银行家算法
- 银行家算法实验报告及程序代码
- 操作系统算法实现银行家算法 进程调
- 进程调度时间片轮转银行家算法作业
- 操作系统课程设计——银行家算法
- 操作系统银行家算法 实验报告+源代码
评论
共有 条评论