银行家算法(The banker's algorithm)

银行家算法主要用于解决死锁问题,是一种基于静态资源分配的死锁检测方法。

首先,我们为资源定义出三种状态:

  1. 已被进程占用
  2. 进程资源需求最大值
  3. 系统可用资源

易见,(1)+(3)=系统资源总和

银行家算法就是通过枚举,验证能否通过手头上的可用资源,逐次满足各进程需要,并释放其占用资源,最终

实现所有进程的运行需要。

下面通过矩阵演示算法运行过程:

假设在某一状态,有

进程  最大需求内存  需求打印机         
|
 已占用内存   已占用打印机
A        

100
       
1
               
|
 
80
          
0

B        

200
       
0
               
|
 
50
           
0

可用资源:

内存   打印机

150    1

可见,A的需求能够满足。假设A能顺利运行并结束,则A释放所占用资源,此时矩阵化为:

进程  最大需求内存  需求打印机      
|
 已占用内存   已占用打印机
A     

100
           
1
               
|
 
80
           
0

B     

200
           
0
               
|
 
50
           
0

可用资源:

内存   打印机

230    1

此时,B进程的需求也得到满足,所有进程最后均顺利结束。我们称这种状态为安全状态(safe state)。反之,

则称为不安全状态(unsafe state)。不安全状态只是找不到一种合适的顺序,可以在使用已有资源的情况下逐次满足

*所有*进程的运行需要,但不一定导致死锁。下面假设两种情况:

  1. 有A、B两进程,当前可用资源无法满足任一进程的需要,但A在运行时暂时释放了所占用的资源,使得B得以结束,从而释放更多资源,使得A顺利结束。
  2. 有A、B、C三个进程,当前资源可以满足A的运行需要,因此此时A并没有陷入死锁。

因此,安全状态保证了一定不会发生死锁,而不安全状态没有这个保证,仅此而已。在实际应用当中,往往不能预知进程所需的资源最大值,且资源的可用性

容易改变(例如打印机卡纸了),所以应用不广。

相关链接:

死锁:
http://en.wikipedia.org/wiki/Deadlock

银行家算法(英文):
http://en.wikipedia.org/wiki/Banker%27s_algorithm

    原文作者:银行家问题
    原文地址: https://www.cnblogs.com/Lifehacker/articles/banker_algorithm.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞