操作系统 -- 死锁避免(银行家算法)
==可利用资源向量 Available==。这是一个含有 m 个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果 Available[j]=K,则表示系统中现有 Rj 类资源 K 个。
==最大需求矩阵 Max==。这是一个 n×m 的矩阵,它定义了系统中 n 个进程中的每一个进程对 m 类资源的最大需求。如果 Max[i,j]=K,则表示进程 i 需要 Rj 类资源的最大数目为 K。
==分配矩阵 Allocation==。这也是一个 n×m 的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果 Allocation[i,j]=K,则表示进程 i 当前已分得 Rj 类资源的数目为 K。
==需求矩阵 Need==。这也是一个 n×m 的矩阵,
用以表示每一个进程尚需的各类资源数。
如果 Need[i,j]=K,则表示进程 i 还需要 Rj 类资源 K 个,方能完成其任务。
$Need[i,j]=Max[i,j]-Allocation[i,j]$
假定系统中有五个进程{P0, P1, P2, P3, P4}和三类资源{A, B, C},各种资源的数量分别为 10、5、7,在 T0 时刻的资源分配情况如图所示。
P1 请求资源:P1 发出请求向量 Request1(1,0,2),系统按银行家算法进行检查:
① Request1(1, 0, 2)≤Need1(1, 2, 2)
② Request1(1, 0, 2)≤Available1(3, 3, 2)
③ 系统先假定可为 P1 分配资源,并修改 Available, Allocation1 和 Need1 向量,由此形成的资源变化情况如中的红色字体所示。
④ 再利用安全性算法检查此时系统是否安全。
版权声明: 本文为 InfoQ 作者【风骨散人】的原创文章。
原文链接:【http://xie.infoq.cn/article/1d76ea4f7fc3e53b7b2bc20da】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论