银行家算法中安全检查算法正确性证明
符号说明
:如果两个同维行向量 、 中, 中任意一个元素都小于 中对应位置上的元素,则 为真。
:如果两个同维行向量 、 中, 中存在一个元素小于 中对应位置上的元素,则 为真。
、、 等同理。
:系统初始资源向量
:如果作业 能够被释放,则需要
:作业当前占有的资源向量,作业 释放后, 将累加到资源向量 中
证明:
设安全性检查算法无法找到合法的安全序列时,已经释放的作业的集合为 。此时,系统资源向量
此时无法找到安全序列,这说明,对于所有剩余未释放的作业 ,。
- 不可能通过调整 中作业释放的顺序改变 的值。
因为 中的作业的任何一种可能的释放顺序所释放的资源都是 。
- 不可能改变 。
设 是 的一个子集,那么,必有
因此,,释放 的任何一个子集都不能把 中的作业某一作业纳入集合,因为 。
因此我们证明了,对于一个给定的状态,如果系统中不存在安全序列,那么一定能被释放的作业的集合 和不可能被释放的作业的集合 是确定的,不因为算法的不同而不同。
在安全检查算法中,内层循环遍历所有未释放的作业,发现没有任何一个作业可被释放,就是上述的情况,已经证明了,在这种情况下,判定系统不存在安全序列是正确的。反之不出现上述情况,则系统存在安全序列的判定也是正确的。
本文来自博客园,作者:Sarfish,转载请注明原文链接:https://www.cnblogs.com/sarfish/p/17056385.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现