进程资源图理解与化简

一 了解进程资源图



二 化简资源分配图


方法步骤

  • 第一步:先看系统还剩下多少资源没分配,再看有哪些进程是不阻塞(“不阻塞”即:系统有足够的空闲资源分配给它)的
  • 第二步:把不阻塞的进程的所有边都去掉,形成一个孤立的点,再把系统分配给这个进程的资源回收回来
  • 第三步:看剩下的进程有哪些是不阻塞的,然后又把它们逐个变成孤立的点。
  • 第四步:最后,所有的资源和进程都变成孤立的点。这样的图就叫做“可完全简化”。

如果一个图可完全简化,则不会产生死锁;如果一个图不可完全简化(即:图中还有“边”存在),则会产生死锁。这就是“死锁定理”。 

实例

解析:

R1有两个资源,一个分配给了P1,,一个分配给了P3,此时P2申请R1的资源,因为R1此时没有可用资源,P2堵塞。

R2有三个资源,已经给P1,P2,P3,各自分配了一个资源,而P1此时又再次申请资源R2,P1堵塞

R3有两个资源,已经分配给P2一个,P2申请一个资源,分配给它,所以P3是非阻塞结点

化简的话,看从没有阻塞的结点开始,删去P3周围所有的bian边,使其成为一个孤立的点,然后看剩下的资源按上述步骤再次进行分配,若到最后只剩下一群孤立的点,则说明该资源图是可以化简的。

转载自:https://blog.youkuaiyun.com/cwxxiayi/article/details/80288850

### 如何化简进程资源图 #### 一、基本概念 在讨论如何化简进程资源图之前,需了解一些基础术语。资源(Resource)通常缩写为 R,而进程(Process)则缩写为 P[^2]。进程资源图是一种用于描述系统中进程资源之间关系的形表示法。 #### 二、化简方法 以下是具体的化简步骤: 1. **分析剩余资源** 首先查看当前系统还有哪些未分配的资源可用。接着识别是否存在任何不阻塞的进程。“不阻塞”的定义是指系统有足够的空闲资源可以满足这些进程的需求。 2. **移除不阻塞的进程及其关联边** 对于那些已经被确认为“不阻塞”的进程,将其从中删除,并将原本分配给它的所有资源重新返回到系统的可用资源池中。这一操作会使得其他可能处于等待状态的进程有机会变为“不阻塞”[^3]。 3. **重复上述过程直至无法进一步简化** 不断执行前两步的操作,持续寻找新的不再依赖额外资源即可完成的任务并处理之。每次成功消除一个任务都会增加总的自由资源数量,从而有可能让更多的后续任务得以启动[^4]。 4. **最终验证是否达到完全简化状态** 如果通过以上步骤能够去除掉原中的每一条连接线,那么这张初始复杂的进程资源图就被认为是可以完全简化的;否则的话,当存在至少一个循环路径或者某些节点始终得不到所需资源时,则表明发生了死锁情况。 #### 示例代码展示 下面给一段伪代码来模拟整个流程逻辑: ```pseudo function SimplifyGraph(graph, availableResources): while True: unblockedProcesses = FindUnblockedProcesses(availableResources, graph) if not unblockedProcesses: break for process in unblockedProcesses: ReleaseResources(process.resourcesHeld) RemoveNodeFromGraph(process) return IsCompletelySimplified(graph) ``` 其中 `FindUnblockedProcesses` 函数负责查找所有当前条件下可以直接运行而不受阻碍的进程集合;`ReleaseResources` 和 `RemoveNodeFromGraph` 则分别对应着释放已结束进程所占用的所有资源并将该进程彻底清除表结构这两项动作。 #### 结论 综上所述,通过对进程资源图进行逐步分解的方式不仅可以帮助我们更好地理解各个组成部分之间的相互作用机制,而且还能有效检测潜在的安全隐患比如死锁等问题的存在否。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值