操作系统2.4,考研掌握这些就够了

2.3 进程管理:死锁

死锁的基本概念思维导图:

死锁的基本概念

死锁是多个进程由于资源的竞争导致的一种阻塞现象

死锁、饥饿、死循环:

共同点:进程都不能继续向前推进

不同点:

  • 死锁:2个以上进程循环等待对方手里的资源;
  • 饥饿:表现为进程长期得不到处理机资源,可能处于就绪态或阻塞态,可以只有1个
  • 死循环:进程可以正常运行,由程序员错误导致

死锁的原因

  1. 竞争有限的系统资源:m个进程,每个进程需k个资源, 不产生死锁最小资源数 (k-1)m+1;
  2. 进程推进顺序不当:如互斥信号量的P操作必须在同步信号量的P操作之后

死锁产生的必要条件

  • 互斥条件
  • 请求和保持条件
  • 不可剥夺条件
  • 循环等待条件

产生死锁一定满足四个必要条件,满足四个必要条件不一定发生死锁

死锁预防思维导图:

死锁预防

死锁预防是一种静态的死锁解决办法,破环产生死锁的四个必要条件中的一个

破环互斥条件

  • SPOOLing技术:把打印机改为逻辑上的共享设备
  • 一般情况下互斥条件不能被破坏

破环请求和保持条件

  • 一次性分配策略:要求所有进程一次性申请所有资源
  • 要求持有资源的进程在请求新资源前释放

破环不可剥夺条件

  • 若进程请求新资源被阻塞,则释放该进程所占有的所有资源
  • 当进程申请一个资源被等待时,寻找已拥有该种资源并阻塞的进程抢占资源

破环循环等待条件

  • 有序资源分配法:对所有资源编号,进程只能按顺序申请资源

死锁避免思维导图:

死锁避免

死锁避免是一种动态的死锁解决方法

核心在于“试探” 对于每一次资源申请,先尝试分配,判断是否有死锁风险,若没有,再真正分配

安全状态

  • 是指系统能够满足所有进程的资源请求,而不陷入死锁状态
  • 安全状态是无死锁的,不安全状态不一定死锁
  • 死锁一定处于不安全状态

银行家算法

数据结构

  • 恒等式3数组 Need[i][j] = Max[i][j] - Allocation[i][j]
  • 系统可用资源 Available[j]

思想

  1. 检测请求是否大于进程所申报的最大数量 Request[j]<=Need[i][j];
  2. 检测请求是否超过了系统资源数量 Request[j]<=Available[j]
  3. 尝试分配,更新3数组 Available][j]-=Request[j]; Allocation[i][j]+=Request[j]; Need[i][j]-=Request[j];
  4. 真正分配,更新数组的值

注意点:寻找安全序列时Available的值要先减去Request再加上Max

4)判断系统安全状态 / 安全性算法

  • Work[j]=Available[j]; Finish[i]=false;
  • 找到一组安全序列使得所有进程能够顺利完成
  • Finish[i]=TRUE; 则系统安全,不会产生死锁

死锁的监测和解除思维导图:

死锁检测和解除

死锁检测

方法:化简资源分配图

  • 当出现了环路,不一定产生死锁
  • 没有环路一定不会产生死锁
  • 死锁定理:当且仅当资源分配图是不可完全简化的,用于死锁检测
  • 可完全简化的,不会产生死锁
  • 不可完全简化的,不一定发生死锁

死锁解除

  • 系统重启
  • 撤销所有进程
  • 逐一撤销进程,直到死锁不再发生
  • 退回检查点
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毓见美好.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值