银行家算法(The banker's algorithm)
银行家算法主要用于解决死锁问题,是一种基于静态资源分配的死锁检测方法。
首先,我们为资源定义出三种状态:
易见,(1)+(3)=系统资源总和
银行家算法就是通过枚举,验证能否通过手头上的可用资源,逐次满足各进程需要,并释放其占用资源,最终
实现所有进程的运行需要。
下面通过矩阵演示算法运行过程:
假设在某一状态,有
可用资源:
内存 打印机
150 1
可见,A的需求能够满足。假设A能顺利运行并结束,则A释放所占用资源,此时矩阵化为:
可用资源:
内存 打印机
230 1
此时,B进程的需求也得到满足,所有进程最后均顺利结束。我们称这种状态为安全状态(safe state)。反之,
则称为不安全状态(unsafe state)。不安全状态只是找不到一种合适的顺序,可以在使用已有资源的情况下逐次满足
*所有*进程的运行需要,但不一定导致死锁。下面假设两种情况:
容易改变(例如打印机卡纸了),所以应用不广。
相关链接:
死锁:http://en.wikipedia.org/wiki/Deadlock
银行家算法(英文):http://en.wikipedia.org/wiki/Banker%27s_algorithm
首先,我们为资源定义出三种状态:
- 已被进程占用
- 进程资源需求最大值
- 系统可用资源
易见,(1)+(3)=系统资源总和
银行家算法就是通过枚举,验证能否通过手头上的可用资源,逐次满足各进程需要,并释放其占用资源,最终
实现所有进程的运行需要。
下面通过矩阵演示算法运行过程:
假设在某一状态,有
进程 最大需求内存 需求打印机 | 已占用内存 已占用打印机
A 100 1 | 80 0
B 200 0 | 50 0
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
A 100 1 | 80 0
B 200 0 | 50 0
可用资源:
内存 打印机
230 1
此时,B进程的需求也得到满足,所有进程最后均顺利结束。我们称这种状态为安全状态(safe state)。反之,
则称为不安全状态(unsafe state)。不安全状态只是找不到一种合适的顺序,可以在使用已有资源的情况下逐次满足
*所有*进程的运行需要,但不一定导致死锁。下面假设两种情况:
- 有A、B两进程,当前可用资源无法满足任一进程的需要,但A在运行时暂时释放了所占用的资源,使得B得以结束,从而释放更多资源,使得A顺利结束。
- 有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) 编辑 收藏 举报