当前位置: 首页 > ops >正文

2.4.4-死锁的处理策略-检测和解除

知识总览

 死锁的检测

用资源分配图这种数据结构来检测是否产生了死锁,资源分配图上有2种节点,进程节点用圆圈表示,一个圆圈代表一个进程,还有资源节点,一个矩形代表一类资源,用矩形中的圆圈表示当前类型的资源的数量,还有2种边,一个是圆圈指向矩形的即进程节点指向矩形节点的边,表示进程想请求资源,一条边表示请求一个资源,俩同样指向的边表示请求2个资源,另外一个是矩形执行圆圈的边,即资源分配给进程,一条边也表示分配了一个资源给某个进程,如下所示,p1一个指向R2,表示p1请求R2资源1个(R2资源现在有2个),P21个指向R1表示请求R1资源1个,R12个指向P1表示分配给了P1进程2个R1资源,R2 1个指向P2表示R2资源分配给了P2进程1个

检测死锁-未出现死锁:消除了所有边

如下所示,p1向申请了R2的1个资源,R2一共俩,一个分配给了P2,所以P1申请能满足,故p1正常运行不阻塞,P2申请R1的1个资源,R1一共仨,2个分配给了P1,1个分配给p2,此时R1资源数=0,故p2请求不能满足,p2阻塞,p1运行完之后P1归还所有资源,并把连接p1的所有边消除,归还之后R2=1,R1=2,则此时满足P2请求R1=1请求,故唤醒阻塞P2,开始分配资源运行,运行完之后归还所有资源消除所有边,所有边被消除未出现死锁,即该资源图可被完全简化

检测死锁-出现死锁:未消除所有边

如下所示:p1申请R2资源2个,R2一个一共俩,给了P3进程1个,给了P2进程1个,故R2=0,则P1请求不能满足,P1阻塞,P2申请R1资源1个,R1一共仨,给了P1进程2个,P2进程1个,故R1=0,则P2请求不能满足,P2阻塞,P3进程没有请求有1个R2资源,P3正常运行,运行完之后释放R2,归还所有资源并消除与P3相连的所有边,归还后R2=1,还是不满足P1请求,P1、P2继续阻塞,所有边未被消除,则出现死锁,连着边的进程P1、P2是处于死锁状态的进程

死锁定理

在资源分配图中,找出满足请求又连着线的进程,这意味着这个线程可以运行不阻塞,等它运行完之后会释放所有资源,因此修改系统资源数量,消除与它相连的所有边,让它称为孤立的节点,然后看现有的资源是否能唤醒其他阻塞的进程,能唤醒的话重复以上步骤,如果所有边能被消除则该图是可完全简化的,如果某时刻系统的资源分配图是不可完全简化的,则系统死锁

 

 

 解除死锁方法

 解除死锁方法:

1.资源剥夺。将死锁(阻塞)进程挂起放到外存,抢它们的资源分配给别的死锁进程,可能导致挂起的进程长时间得不到资源而饥饿

2.撤销进程。把一些或全部死锁进程强制关闭,然后把这些进程的资源分配给其他死锁进程,这样会导致有些死锁进程可能快运行完了现在关闭,还得重新运行,消耗大

3.进程回退。系统记录还原点,让一个或多个死锁进程回退到避免死锁的地步

让哪个进程牺牲(被剥夺资源/被关闭/被回退):

1.进程优先级。优先级低的先被牺牲

2.已执行多长时间。执行时间短的先被牺牲

3.还要多久才能完成。还要很长时间才能完成的先被牺牲

4.进程已经使用了多少资源。使用资源多的先被牺牲,这样释放的时候释放的资源多,别的死锁进程就能用的多了

4.进程是交互式的还是批处理式的。交互式的是跟用户打交道的,不能让用户等,所以先处理批处理的

 

知识回顾

 

。。。。。。。。。。。。。 

http://www.xdnf.cn/news/7818.html

相关文章:

  • origin绘图之【如何将多条重叠、高度重叠的点线图、折线图分开】
  • uni-app使用大集
  • uniapp-商城-64-后台 商品列表(商品修改---页面跳转,深浅copy应用,递归调用等)
  • STM32单片机GUI系统1 GUI基本内容
  • vue3 el-table 行号
  • ubuntu22.04上运行opentcs6.4版本
  • webpack5所用依赖以及对应的版本
  • [Harmony]自定义导航栏
  • 【Java基础笔记vlog】Java中常见的几种数组排序算法汇总详解
  • 算法分析与设计实验:找零钱问题的贪心算法与动态规划解决方案
  • Nginx网站服务
  • AI+MCP 自动发布小红书笔记
  • 【基础】Windows开发设置入门9:WSL 2 上的 Docker 容器
  • 基于Go语言的恶意软件通过Redis配置滥用向Linux主机部署XMRig挖矿程序
  • [论文精读]Ward: Provable RAG Dataset Inference via LLM Watermarks
  • 数据库健康监测器(BHM)实战:如何通过 HTML 报告识别潜在问题
  • Android OkHttp控制链:深入理解网络请求的流程管理
  • 动手学习深度学习V1.1 chapter2 (2.1-2.2)
  • 读一本书第一遍是快读还是细读?
  • 物理机做完bond后network服务重启失败
  • IntelliJ IDEA 接入 DeepSeek帮助你更好编码
  • net Core》》包与库 LibMan、NPM
  • 从加密到信任|密码重塑车路云一体化安全生态
  • 【Redis】二、Redis常用数据类型命令学习
  • 电感在断开的时候会按原来的电流方向流动这是什么定理?
  • Baklib内容中台的构建要点是什么?
  • 【性能测试】jvm监控
  • 前端JavaScript学习-动态编码-基础
  • 【每周一个MCP】:将pytdx封装成MCP
  • NFM算法解析:如何用神经网络增强因子分解机的特征交互能力?