【OS笔记 29】处理死锁的四种方法——避免死锁(资源分配图算法与银行家算法)

本文探讨了系统安全状态与不安全状态的概念,解释了如何通过资源分配图算法和银行家算法来计算资源分配的安全性,以避免死锁的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、安全状态与不安全状态

系统处于安全状态时,就可避免死锁;处于不安全状态时,可能发生死锁。

所谓安全状态,是指系统此时能找到一个进程的序列<P1,P2,P3…Pn>,只要按照此顺序为其分配资源,就能使每个进程都能顺利完成。如果存在一个安全序列,那么系统则处于安全状态,否则就处于不安全状态。

在避免死锁方法中,允许进程动态地申请资源,但是系统在分配资源之间,会先计算此次资源分配的安全性,安全的话才分配,不安全的话便令进程等待。



二、计算资源分配安全性的两种方法

1. 资源分配图算法

(1)适用情况
每个资源类型只包含一个实例时可以使用。(为什么呢?因为只有当每种资源都是一个实例时,图中出现了环才表明这组进程出现了循环等待情况,才能断定是死锁的,如果有的资源不是一个实例的话,出现了环则可能发生了死锁,也可能没发生)

(2)判断方法
需求边 P2→ R2,表示进程 P2 在将来某个时刻会申请资源 R2,用虚线表示,如下面左图。
判断 P2 的这个申请是否会造成不安全状态:
假设已经将资源分配给 P2,所以要把 P2→ R2 的需求边转换为 R2→ P2 的分配边,如下面右图。
此时发现整个图中出现了环,所以现在进行 R2→ P2 的分配是不安全的。

(同样,如果没有出现环的话,就是安全的,是不是很简单呢)

在这里插入图片描述

2. 银行家算法

(1)数据结构

系统相关:
Available:可以利用的资源数组。Available[ j ] = K,说明 j 资源还有 K 个(也就是还剩下的资源)

进程相关:
最大需求矩阵 Max:进程所需要的总资源向量。Max [ i ,j ] = M ,说明进程 Pi 总共需要 M 个 j 资源。
需求矩阵 Need:进程需要的资源向量。Need [ i ,j ] = N ,说明进程 Pi 还需要 N 个 j 资源。
分配矩阵 Allocation:进程已经被分配的资源数目向量。Allocation [ i ,j ] = A ,说明进程 Pi 已经获得了 A 个 j 资源。
请求矩阵 Request:进程发出的资源请求向量。

那么是不是很容易想到: Need [ i ,j ] = Max [ i ,j ] - Allocation [ i ,j ] ,因为有时候题目上不会直接给出 Need 序列,需要自己先计算一下。

(2)银行家算法

直接拿做题过程来举例:

在这里插入图片描述

               ① 首先检查进程申请的各资源数量是否比它自己所需要的还多,是的话,出错,不分配。
               ② 否则检查进程申请的各资源数量是否比系统可以提供的还多,是的话,分配失败,等待。
               ③ 否则假设可以为其分配,修改 Pi 的相关矩阵:
                   Available = Available – Request[i]      //系统资源减少
                   Allocation[i] = Allocationi + Request[i]     //进程已分配的增加
                   Need[i]= Need[i] – Request[i]       //进程需要的减少
                   
               ④ 然后进行安全性检查。
                       Work 矩阵是什么?其实就是检查算法中的一个代替 Available 的临时矩阵。
                       当进程 Pi 执行完之后,它会释放资源,那么此时 Work = Work(原来系统剩余) + Allocation(Pi释放的)

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值