【《现代操作系统 第4版》】7、死锁

所谓死锁,就是一种"我手上拿着苹果,想要你手上的梨子,你手上拿着梨子,想要我手上的苹果"的僵持状态。

资源

大部分死锁都和资源有关。

所谓资源就是需要排他性使用的对象。资源可以是硬件设备(如蓝光驱动器)或是一组信息(如数据库中一个加锁的记录)。

通常在计算机中有多种(可获取的)资源。一些类型的资源会有若干个相同的实例,如三台蓝光驱动器。当某一资源有若干实例时,其中任何一个都可以用来满足对资源的请求。

简单来说,资源就是随着时间的推移,必须能获得、使用以及释放的任何东西。

资源的分类

  • 可抢占资源:可以从拥有它的进程中抢占而不会产生任何副作用的资源。比如存储器
  • 不可抢占资源:在不引起相关的计算失败的情况下,无法从占有它的进程处抢占过来的资源。比如蓝关驱动器

某个资源是否可抢占取决于上下文环境。比如PC中的内存是可抢占资源,但是在不支持交换和页面调度的手机中内存是不可抢占资源。

死锁与不可抢占资源有关,可抢占资源的潜在死锁通常可以通过在进程之间重新分配资源而化解。

在这里插入图片描述

死锁

资源分配图

将死锁问题抽象化,死锁问题中的对象是进程和资源,进程对资源的操作分别为请求、持有和释放。

使用资源分配图它来描述资源和进程间的分配和占用关系:

  • 圆形表示进程,方形表示资源
  • 方形中的每个圆点表示一个资源实例
  • 从资源节点到进程节点的有向边代表该资源已被请求、授权并被进程占用
  • 由进程节点到资源节点的有向边表明当前进程正在请求该资源,并且该进程已被阻塞,处于等待该资源的状态
    资源分配图
    如下图,进程P1占用资源R2的一个实例并等待资源R1,进程P2占用R1、R2资源并等待R3资源,进程P3占用R3资源。系统是否会死锁呢?
    非死锁
    这种情况下不存在死锁。因为资源是随着时间的推移,必须能获得、使用以及释放的任何东西。P3占用资源R3一段时间后必然会释放R3,一旦R3被释放则P2就能释放R2占用R3,这样P1就能占用R1并释放R2。

如下图,进程P1占用资源R2的一个实例,等待着资源R1;进程P2占用资源R1、R2的一个实例,等待着资源R3;进程P3占用资源R3的一个实例,等待着资源R2。
死锁
这种看下下,进程P1、P2、P3之间存在死锁。而且可以看到存在死锁时图中存在两个环:P1-R1-P2-R3-P3-R2-P1 和 P2-R3-P3-R2-P2。

下图,虽然存在环 R2-P1-R1-P3-R2 ,但是并未死锁。因为一旦P2、P4释放资源。P1就能够获得占用一个R1资源、P2就能够获得占用到R2。这样进程P1和P2就都可以继续向下运行了。
无死锁

出现死锁的必要条件

  1. 互斥:任何时刻只能有一个进程使用一个资源实例
  2. 占用并等待:进程占用至少一个资源,并正在等待获取其他进程占用的资源
  3. 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程使用后自愿释放
  4. 环路等待:死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源

存在死锁时,这四个条件一定是同时满足的。但满足这四个条件不一定存在死锁。

死锁的处理方式

  • 鸵鸟算法:通常大多数操作系统选择忽略死锁
  • 死锁检测并恢复:在检测到运行系统进入死锁状态后,采取行动恢复它们
  • 死锁避免:在使用前进行判断,只允许不会出现死锁的进程请求资源
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值