银行家算法(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

posted on 2009-09-29 00:17  lifehacker  阅读(3213)  评论(0编辑  收藏  举报

导航