操作系统-6【并发性:死锁和饥饿】

6.1 死锁原理

1. 是啥

  • 一组相互竞争的系统资源或进行通信的进程间永久的阻塞
  • 互相竞争
  • 死锁是永久的
  • 若无外力作用,都无法再向前推进

在这里插入图片描述

2. 可重用资源 Reusable Resources

特点:指一次仅提供一个进程安全使用且不因使用而耗尽not depleted 的资源

使用:进程得到资源单元并使用后,会释放这些单元供其他进程再次使用

举例:
处理器
IO通道
内存和存
设备
文件
数据库信号量等之类的数据结构

死锁发生在,如果每个进程占用着一个资源并且要求另一个
在这里插入图片描述
在这里插入图片描述

3. 可消耗资源Consumable Resources

特点:可被创建 ,可被销毁 的资源
举例:
中断interrupts
信号 signals
消息messages
I/O缓冲区的消息 inforamation

很少的时间组合也可能导致死锁
在这里插入图片描述

4. 资源分配图 resource allocation graph

有向图 :说明了系统资源和进程状态

在这里插入图片描述

5. 死锁的条件🎃

  • 互斥 mutual exclusion

一次只有一个进程占有一个资源,其他进程不能访问已分配给其他进程的资源

  • 占有且等待 hold and wait

当一个进程等待其他进程时,继续占有已分配的资源

  • 不可抢占 No preemption

不能强行抢占进程已占有的资源

  • 循环等待 ——充分条件
    存在一个闭合的进程链,每个进程至少占由此链中下一个进程所需的一个资源。

在这里插入图片描述
在这里插入图片描述
互斥、不可抢占、占有且等待
此三个为死锁的必要条件,也是产生循环的前置条件

6.2 死锁预防deadlock prevention

死锁预防策略是试图设计一种系统来排除发生死锁的可能性。
分为两类:

  • 间接死锁预防(防止三个必要条件的任何一个)
  • 直接死锁预防(防止 循环等待)
  1. 互斥

操作系统必须支持

  1. 占有且等待

要求进程一次性地请求所有需要的资源

  1. 不可抢占

该进程必须释放最初占有的资源,必要时可以再次申请这些资源和其他资源

  1. 循环等待
    定义资源 类型的线性顺序
    在这里插入图片描述

6.3 死锁避免 deadlock avoidance

在这里插入图片描述
两种方法:

  1. 若一个进程 的请求会导致死锁,则不启动该进程
  2. 若一个进程增加的资源请求会导致死锁,则不允许这一资源分配

资源分配拒绝 resource allocation denial

资源分配拒绝策略,又称为 银行家算法banker algorithm

安全状态:至少有一个资源分配不会导致死锁,所有进程都能运行直到结束
不安全状态:指非安全的一个状态

——银行家算法🎃

资源进程可提供的work需要的Need分配allocation把分配的释放收回work+allocationfinish
  1. 写出框架
  2. 把avaiable 写到work里
  3. 在Need里找小于等于work的,把满足要求的进程写到第一列
  4. 对应写上allocation,计算work+allocation finish为true
  5. 得到的W+A写到work,重复2-4

题型1

能否得到一个进程的序列,能找到,那就是安全的

在这里插入图片描述

题型2

看request ()问系统能否将资源分配给它

  1. 看request是否小于等于need,若不小于则失败
  2. 看request是否小于等于与avaiable,若不小于 则等待
  3. 以上满足后,尝试分配,并将available allocation need 修改,判断是否安全
    available= available-request
    allocation = allocation+request
    need=need-request
    在这里插入图片描述

再上例题

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.4 哲学家就餐问题

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
循环等待,死锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

名词解释

死锁

两个 或以上 的进程相互 等待其他进程 做完某些事情 而都不能执行

活锁

两个 或以上的进程为了 响应其他进程的变化而不断改变自己的状态,但不做有用的工作

饥饿

一个进程长时间得不到调度 不能执行

简答

死锁的充分条件

互斥
占有且等待
非抢占

死锁的充要条件

互斥
占有且等待
非抢占
循环等待

死锁预防

占有且等待:一次性请求所有资源
非抢占:当一个进程请求资源被抢占时,释放所有资源
循环等待:定义资源的先行访问顺序

死锁避免

进程启动拒绝
资源分配拒绝——银行家算法

死锁检测和恢复

所检测算法

死锁和饥饿的关系

死锁是一种特殊的饥饿

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值