【操作系统复习】Unit2-4:死锁

文章介绍了死锁的概念,包括其四个必要条件:互斥、请求并保持、不可剥夺和环路等待。处理死锁的方法包括预防、避免和检测解除。预防死锁通过破坏四个条件之一,如资源有序分配;避免死锁则采用银行家算法等动态策略;检测和解除死锁涉及检测资源分配图中的循环等待并采取撤销进程、剥夺资源或进程回退等措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.1 死锁的概念

死锁:一组进程中,每个进程都无限等待被该组进程中其它进程所占有的资源,在无外力介入的条件下,将因永远分配不到资源而无法运行的现象

死锁发生的原因:资源竞争、并发执行顺序的不当

竞争不可剥夺资源引起死锁,对可剥夺资源的竞争不会引起死锁

死锁发生的四个必要条件

  1. 互斥条件:一段时间内某资源只能由一个进程占用
  2. 请求和占有条件/请求并保持条件:指进程已经占有至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
  3. 不可剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
  4. 环路等待条件:指在发生死锁时,必然存在一个进程— —资源的环形链(资源分配图含圈,但不一定会发生死锁,因为同类资源数可能大于1)

活锁:是指任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。

  • 处于活锁的实体是在不断的改变状态,即所谓的“活”;活锁有可能自行解开,死锁则不能。避免活锁的简单方法是采用先来先服务的策略。

4.2 处理死锁的基本方法

不允许死锁发生:

  • 预防死锁(静态)
  • 避免死锁(动态):在资源分配之前进行判断

允许死锁发生

  • 检测与解除死锁
  • 无所作为:鸵鸟算法
4.2.1 死锁预防

破坏死锁的四个必要条件,限制进程有关资源的申请。

  1. 打破互斥条件:即允许进程同时访问某些资源。eg:Spooling技术
  2. 打破占有且申请条件:可以实行资源预先分配策略。只有当系统能够满足当前进程的全部资源需求时,才一次性地将所申请的资源全部分配给该进程,否则不分配任何资源。
    1. 这种策略的缺点:程序执行是动态的,不可预测其所需要的全部资源
    2. 资源利用率低,有些资源可能只在最后才用到一次,但会被一直占用
    3. 降低了程序的并发性。资源有限+会存在浪费
  3. 打破不可剥夺条件:即允许进程强行从占有者那里夺取某些资源。就是说,当一个进程已占有了某些资源,它又申请新的资源,当不能立即被满足时,须释放所占有的全部资源,以后再重新申请。这种预防死锁的方法实现起来困难,会降低系统性能
  4. 打破循环等待条件:实行资源有序分配策略。对资源的请求必须严格按资源序号递增的顺序提出。存在以下缺点:
    1. 限制了进程对资源的请求,同时给系统中所有资源合理编号也是件困难事,并增加了系统开销;
    2. 为了遵循按编号申请的次序,暂不使用的资源也需要提前申请,从而增加了进程对资源的占用时间。
4.2.2 死锁避免

对进程所发出的每一个申请资源命令进行动态检查。死锁避免不严格限制产生思索的四个必要条件,不限制进程有关资源的申请。

并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁。

银行家算法 【王道P141】

银行家算法的特点:

  • 允许互斥、部分分配和不可抢占,可提高资源利用率
  • 要求事先说明最大资源要求,在现实中很困难
4.2.3 死锁检测和解除

死锁检测算法主要是根据资源分配图/进程-资源图检查是否有循环等待。

框表示资源,圆圈表示进程

死锁定理:系统中某个时刻t为死锁状态的充要条件是t时刻系统的资源分配图是不可完全化简的。

死锁解除

死锁解除重要的是以最小的代价恢复系统的运行

  • 撤消进程:强制撤掉部分甚至全部死锁的进程,直至有足够的资源可用,死锁状态消除为止
  • 剥夺资源:使用挂起挂起一些死锁进程,剥夺它们的资源以解除死锁,待条件满足时,再激活进程
  • 进程回退法:让一个/多个进程回退到足以回避死锁的地步
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值