栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

二、进程管理--死锁

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二、进程管理--死锁

死锁的定义
  • 死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进

  • 饥饿:由于长期得不到想要的资源,某进程无法向前推进

  • 死循环:某进程执行过程中一直跳不出某个循环

死锁产生的条件

(需同时满足)

  • 互斥条件:对必须互斥使用的资源进行抢夺
  • 不剥夺条件:进程所获得的资源在未使用完之前,不能被其他进程强行夺走,只能是主动释放
  • 请求并保持条件:进程在申请新的资源时,至少已经保持了一个资源
  • 循环等待条件:一种进程资源的循环等待链
死锁产生的原因

(1)系统资源的竞争

  • 系统中的不可剥夺资源数量不足以满足多个进程的需要,会因资源抢夺而陷入僵局,如磁带机、打印机等

(2)进程推进顺序非法

  • 进程在运行过程中,请求和释放资源的顺序不当,会导致死锁

(3)信号量使用不当

  • 进程间彼此互相等待对方发来的消息,会使进程无法向前推进
死锁的处理

预防死锁 (破坏死锁产生的四个必要条件之一)

  • 破坏互斥条件:把只能互斥使用的资源改为允许共享使用
  • 破坏不可剥夺条件:
    1.当某个进程请求新的资源得不到满足时,必须立即释放手头的所有资源
    2.当某个进程需要的资源被其他进程占有时,可由操作系统协助强行剥夺,一般要考虑优先级
  • 破坏请求并保持条件:采用静态分配方法,即进程在运行之前一次性申请完所有需要的资源
  • 破坏循环等待条件:采用顺序资源分配法,给资源编号,要求进程在申请资源时按编号递增的顺序申请,同类资源一次性申请完

避免死锁

  • 安全序列:就是指如果系统按某种序列分配资源,则每个进程都能顺利完成,只要能找出一个安全序列,系统就是安全状态。安全状态一定不会发生死锁,不安全状态有可能发生死锁,死锁一定是在不安全状态。

  • 银行家算法:在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。

  • 数据结构的描述:

  • 安全性算法步骤:

  1. 检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收
  2. 不断重复上述过程,看最终是否能够让所有人都加入安全序列
  • 银行家算法步骤:
  1. 检查此次申请是否超过了之前声明的最大需求数
  2. 检查此时系统剩余的可用资源是否还能满足这次请求
  3. 试探性分配,更改各数据结构
  4. 用安全性算法检查此次分配是否会导致系统进入不安全状态

死锁的检测及解除

检测系统是否发生死锁:资源分配图


检测过程:找到既不阻塞又不是孤点的进程,消去它所有的请求边和分配边,使之成为孤点,比如P1,然后归还所有资源,供因等待这些资源而阻塞的进程,比如P2。
用死锁检测算法化简资源分配图后,还连着边的进程就是死锁进程
死锁解除方法

  • 资源剥夺法
  • 撤销进程法
  • 进程回退法
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979067.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号