[ 操作系统 ]死锁避免的方法之银行家算法

银行家算法是一种用于避免操作系统中死锁的策略,它在资源分配前检查是否会引发不安全状态。算法涉及最大需求、已分配、需求、可用和请求等矩阵,通过寻找和分配安全序列确保系统的安全性。当请求满足条件且能找到安全序列时,资源才被分配。
摘要由CSDN通过智能技术生成

基本介绍

  • 目的:避免死锁
  • 死锁避免: 在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁(不安全),则不予分配,否则予以分配
  • 安全序列:如果系统按照这种序列分配资源,那么每个进程都能顺利完成,只要能找出一个安全序列,系统就是安全状态,并且,安全序列可能多不止一个
  • 如果系统处于安全状态,就一定不会发生死锁,如果系统进入了不安全状态,那么就有可能发生死锁(处于不安全状态未必就是发生了死锁,但发生死锁时一定是不安全状态)
  • 因此可以在资源分配前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应分配请求,这也是“银行家算法”的核心思想

名词解释

  • 假设有n个进程,m种资源
  • Max:最大需求矩阵[所有进程对各种资源的最大需求数]
  • Allocation:分配矩阵[系统对所有进程的分配情况,已经分配的资源]
  • Need:Need矩阵[表示各进程最多还需要多少资源]
  • Available:一维数组[表示目前剩余可用资源]
  • Request:数组[表示某次某进程向系统申请的资源量]

算法运行过程

进程最大需求MAX已分配Allocation最多仍需Need剩余可用Available资源总数Resources
P0(7,5,3)(0,1,0)(7,4,3)初始值:(3,3,2)(10,5,7)
P1(3,2,2)(2,0,0)(1,2,2)(5,3,2)
P2(9,0,2)(3,0,2)(6,0,0)(7,4,3)
P3(2,2,2)(2,1,1)(0,1,1)(7,5,3)
P4(4,3,3)(0,0,2)(4,3,1)(7,5,5)
  • Q1:尝试找出一个安全序列

  • A:

    1. 初始剩余可用Available值:(3,3,2)->在Need矩阵中寻找以比此向量小的一个作为可以划分的对象
    2. Available(3,3,2)->分配给P1
    3. P1进程完成后,收回已分配给P1的资源(2,0,0),Available变为(5,3,2)
    4. Available(5,3,2)->分配给P3
    5. P3进程完成后,收回已分配给P3的资源(2,1,1),Available变为(7,4,3)
    6. Available(7,4,3)->分配给P0
    7. P0进程完成后,收回已分配给P0的资源(0,1,0),Available变为(7,5,3)
    8. Available(7,5,3)->分配给P4
    9. P4进程完成后,收回已分配给P4的资源(0,0,2),Available变为(7,5,5)
    10. Available(7,5,5)->分配给P2
    11. P2进程完成后,收回已分配给P2的资源(3,0,2),Available变为(10,5,7)
  • 得出结论:安全序列为P1->P3->P0->P2->P4

  • Q2:Request请求资源

  • 如果Request满足小于等于Need,并小于等于Available,即符合申请的条件

  • 那么需要在对应P1的Need和Available序列中做相关的加减法[在Need中减去Request,在Available中加上Request,如图所示]

  • 且此刻Allocation也要减去Request
    在这里插入图片描述

  • 然后继续按照Q1的步骤寻找安全序列即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值