DJ3-5 死锁概述

目录

3.5  死锁概述

3.5.2  计算机系统中的死锁

1. 竞争资源

2. 进程推进顺序不当

3.5.3  死锁的必要条件和处理方法

1. 死锁的必要条件

2. 处理死锁的方法

3.6  预防死锁

3.6.1  摒弃 “请求和保持” 条件

3.6.2  摒弃 “不剥夺” 条件

3.6.3  摒弃 “环路等待” 条件

3.8  死锁的检测与解除

3.8.1  死锁的检测

1. 资源分配图

2. 死锁定理

3. 死锁检测中的数据结构

3.8.2  死锁的解除


3.5  死锁概述

3.5.2  计算机系统中的死锁

死锁(Deadlock)的定义

一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件。

DJ3-5 死锁概述_第1张图片

1. 竞争资源

2. 进程推进顺序不当

DJ3-5 死锁概述_第2张图片

3.5.3  死锁的必要条件和处理方法

1. 死锁的必要条件

DJ3-5 死锁概述_第3张图片

若产生死锁,则一定具备上述四个条件,但具备上述四个条件不一定产生死锁。

  • 可见预防死锁的方法就是:不要同时具备上述四个条件!

1)互斥条件

规定在一段时间内,某资源只能被一个进程占用,其它请求该资源的进程必须等待,直至占有该资源的进程用毕释放。

2)请求和保持条件

进程已占有至少一个资源,又提出了新的资源申请,而该资源已被其它进程占有,此时请求进程被阻塞,但又对自己已占有的资源保持不放。

3)不剥夺条件

进程已占有的资源在使用完前不能被剥夺,只能在进程使用完时由自己释放。

4)循环等待条件

发生死锁时,必存在以下循环链:进程集合 { P0, P1, P2, ... , Pn } 中的 P0 正在等待一个 P1 占有的资源,P1 正在等待一个 P2 占有的资源,...,Pn 正在等待一个 P0 占有的资源。

2. 处理死锁的方法

DJ3-5 死锁概述_第4张图片

从(1)到(4)对死锁的防范程度逐渐减弱,但对应的是资源利用率的提高,以及进程因资源因素而阻塞的频度下降,即并发程度提高。

3.6  预防死锁

预防死锁的方法:使四个必要条件中的第 2、3、4 条件之一不能成立,从而避免发生死锁。

至于必要条件 1,因为它是由设备的固有属性所决定的,不仅不能改变,还应加以保证。

DJ3-5 死锁概述_第5张图片

3.6.1  摒弃 “请求和保持” 条件

系统规定,所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源。这样,该进程在整个运行期间,便不会再提出资源要求。

避免了一部分占着茅坑不拉屎现象

  • 优点:简单、易行且安全。
  • 缺点:(1)资源被严重浪费。(2)使进程经常会发生饥饿现象。

但还是有占着茅坑不拉屎现象

3.6.2  摒弃 “不剥夺” 条件

进程是逐个地提出对资源的申请的,而非一次性提出所有申请。

当一个已经保持了某些资源的进程,提出新的资源请求而不能得到满足时,必须释放它已经保持的所有资源,待以后需要时再重新申请。

这意味着进程已占有的资源会被暂时地释放,或者说是被剥夺了!

该方法缺点很多:

  • (1)实现起来复杂;代价大:前一段工作失效,或前后工作不连续
  • (2)反复的申请和释放延迟周转时间,增加系统开销,降低系统吞吐量

3.6.3  摒弃 “环路等待” 条件

该方法规定:

  1. 对系统所有资源按类型进行线性排序,并赋予不同的序号
  2. 每个进程必须严格按照序号递增的顺序请求资源

这样,在所形成的资源分配图中,不可能再出现环路。

DJ3-5 死锁概述_第6张图片

优点:资源利用率和系统吞吐量得到改善。

缺点:(1)序号必须相对稳定,因此限制了新设备的增加

(2)作业使用各资源的顺序和系统规定的顺序不同,需要不断释放和申请

(3)按次序申请资源的方法限制了用户简单、自主地编程

3.8  死锁的检测与解除

3.8.1  死锁的检测

当系统为进程分配资源时,若未采取任何限制性措施,则系统必须提供检测和解除死锁的手段。

1. 资源分配图

DJ3-5 死锁概述_第7张图片

DJ3-5 死锁概述_第8张图片

用圆圈代表一个进程,用方框代表一类资源。由于一种类型的资源可能有多个,因此用方框中的一个点代表一类资源中的一个资源。此外,请求边是进程指向方框中的点,分配边是方框中的点指向进程。

2. 死锁定理

S 为死锁状态的充分条件是:当且仅当 S 状态的资源分配图是不可完全简化的。该充分条件被称为死锁定理。

DJ3-5 死锁概述_第9张图片

DJ3-5 死锁概述_第10张图片

3. 死锁检测中的数据结构

DJ3-5 死锁概述_第11张图片

3.8.2  死锁的解除

当发现有进程死锁时,常采用的两种方法是解除死锁:

1)剥夺资源。从其它进程中剥夺足够数量的资源给死锁进程,以解除死锁状态。

2)撤消进程。最简单的撤消进程的方法,是使全部死锁进程都夭折掉;或者按照某种顺序逐个地撤消进程,直至有足够的资源可用,使死锁状态消除为止。

你可能感兴趣的:(计算机操作系统,学习,计算机操作系统)