操作系统-死锁笔记

操作系统都具有授权一个进程(临时)排他地访问一种资源的能力。
在很多应用中,需要一个进程排他性地访问若干种资源而不是一种。
两个进程都被阻塞,并且一直处于这样的状态。这种状况就是死锁(deadlock)

1.资源

我们把这类需要排他性使用的对象称为资源。简单来说,资源就是随着时间的推移,必须能获得、使用以及释放的任何东西。

1.可抢占资源和不可抢占资源

可抢占资源(preemptable resource) 可以从拥有它的进程中抢占而不会产生任何副作用,存储器就是一类可抢占的资源
不可抢占资源: 在不引起相关的计算失败的情况下,无法把它从占有它的进程处抢占过来。
使用一个资源所需要的事件顺序

  1. 请求资源
  2. 使用资源
  3. 释放资源

2.资源获取

一种允许用户管理资源的可能方法是为每一个资源配置一个信号量。这些信号量都被初始化为1.互斥信号量也能启动相同的作用。

操作系统-死锁笔记_第1张图片

2.死锁简介

死锁的定义: 如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程就是死锁的。

2.1 资源死锁的条件

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

2.2死锁建模

用圆形表示进程,用方形表示资源。
操作系统-死锁笔记_第2张图片

四种处理死锁的策略

  1. 忽略该问题。也许如果你忽略它,它也会忽略你。
  2. 检测死锁并恢复。让死锁发生,检测它们是否发生,一旦发生死锁,采取行动解决问题。
  3. 仔细对资源就行分配,动态避免死锁。
  4. 通过破坏一起死锁的四个必要条件之一,防止死锁的产生。

3.鸵鸟算法

假装根本没有问题发生。

4.死锁检测和死锁恢复

1.每种类型一个资源的死锁检测

每种资源类型只有一个资源。
操作系统-死锁笔记_第3张图片
这种算法对有向图进行检测,并在发现图中有环路存在或确定五环路时结束。

2.多种类型多个资源的死锁检测

操作系统-死锁笔记_第4张图片
操作系统-死锁笔记_第5张图片
将所有已分配的资源j的数量加起来再和所有可供使用的资源数相加。
操作系统-死锁笔记_第6张图片

3.从死锁中恢复

1.利用抢占恢复
在不通知原进程的情况下,将某一资源从一个进程强行取走给另一个进程使用,接着又送回,这种做法是否可行主要取决于改资源本身的特性。
2.利用回滚恢复
将占有资源的进程复位到一个更早的状态,那时它还没有取得所需的资源,接着就把这个资源分配给一个死锁进程。
3.通过杀死进程恢复

5.死锁避免

5.1 资源轨迹图

操作系统-死锁笔记_第7张图片

5.2 安全状态和不安全状态

操作系统-死锁笔记_第8张图片
从安全状态出发,系统能够保证所有进程都能完成,而从不安全状态出发,就没有这样的保证。

5.4 单个资源的银行家算法

操作系统-死锁笔记_第9张图片
银行家算法就是对每一个请求进行检查,检查如果满足这一请求是否会达到安全状态。若是,那么久满足该请求;否则,就推迟对这一请求的满足。

5.4多个资源的银行家算法

操作系统-死锁笔记_第10张图片

6死锁预防

6.1 破坏互斥条件

如果资源不被一个进程所独占,那么锁死肯定不会产生。

6.2 破坏占有并等待条件

禁止已持有资源的进程在等待其他资源便可以消除死锁。
一次获取所有资源。
当一个进程请求资源时,先暂时释放器当前占用的所有资源,然后在尝试一次获得所需的全部资源。

6.3 破坏不可抢占条件

抢占资源

6.4 破坏环路等待条件

1.将资源统一编号,不允许进程请求比当前所占有资源编号低的资源。
操作系统-死锁笔记_第11张图片
操作系统-死锁笔记_第12张图片

7.其他问题

7.1 两阶段加锁

第一阶段: 进程试图对所有所需的记录加锁,一次锁一个记录。
第二阶段: 如果第一阶段加锁成功,就开始第二阶段,完成更新然后释放锁。

7.2 通信死锁

在一系列进程中,每个进程因为等待另一个进程引发的事件而产生阻塞,这就是一种死锁。相比于更加常见的资源死锁,我们把上面这种情况叫作通信死锁

7.3 活锁

操作系统-死锁笔记_第13张图片
两个进程,尝试获取两个资源,若获取不成功,就释放原来的资源,有可能导致两个进程都获取不到自己想要的资源。

7.4 饥饿

进程准备就绪,但是资源一直不分配给它,饥饿而死。

你可能感兴趣的:(线程池,死锁,操作系统)