避免死锁之银行家算法

编程入门 行业动态 更新时间:2024-10-21 04:08:47

银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。

一、操作系统安全状态和不安全状态
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。

安全状态指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量(后边会谈到安全性算法来判断是否为安全状态)
不安全状态指不存在这样的一个安全序列。

安全状态一定不产生死锁,不安全状态不一定会产生死锁。

下面以一个小例子解释安全状态:

答案是按照 <P2,P1,P3>的推进序列使用磁带机就是安全的。

安全序列判断过程:
1、现在的可用(可以分配)的资源数是 3 ,而 P2 需要的资源数是 2,所以可以分配
2、待 P2 执行完毕后,释放资源数为 4,变成可用资源,加上之前剩余的可用资源数,一共是 5 个
3、观察到 P1 需要 5 个,所以分配给 P1
4、P1 执行完后释放资源数为 10,变成可用资源
5、而 P3 只需要 7 个,所以分配 7 个可用资源个 P3
6、P3 运行完毕

二、银行家算法

1、数据结构
1)可利用资源向量Available
是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。
2)最大需求矩阵Max
这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。
3)分配矩阵Allocation
这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K。
4)需求矩阵Need。
这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。
Need[i,j]=Max[i,j]-Allocation[i,j]

2、检测过程
1)假设 P1 进程提出请求 K 个资源
2)如果 K <= Need,就继续步骤;否则出错,因为请求资源 K 不能超过还需要获得的资源
3)如果 K <= Available,就继续步骤;否则出错,因为请求资源 K 不能超过系统还可以分配的资源 Available
4)系统试探分配资源,并修改下列数据
Available = Available - K;表示分配给 P1 K 个资源后,还剩多少系统可分配资源
Allocation = Allocation + K;表示 P1 已经获得的资源
Need = Need - K;表示进程 P1 还需要获得的资源
5)此时系统执行安全性算法,计算进程是否处于安全性状态

此时是执行的试探分配,为的是检查进程是否处于安全状态,不处于 则试探分配作废

3、安全性算法
两个向量
1)工作向量(Work):系统提供给进程的各类资源数目
2)Finish:表示系统是否有足够的资源分配给进程,这是一个布尔值。初始化为 false。

算法描述
在进程集合中找到下述条件的进程

1)Finish[ i ] = false;
2)Need <= Work
3)进程执行完毕
4)Work = Work + Allocation
5)Finish [ i ] = true
6)返回继续执行 1 ,寻找其他的进程分配资源
7)若所有的 Finish 为 true 则安全

4、实例

分析此时刻,P1 和 P3 都可以进行分配(PS:安全序列的结果并不是唯一的)
利用上述的银行家算法即可得出此时的安全序列:<P1,P3,P4,P2,P0>

本文参考:https://blog.csdn/qq_34902437/article/details/82936161

更多推荐

避免死锁之银行家算法

本文发布于:2023-05-28 12:32:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/320953.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:死锁   银行家   算法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!