操作系统死锁银行家算法详解

本文最后更新于:2 年前

前言

关于处理死锁的一个经典算法 银行家算法 详解。

一.银行家算法微例

其实我们把资源看的简单一点,只看一个资源。

比如说你有10块钱,有很多人想向你借钱。
银行家算法就是保证有人向你借钱的时候,你能够有钱借给他。

具体的想法是这样的,比如说有A B C D 4个人想跟你借钱。
你给每人都发了2块钱。
每个人的需求都不一样。
A 想要借 5块钱,B想要借 8块钱,C想要借 6块钱,D想要借 3块钱。

这样我们就可以搭建一个简单粗略的需求表。

1
2
3
4
5
借钱人       想要借多少       已经借多少给他       还要借多少给他
A 5 2 3
B 8 2 6
C 6 2 4
D 3 2 1

这个时候你看 你手上还有2块钱,还能借给谁呢?
D D还差1块钱就满足了,所以你选择借给D,然后D借完了钱用好了还给你了。

这个时候你手上就有4块钱了。 ABC还在等着排队跟你借钱呢。
这个时候你再看,B跟你要6块,你没有啊,只能选择借给A或者C,看关系优先借给谁把。

所以你选择借给A,然后A借完了钱用好了还给你了。
这个时候你手上就有6块钱了。 就剩BC了。
你都可以满足他们的借款需求,看关系优先借给谁。

所以你选择借给C,然后C借完了钱用好了还给你了。
这个时候你手上就有8块钱了。 最后借给B。

我们这个放贷的顺序,就是D-A-C-B

这个就是一个简单的银行家算法的安全序列。


二.银行家算法详解

当然这个只是单个资源的情况下,多个资源就是共同判断。

银行家算法也有很多限制条件。

  1. 顾客的借款操作依次顺序进行。
  2. 顾客需要说明最大借款额。


三.安全序列和能否满足

1.安全序列

安全序列就是上面微例的一个借款顺序,计算机中就是进程的运行顺序,并不唯一。

2.能否满足

这点就毋庸置疑。

  1. 看你的钱能不能满足借款人的需求。 你有10块钱 别人想要100 满足不了。
  2. 突然提出请求也很简单,假设我把钱借给它了,那么我剩下的钱,能不能支持我再进行一次安全序列来判断满不满足。

操作系统死锁银行家算法详解
https://www.chaierss.online/posts/bc8f3be9.html
作者
Chaierss
发布于
2024年9月30日
许可协议