进程死锁终结者——银行家算法

在学习操作系统中进程的时候,会接触到进程死锁这个名称。那么什么是进程死锁?

 

进程死锁指的是:如果多个进程同时占有对方需要的资源而同时请求对方的资源,而它们在得到请求之前不会释放所占有的资源,那么就会导致死锁的发生,也就是进程不能实现同步。

 

那么死锁是怎样产生的?

死锁的产生有四个必要条件:

互斥条件:即一个资源每次只能被一个进程使用(在操作系统中这是真实存在的情况)

保持和等待条件:有一个进程已获得了一些资源,但因请求其他资源被阻塞时,对已获得的资源保持不放

不剥夺条件:有些系统资源是不可剥夺的,当某个进程已获得这种资源后,系统不能强行收回,只能由进程使用完成时自己释放

环路等待条件:若干个进程形成环形链,每个都占用对方要申请的下一个资源

 

而避免死锁最具有代表性的就是——银行家算法

至于什么是银行家算法,这里就不再赘述了,说实话,单凭概念很难理解它的含义,还是通过讲解例子,来理解到底什么是银行家算法。

 

例题:假设系统中有三类互斥资源R1、R2、R3,可用资源数分别是9、8、5.在T0时刻,系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求量和已分配的资源数如下所示,如果进程按照______序列执行,那么系统状态是安全的。


 解答过程:

从题目给出的进程资源表可以看出,对于资源R1、R2、R3,它们已经提前各自分配了一部分,现在我们看一下,是否还有剩余。

R1=9-(1+2+2++1)=2

R2=8-(2+1+1+2+1)=1

R3=5-(1+1+3)=0

同时,对于五个进程,系统分配给了他们各自一部分资源,这一部分资源是否能够满足他们,根据还需资源=最大需求量—已分配资源数来求,结果如下 

                       资源

进程

最大需求量

R1    R2   R3

已分配资源数

R1    R2   R3

剩余资源

R1    R2   R3

还需资源数

R1    R2   R3

P1

6     5    2

1     2    1

 

 

2     1    0

 

5     3    1

P2

2     2    1

 2     1    1

 0     1    0

P3

 8     1    1

 2     1    0

 6     0    1

P4

 1     2    1

 1     2    0

 0     0    1

P5

 3     4    4

 1     1    3

 2     3    1

很明显,“剩余资源”只能满足进程P2的要求

                       资源

进程

最大需求量

R1    R2   R3

已分配资源数

R1    R2   R3

剩余资源

R1    R2   R3

还需资源数

R1    R2   R3

P2

2     2    1

2     1    1

2     1    0

0     1    0

那么就先开始运行进程P2。当P2运行之后,已“分配的资源”要释放出来,此时剩余资源=上一个进程的剩余资源+“已分配资源”(下图中P2已经执行完毕了)

                       资源

进程

最大需求量

R1    R2   R3

已分配资源数

R1    R2   R3

剩余资源

R1    R2   R3

还需资源数

R1    R2   R3

P2

2     2    1

2     1    1

4     2    1

0     1    0

根据比较可以看出“剩余资源”完全满足进程P4,以此类推,可以得到最后的结果表

                       资源

进程

最大需求量

R1    R2   R3

已分配资源数

R1    R2   R3

剩余资源

R1    R2   R3

还需资源数

R1    R2   R3

 

 

 

2     1    0

 

P2

2     2    1

 2     1    1

4     2    1

 0     1    0

P4

 1     2    1

 1     2    0

 5     4    1

 0     0    1

P1

6     5    2

1     2    1

6     6    2

5     3    1

P5

 3     4    4

 1     1    3

 8     7    2

 2     3    1

P3

 8     1    1

 2     1    0

 10    8    2

 6     0    1

银行家是计算并不难,主要就是有些繁琐,在计算的时候需要耐心。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值