读书笔记-现代操作系统-6死锁-6.1资源6.2 死锁概述

6. 死锁

6.1 资源

为了尽可能使关于死锁的讨论通用,我们把这类需要排他性使用的对象成为资源。
资源可以是硬件设备或是一组信息。
资源就是随着时间的推移必须能获得、使用以及释放的任何东西

6.1.1 可抢占资源和不可抢占资源

可抢占资源(preemptable resource)可以从拥有它的进程中抢占而不会产生任何副作用。
比如进程a和b都占用了打印机,进程a占用了打印机,但是在打印机完成之前用完了时间片,轮到进程b时,打印机被占用,这样的情况下,如果将进程a换出内存,则进程b抢断了a。

不可抢占资源(nonpreemptable resource)是指在不引起相关的计算失败的情况下,无法把它从占用它的进程处抢占过来。

若请求的资源不可用,则请求进程被迫等待。
在一些系统中,请求失败时进程会自动被阻塞,在资源可用时唤醒它,
在其他系统中,资源请求失败会返回一个错误代码,请求的进程会等待一段时间,然后重试

当进程请求资源失败时会陷入一个循环:请求资源,休眠,再请求。
这个进程虽然没有被阻塞,但是从各个角度说,它们不能做任何有价值的工作,实际和阻塞状态一直。
本章中我们假设某个进程请求资源失败,那么他就进入休眠状态。

6.1.2 资源获取

一种方式:
为每个资源配置一个信号量。这些信号量都被初始化为1。互斥量当然也可以起到相同的作用。

6.2 死锁概述

  • 死锁:
    如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么该进程是无害的。
    进程的数量以及占有或请求的资源数量和种类都是无关紧要的,而且无论资源是何种类型都会发生这样的结果。这种死锁称为资源死锁。只是常见的类型。

6.2.1 资源死锁的条件

四个必要条件必须全部满足:

  • 互斥条件。每个资源要么已经分配给了一个进程,要么就是可用的
  • 占有和等待条件。已经得到了某个资源的进程可以再请求新的资源。
  • 不可抢占条件。已经分配给一个进程的资源不能强制性的被抢占,它只能被占有他的进程显式的释放
  • 环路等待条件。死锁发生时,系统中一定有由两个或两个以上进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源。

6.2.2 死锁建模

通常来说对进程和资源的资源分配图建模:
用圆形表示进程,方形表示资源。
从资源节点到进程节点的有向边代表该资源已被请求、授权并被进程占用
由进程节点到资源节点的有向边表明当前进程正在请求该资源,并且该资源已被阻塞,处于等待该资源的状态。
如果有向图形成一个环则存在死锁。

处理死锁的四种策略:
1. 忽略该问题。
2. 检测死锁并恢复,让死锁发生,检测它们是否发生,一旦发生死锁,采取行动解决问题
3. 仔细对资源进分配,动态调用避免死锁。
4. 通过破坏引起死锁的四个必要条件之一,防止死锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值