*** 作系统实验三:银行家算法

 *** 作系统实验三:银行家算法,第1张

*** 作系统实验三:银行家算法

实验三

利用c语言实现银行家算法

前文随便说:银行家算法是一种用来避免死锁产生的算法。
它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
  在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比 *** 作系统,资金就是资源,客户就相当于要申请资源的进程
  银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。

首先我们要知道系统内各种资源的总数量,以及各个进程目前所拥有的资源数量,各个进程最大所拥有的进程数量。这样我们就可以在一个进程提出资源申请的时候进行相关计算判断是否合理以及分配后是否处于安全状态。

当某一进程提出新的资源申请时,首先我们要判断系统现在能不能给他这些资源,第二点是这个进程所提出的资源数量是否超过了它所能拥有的上限。第三点,将资源分配给它后整个系统是否还处在安全状态内。

其中安全性判断比较难理解,我们首先要知道,每个进程对资源的要求是有上限的,现在各个进程都有了一定的资源,但不一定到达上限。在系统分出资源后,针对某一个进程,系统内所剩下的资源可以使它达到资源要求的上限,那么对于这个进程来说就是安全的,因为此时的系统完全可以满足它的合理请求。

接下来是一个合理的假设,当系统将资源分给我们前面所注意的进程,将该进程灌满,那么这个进程将很快结束,系统将回收该进程的资源,此时系统内的资源数将改变。资源增多了,我们就可以满足其他要求更高的进程,将他灌满并回收。以此重复,如果可以将系统内所有的进程全部先后满足,那么此时的系统就是安全的。而我们所关注的进程序列就是传说中的安全性序列。

我知道我口述能力不强,所以还是直接看代码吧。
c语言实现银行家算法,实在是太长了,所以,直接贴百度网盘的连接吧。
链接:https://pan.baidu.com/s/1tt96Om6O_CIYyfEIRHX-Nw
提取码:1234

算了,给粘个运行结果吧还是,可以看看是不是大家想要的结果。


另说:在这个代码中有一部分是孩子借鉴来的,就是 预分配资源后检查系统安全性的部分代码,因为孩子自己写的代码出现了一点问题,if判断的时候一直相信 0>4 ,弄得我直接裂开,所有安全性的检测全部不合格,所以就在网上找了一位的安全性检测代码。但也有一点疑惑,也可能是我太菜了没看懂。这里附上连接:https://blog.csdn.net/qq_36260974/article/details/84404369

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5699275.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存