死锁流程图
死锁流程图
复习画流程图一目了然。
死锁
死锁概述
资源问题 1.可重用性资源和消耗性资源 可重用性资源: 重复供用户多次使用的资源 性质:1.每一个可重用性资源中的单元只能分配给一个进程使用,不允许多个进程共享。2.进程使用可重用性资源必须按照如下顺序:一,请求资源;二,使用资源;三,释放资源。 3.系统中每一类可重用资源中的单元书面是相对固定的,进程在运行期间既不能创建也不能删除。 可消耗性资源:又称临时性资源。 性质:1.每一类可消耗性资源的单元数目在进程运行期间是可以不断变化的,有时众多,有时为0;2.进程在运行过程中,可以不断创造可消耗资源的单元,将它们放入该资源类的缓冲区,以增加该资源类的单元数目;3.进程在运行过程中,可以请求若干个可消耗性资源单元,用于进程自己消耗,不再将它们返回资源类中,通常由生产者进程创建,消耗者进程消耗。 2.可抢占性资源&&不可抢占性资源 可抢占性资源 如:CPU和主存 不可抢占性资源 如:打印机,磁带机 计算机系统中死锁问题 竞争不可抢占性资源引起死锁:通常系统中的不可抢占性资源数量不足以满足多个进程运行 needs,导致程序在运行过程中会因争夺资源而陷入僵局。 竞争可消耗性资源引起死锁:等待一条永远不会发出的消息,于是发生了死锁。 进程推进顺序不当发生死锁: 死锁的定义,必要条件处理方法 定义:如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那该组进程是死锁的(Deadlock)。 产生死锁的必要条件: 1.互斥条件 2.请求和保持条件 3.不可抢占条件 4.循环等待条件
处理死锁方法 预防死锁
避免死锁
检测死锁
解除死锁预防死锁 破坏“请求和保持“条件 第一种协议
规定在所有进程运行前,必须一次性地申请其整个运行过程中所需的全部资源
缺点:资源严重浪费,进程会常发生饥饿现象 第二种协议
允许一个进程只获得运行初期所需的资源,便开始运行。运行中逐步释放已经用毕的全部资源,然后再请求所需新的资源。
优化系统 提高设备利用率,减少饥饿率 破坏“不可抢占”条件 协议中规定某些不可被抢占资源的进程提出的新资源需求得不到满足,必须释放已经保持的所有资源,待以后需要重新请求,资源暂时被释放or被抢占,从而破坏了“不可被抢占”条件。
缺点:实现复杂,增加系统开销,降低系统吞吐量。 破坏“循环等待”条件 对所有资源类型进行线性排序,按照顺序请求资源。问题:系统中的资源所规定的序号必须相对稳定,限制新设备的增加作业使用资源顺序与系统规定顺序不一。对用户限制大。
避免死锁 系统安全状态 安全状态:系统进行资源分配前,进行安全性计算,找到安全序列则安全,反之亦然。 安全序列
安全转不安全 利用银行家算法避免死锁
1.银行家算法中的数据结构关系:Need[i,j]=Max[i,j]-Allocation[i,j]
2.银行家算法
安全性算法
死锁的检查与解除 死锁的检验&&解除
前提:1.系统必须保存有关资源请求和分配信息;2.提供一种算法,利用这些信息来检测系统是否已进入死锁状态。 死锁解除
1.抢占资源
2.终止或撤销进程
终止方法:1.终止所有死锁进程;2.挨个终止
本文来自博客园,作者:taotooler,转载请注明原文链接:https://www.cnblogs.com/taolo/p/17225922.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?