银行家算法详细实例(操作系统)

题目与答案:

在这里插入图片描述
在这里插入图片描述

公式:

need = max - allocation (总共的 - 已经占用的 = 需要的) ,

available = 各个进程的全部总量 - 各个进程已经占用的资源之和 , 例如: 这里的 available :

A :20 - (1+6+2+2+0) = 9 , B: 26 - (6+5+4+4+2) = 5 , C:31 - (0+8+4+9+7) = 3 , D:17 - (3+2+3+6+3) = 0 !!! available 就是 (9,5,3,0)

判断系统状态是否安全,给出安全序列:
写解出所有进程的need :
P0   6 6 3 0
P1   0 9 2 4
P2   3 2 0 0
P3   0 9 2 4
P4   3 2 2 5
需要 need <= available 由need和available可知,从P2(满足条件)开始,然后把P2的allocation 释放到 available中,这样的话available变成了 11 9 7 3 ,再按照顺序往下看谁的need满足,下一个是 P0 ,同样把 P0 的 allocation 释放到 available 中,这样循环直到 所有的进程都执行完就算找到了安全序列,如果循环一遍后找不到满足的进程,那么就不存在安全序列。

这样遍历完后找到的安全序列是:P2P0P1P3P4

available 变化过程:
11 9 7 3
12 15 7 6
18 20 15 8
20 24 24 14
20 26 31 17    最后所有进程执行完 available 变成了给出的资源总量

提出请求的解决办法:
1.    当提出请求时,先判断 request <= need ? ,request <= available ?
2.     然后满足的话, available = available - request , allocation = allocation + request , need = need - request (其实,这里的意思就是从available中拿出请求的资源使用,自然available少了,需要的need 也少了,正在占用的allocation多了,都是对应的 request )。
3.     然后去执行安全性算法: 设置 2 个向量 work 和 finish。 初始work = available , finish = false 。

从这里开始就是前面的判断是否有安全序列了,去找 need ,看是否有满足 need <= work(available)的,找到的话,work = work + allocation(就是把该进程已占据的资源释放到work(available)中去,然后设finish = true ),然后再去找 need <= work

这里P1 请求之后request之后,available 变成了 9 4 2 0allocation 变成了 6 6 9 2注意这里的allocation变了,后面计算的时候不要用以前的allocation,容易出错!!)

need变成了:
P0   6 6 3 0
P1   6 13 9 6
P2   3 2 0 0
P3   0 9 2 4
P4   3 2 2 5

available中间过程:
11 8 6 3
12 14 6 6
14 18 15 12
14 20 22 15
20 26 31 17
安全序列:P2P0P3P4P1

  • 34
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
银家法的Vue实现可以参考以下步骤: 1. 创建Vue实例并定义数据:在Vue实例中,定义需要的数据,包括进程数量、资源类型数量、可用资源数量、每个进程的最大需求量和已分配资源量等。 2. 实现银行家算法的核心逻辑:在Vue的methods选项中定义法的核心逻辑。这个逻辑包括对每个进程的资源请求进行判断,判断是否安全,若安全则进行资源分配,否则拒绝分配。 3. 使用Vue的指令和数据绑定:在Vue的模板中使用指令和数据绑定来展示法的执行过程和结果。可以使用v-for指令来遍历每个进程和资源,v-if指令来控制显示分配结果或拒绝信息等。 4. 调用法逻辑:在Vue的mounted钩子函数中,调用银行家算法的逻辑计资源分配情况,并将结果更新到Vue的数据中。 以下是一个简单的Vue实现银行家算法的示例代码: ```html <template> <div> <h2>银行家算法</h2> <div v-for="(process, index) in processes" :key="index"> <p>进程 {{ index }}:</p> <p>最大需求量:{{ process.maxDemand }}</p> <p>已分配资源量:{{ process.allocatedResources }}</p> <p>请求资源量:{{ process.requestResources }}</p> <p v-if="process.isSafe">安全</p> <p v-else>不安全</p> </div> </div> </template> <script> export default { data() { return { processes: [ { maxDemand: [3, 2, 2], allocatedResources: [0, 0, 0], requestResources: [1, 0, 2], isSafe: false }, // 其他进程的数据... ], availableResources: [3, 3, 2] }; }, methods: { runBankersAlgorithm() { // 实现银行家算法的核心逻辑 for (let i = 0; i < this.processes.length; i++) { const process = this.processes[i]; let isSafe = true; for (let j = 0; j < process.maxDemand.length; j++) { // 判断请求是否大于最大需求量 if (process.requestResources[j > process.maxDemand[j]) { isSafe = false; break; } // 判断请求是否大于可用资源量 if (process.requestResources[j > this.availableResources[j]) { isSafe = false; break; } } process.isSafe = isSafe; if (isSafe) { // 资源分配 for (let j = 0; j < process.maxDemand.length; j++) { this.availableResources[j -= process.requestResources[j]; process.allocatedResources[j += process.requestResources[j]; process.requestResources[j = 0; } } } } }, mounted() { this.runBankersAlgorithm(); } }; </script> ``` 这个示例中,我们定义了一个包含多个进程的数组,每个进程包含最大需求量、已分配资源量和请求资源量等信息。在法的核心逻辑中,我们遍历每个进程的请求,通过判断请求与最大需求量和可用资源量的关系,来确定是否分配资源和是否安全。最后在mounted钩子函数中,调用银行家算法的逻辑,并将结果更新到Vue的数据中。 请注意,这只是一个简化的示例,实际的银行家算法可能涉及更多的复杂逻辑和数据结构。此示例仅作为概念演示。相关的问题:你能否解释一下银行家算法的原理和作用?在实际开发中,我们应该如何使用银行家算法来避免死锁?<span class="em">1</span><span class="em">2</span><span class="em">3</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值