银行家算法
避免死锁之银行家算法
关于前置知识不再赘述,直接讲解算法
算法思想
银行家算法是一种避免死锁的算法,它的基本思想是:如果系统当前处于安全状态,那么就允许进程申请资源;否则,进程必须等待,直到系统处于安全状态时才能申请资源。
算法描述
银行家算法的描述如下:
- 当一个进程需要一些资源时,它必须先申请,然后才能得到分配。
- 进程得到所有需要的资源后,它必须在有限的时间内使用完毕,然后归还所有资源。
- 当一个进程不能在有限的时间内使用完毕,那么它必须释放所有资源。
- 当一个进程不能得到所需要的所有资源时,它可以释放已经得到的资源,然后重新申请。
数据结构
可利用资源向量(Available)
这是一个含有 m 元素的数组,其中 m 是系统中资源的种类数。如果 Available[j]=k,那么就表示系统中当前有 k 个可用的资源 Rj。
最大需求矩阵(Max)
这是一个 n*m 的矩阵,其中 n 是进程数,m 是系统中资源的种类数。如果 Max[i][j]=k,那么就表示进程 Pi 需要 k 个资源 Rj。
分配矩阵(Allocation)
这是一个 n*m 的矩阵,其中 n 是进程数,m 是系统中资源的种类数。如果 Allocation[i][j]=k,那么就表示进程 Pi 当前已经分配到了 k 个资源 Rj。
需求矩阵(Need)
这是一个 n*m 的矩阵,其中 n 是进程数,m 是系统中资源的种类数。如果 Need[i][j]=k,那么就表示进程 Pi 还需要 k 个资源 Rj 才能完成任务。
小结,矩阵存在下列关系:
Need[i][j]=Max[i][j]-Allocation[i][j]
Available[j]=sum(Allocation[i][j])+Available[j]
算法实现
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 时空跃动
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果