无需登录 数据私有 本地保存

死锁检测图模拟 - 资源分配图算法

35
0
0
0
资源分配图 | 就绪 - 移动模式
进程节点 资源节点 分配边(资源→进程) 请求边(进程→资源) 死锁环路 拖拽移动节点 | 点击模式按钮切换 | 选中后删除
常见问题与知识点
什么是资源分配图(RAG)?
资源分配图(Resource Allocation Graph)是一种有向图,用于描述操作系统中进程和资源之间的分配与请求关系。图中包含两类节点:进程节点(圆形)和资源节点(方形,内部圆点表示实例数量)。边分为分配边(资源→进程,表示资源已分配给该进程)和请求边(进程→资源,表示进程正在等待该资源)。通过分析图中是否存在环路,可以判断系统是否发生死锁。
死锁的四个必要条件是什么?
死锁的发生必须同时满足四个条件:
1. 互斥条件:资源不能被多个进程同时使用;
2. 持有并等待:进程已持有资源,同时又在等待其他资源;
3. 不可剥夺:已分配给进程的资源不能被强制收回;
4. 循环等待:存在进程-资源的循环等待链。资源分配图中的环路正是循环等待条件的可视化体现。
如何使用本工具检测死锁?
使用步骤:
1. 使用预设示例快速加载场景,或手动添加进程/资源节点;
2. 使用分配边模式(资源→进程)和请求边模式(进程→资源)建立关系;
3. 点击检测死锁按钮,系统将自动分析等待图并检测环路;
4. 若存在死锁,相关节点和边会以红色高亮显示,环路中的元素将闪烁提示。
提示:在移动模式下可拖拽节点调整布局,单击选中节点或边后可删除。
单实例资源与多实例资源的死锁检测有何不同?
对于单实例资源(每个资源仅1个实例),死锁检测简化为在资源分配图中直接查找环路——有环即死锁。
对于多实例资源,需要构建等待图:只有当资源的所有实例都被占用时,请求该资源的进程才会真正阻塞等待。如果资源还有可用实例,请求边不会导致阻塞。本工具已实现完整的多实例资源死锁检测算法,准确模拟实际操作系统中的行为。
死锁预防与死锁避免有什么区别?
死锁预防通过破坏死锁四个必要条件之一来杜绝死锁(如强制资源一次性分配、允许资源剥夺等),属于静态策略。
死锁避免(如银行家算法)则在运行时动态判断资源分配是否会导致不安全状态,需要预知进程的最大资源需求。资源分配图算法是死锁检测的重要手段,属于事中检测而非预防。
在操作系统中,检测到死锁后如何处理?
操作系统检测到死锁后通常采取以下措施之一:
1. 终止进程:终止死锁环中的一个或多个进程,释放其占用的资源;
2. 资源剥夺:从某些进程中强制收回资源分配给其他进程;
3. 回滚:将进程回滚到之前的检查点状态。选择"牺牲"进程时通常考虑优先级、已运行时间、持有资源数量等因素。