银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。
1)可利用资源向量Available
是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。
2)最大需求矩阵Max
这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。
3)分配矩阵Allocation
这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K。
4)需求矩阵Need。
这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。
Need[i,j]=Max[i,j]-Allocation[i,j]
A B C资源为10,5,7
Max A B C | Allocation A B C | Need A B C | Available A B C | |
P0 | 7 5 3 | 0 1 0 | 7 4 3 | 3 3 2 |
P1 | 3 2 2 | 2 0 0 | 1 2 2 | |
P2 | 9 0 2 | 3 0 2 | 6 0 0 | |
P3 | 2 2 2 | 2 1 1 | 0 1 1 | |
P4 | 4 3 3 | 0 0 2 | 4 3 1 |
Availavle=10-(2+3+2)=3
WORK A B C | NEED A B C | ALLOCATION A B C | WORI+ALLOCATION A B C | FINISH | |
P1 | 3 2 2 | 1 2 2 | 2 0 0 | 5 3 2 | 1 |
P3 | 5 3 2 | 0 1 1 | 2 1 1 | 7 4 3 | 1 |
P4 | 7 4 3 | 4 3 1 | 0 0 2 | 7 4 5 | 1 |
P2 | 7 4 5 | 6 0 0 | 3 0 2 | 10 4 7 | 1 |
P0 | 10 4 7 | 7 4 3 | 0 1 0 | 10 5 7 | 1 |
如果最后不是得到与最初ABC资源一样,则解错
银行家算法是一种用于避免操作系统中死锁的策略,它涉及到四个关键数据结构:可利用资源向量、最大需求矩阵、分配矩阵和需求矩阵。系统在分配资源前会检查分配是否安全,确保不会导致死锁。给定的例子展示了如何应用算法来管理ABC三种类型的资源,并确保系统稳定。
1654

被折叠的 条评论
为什么被折叠?



