银行家算法介绍及伪码

思想

允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利地完成),便将资源分配给进程,否则不分配资源,让进程等待。

数据结构

//银行家算法
int n,m; //系统中进程总数n和资源种类总数m
int Available[m]; //资源当前可用总量
int Allocation[n*m]; //当前给分配给每个进程的各种资源数量
int Need[n*m];//当前每个进程还需分配的各种资源数量
//安全性模块
int Work[m]; //当前可分配的资源
bool Finish[n]; //进程是否结束

安全判断模块

伪码

Boolen found=false;
work=Available;
finish[n]=false;//初始化
while(true){
	found=false;
	for(int i=0;i<n;i++){//循环一次
		if(finish[i]==false && Need[i]<=Work){//进入循环表示可分配,并且回收资源
			Work+=Allocation[i];
			found=true;
			finish[i]=true;
		}
	}
	if(found=false){//不存在资源分配的情况就跳出
		break;
	}
}
for(int i=0;i<n;i++){
	if(Finish[i]==false){//如果有没分配的说明会死锁
		return "deadlock";
	}
}

资源请求模块

我们将第i个进程请求的资源数记为Requests[i]

算法流程:

1.如果Requests[i]<=Need[i],则转到2。否则,返回异常。这一步是控制进程申请的资源不得大于需要的资源

2.如果Requests[i]<=Available,则转到3,否则Pi等待资源。

3.如果满足前两步,那么做如下操作:

Available = Available -Requests[i]
Allocation = Allocation[i]+Requests[i]
Need[i]=Need[i]-Requests[i]
调用安全判定算法,检查是否安全
if(安全)
{
    资源分配
}
else
{
    资源撤回。第三步前几个操作进行逆操作
}
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值