华南理工大学 操作系统课件第4章死锁处理

合集下载

处理机调度与死锁续精品PPT课件

处理机调度与死锁续精品PPT课件
第四章(续) 死锁
死锁的基本概念 死锁的解决方案
(预防,避免,检测及解除) 资源分配图
死锁的现象
一、死锁的基本概念
1.死锁的定义 一组进程中,每个进程都无限等待被该组 进程中另一进程所占有的资源,因而永 远无法得到的资源,这种现象称为进程 死锁,这一组进程就称为死锁进程
死锁(Deadlock) 饥饿(Starvation)
关于死锁的一些结论
➢ 参与死锁的进程最少是两个 (两个以上进程才会出现死锁)
➢ 参与死锁的进程至少有两个已经占有资源 ➢ 参与死锁的所有进程都在等待资源 ➢ 参与死锁的进程是当前系统中所有进程的子集
注:如果死锁发生,会浪费大量系统资源, 甚至导致系统崩溃
2. 产生死锁的原因
1、争夺资源引起死锁
例1:P1,P2两个进程争夺打印机和读卡机。
(只有这样才是动态申请,动态分配)
4) 循环等待 存在一个进程等待队列
{P1 , P2 , … , Pn}, 其中P1等待P2占有的资源,P2等待P3占 有的资源,…,Pn等待P1占有的资源, 形成一个进程等待环路
二、死锁的解决方案
1. 产生死锁的例子
申请不同类型资源产生死锁
P1: …
申请打印机 申请扫描仪
死锁避免
安全序列: 一个进程序列{P1,…,Pn}是安全的,如 果对于每一个进程Pi(1≤i≤n),它以后 尚需要的资源量不超过系统当前剩余资 源量与所有进程Pj (j < i )当前占有资源 量之和,系统处于安全状态 (安全状态一定是没有死锁发生的)
安全状态与不安全状态
不安全状态:不存在一个安全序列,不安全 状态可能导致死锁
使用 释放打印机 释放扫描仪

P2: …

操作系统2002--死锁

操作系统2002--死锁

死锁的必要条件: 死锁的必要条件:
①互斥:资源是独占的且排它使用(至少有一个资源处 互斥:资源是独占的且排它使用( 于非共享方式); 于非共享方式); ②占用并等待:已获得资源未获释放,又有新的申请请 占用并等待:已获得资源未获释放, 至少存在一个进程, 求(至少存在一个进程,它至少占用一个以上的资源并 等待得到另外的被其它进程占用的资源); 等待得到另外的被其它进程占用的资源); ③非抢占:进程已获得的资源只能由它自己释放,不允 非抢占:进程已获得的资源只能由它自己释放, 许剥夺(资源不可抢占); 许剥夺(资源不可抢占); ④循环等待:在发生死锁时,必然存在一个进程--资 循环等待:在发生死锁时,必然存在一个进程--资 -- 源的环形链, 源的环形链,即前一个进程保持后一个进程所申请的资 存在一组等待进程{P 其中P 源(存在一组等待进程{P0,P1,…,Pn},其中P0要等 , 占用的资源, 等待P 占用的资源, , 等待P 待P1占用的资源,P1等待P2占用的资源,…,Pn等待P0占 用的资源). 用的资源).
例题:一个计算机有8台磁带机,它们由N 例题:一个计算机有8台磁带机,它们由N个 进程竞争使用, 进程竞争使用,每个进程可能需要三台磁带 请问N为多少时,系统没有死锁的危险? 机,请问N为多少时,系统没有死锁的危险?
解答: 或更少时, 解答:当N为3或更少时,系统没有死锁的危 险.
解决死锁的基本方法 破坏四个必要条件之一, A,预防死锁 破坏四个必要条件之一,防止发 生死锁(但可能导致资源利用率降低). 生死锁(但可能导致资源利用率降低). 在资源的动态分配过程中, B,避免死锁 在资源的动态分配过程中,采用 某种方法防止系统进入不安全状态, 某种方法防止系统进入不安全状态,比如银行 家算法. 家算法. 允许死锁发生, C,检测死锁 允许死锁发生,但通过某种检测 机构及时检测出死锁的发生, 机构及时检测出死锁的发生,并精确的确定与 死锁有关的进程和资源, 死锁有关的进程和资源,然后采取适当措施解 除死锁. 除死锁. D,解除死锁 一般采用资源剥夺和资源抢占方 解除死锁需付出代价, 式.解除死锁需付出代价,原则上以代价越小 越好. 越好.

死锁的处理方法

死锁的处理方法

死锁的处理办法
要处理死锁,首先要知道为什么会出现死锁。

一般来说,要出现死锁问题需要满足以下条件:
1. 互斥条件:一个资源每次只能被一个线程使用。

2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

3. 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。

4. 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

只要破坏死锁4 个必要条件之一中的任何一个,死锁问题就能被解决。

死锁解决方案:
死锁是由四个必要条件导致的,所以一般来说,只要破坏这四个必要条件中的一个条件,死锁情况就应该不会发生。

1、如果想要打破互斥条件,我们需要允许进程同时访问某些资源,这种方法受制于实际场景,不太容易实现条件;
2、打破不可抢占条件,这样需要允许进程强行从占有者那里夺取某些资源,或者简单一点理解,占有资源的进程不能再申请占有其他资源,必须释放手上的资源之后才能发起申请,这个其实也很难找到适用场景;
3、进程在运行前申请得到所有的资源,否则该进程不能进入准备执行状态。

这个方法看似有点用处,但是它的缺点是可能导致资源利用率和进程并发性降低;
4、避免出现资源申请环路,即对资源事先分类编号,按号分配。

这种方式可以有效提高资源的利用率和系统吞吐量,但是增加了系统开销,增大了进程对资源的占用时间。

第4章 死锁(第2讲)

第4章 死锁(第2讲)
死锁的检测(★)
检测工具——资源分配图
¾ 资源分配图:是描述进程申请资源和资源分配情况的关系模型
图。表示系统中某个时刻进程对资源的申请和占有情况。
规则: (1)圆(椭圆)表示一个进程; (2)方块表示一个资源类,其中的圆点表示该类型资源中的单
个资源; (3)从资源指向进程的箭头表示资源被分配给了这个进程; (4)从进程指向资源的箭头表示进程申请一个这类资源;
claim(i) < available
claim(i)
available = (2,2,1,2)
+allocation(i) //i表示预分配的进程
allocation(i)
available = (2,5,5,2) claim(i)
Xidian University
Operating System
Xidian University
Operating System2007-11-28 Nhomakorabea-13-
六、死锁的检测和解除
死锁检测举例
有两个资源分配图,图a表示的是永久性资源,图b表示临时性资源,
请分别化简并说明是否会发生死锁。
(a)
Xidian University
Operating System
(b)
available = sum – allocation =(2,2,1,2)
Xidian University
Operating System
假设分配状态
2007-11-28
-3-
五、死锁的避免
和单个进程相关的向量: • sum(i):表示第i个进程资源需求总量; • allocation(i):表示第i个进程已分配资源总量; • claim(i)向量:表示第i个进程还需申请资源数

操作系统 死锁PPT

操作系统 死锁PPT

银行家算法描述
当进程Pi提出资源申请时,系统执行下列步骤: (1) 若Request[i]≤Need[i], 转(2);否则错误返回 (2) 若Request[i]≤Available[i], 转(3);否则进程等待 (3) 假设系统分配了资源,则有: Available=Available-Request[i]; Allocation[i]=Allocation[i]+Request[i]; Need[i]=Need[i]-Request[i] (4) 执行安全性算法,若系统新状态是安全的,则分配 完成,若系统新状态是不安全的,则恢复原状态, 进程等待。
第35/46页
死锁的检测和解除
死锁检测
允许死锁发生,操作系统不断监视系统进展情况, 判断死锁是否发生;一旦死锁发生则采取专门的措施, 解除死锁并以最小的代价恢复操作系统运行
检测时机

当进程等待时检测死锁,其缺点是系统的开销大 定时检测 系统资源利用率下降时检测死锁
第36/46页
进程-资源分配图PRAG
分配矩阵Allocation :n*m矩阵,表示每个进程已 分配的资源数。 int Allocation[n][m]
A P1 P2 P3 P4 2 1 2 1 B 1 2 2 3 C 2 1 2 2
第25/46页
银行家算法的数据结构(4)
需求矩阵Need :n*m矩阵,表示每个进程还需要 各类资源数。 int Need[n][m]
进程在等待一新资源时继续占有已分配的资源。
不剥夺条件(系统规定)
不能强行剥夺进程拥有的资源。
环路等待条件(进程/资源之间的关系)
存在一个进程等待队列{ P1 , P2 , … , Pn }, 其中P1等 待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有 的资源,形成一个进程等待环路。

《操作系统死锁》课件

《操作系统死锁》课件
操作系统死锁
欢迎大家来到本次关于操作系统死锁的PPT课件。今天我们将讨论什么是死锁 以及死锁的产生原因和特征。
什么是死锁
死锁是指两个或多个进程因等待对方释放资源而无法继续执行的情况。
死锁演示
通过一个实际示例来展示死锁的发生情况。
死锁的处理
为了预防和处理死锁,我们将介绍预防、避免、检测和解除这将介绍银行家算法、死锁避免算法以及死锁检测和恢复。
死锁的影响
死锁不仅对计算机性能有影响,还会影响整个计算机系统的稳定性。
结论
我们强调解决死锁的重要性,并指出死锁是操作系统性能瓶颈之一。
参考文献
在本次课件中,我们提供了一些参考书目和链接,供大家进一步学习。

[操作系统][课件][第04章]

[操作系统][课件][第04章]

银行家算法
设:Requesti是进程Pi的请求向量 Requesti是进程P 发出资源请求后 系统按如下步骤进行检查: 资源请求后, 当Pi发出资源请求后,系统按如下步骤进行检查: 如果Requesti 2,否则认为出错 否则认为出错. 如果Requesti ≤Needi 则go to 2,否则认为出错. 如果Requesti 3, 如果Requesti ≤ Available 则go to 3,否则表示无足 够资源, 等待. 够资源, Pi等待. 系统进行试探分配 进行试探分配, 系统进行试探分配,并求该相应数据结构数据 Available: AvailableAvailable:= Available- Requesti Allocationi: Allocationi:= Allocationi+ Requesti Needi: NeediNeedi:= Needi-Requesti 系统执行安全性算法 安全,把资源分配给P 执行安全性算法: 否则, 系统执行安全性算法:安全,把资源分配给Pi,否则, Pi等待. 等待.
P1:申请R1 P1:申请R1 申请R2 申请R2 释放R1 释放R1 释放R2 释放R2 P2:申请R2 P2:申请R2 申请R3 申请R3 释放R2 释放R2 释放R3 释放R3 PN:申请RN PN:申请RN 申请R1 申请R1 释放RN 释放RN 释放R1 释放R1
死锁的产生: 死锁的产生:各进程的执行次序轮转
避免启动新进程的规则
所有进程对资源的最大需求小于系统拥有资 源数, 源数,新进程被启动 即有一新进程P 满足: 即有一新进程Pn+1,满足: n Resource≥∑C Resource≥∑Ck*+C(n+1)*
K=1

第4章 死锁

第4章 死锁

4.1.1 死锁
• 所谓死锁,是指多个进程循环等待它方占有的资源 而无限期地僵持下去的局面。
• 计算机系统产生死锁的根本原因就是资源有限且进 程间推进顺序不当,如图4-1所示。
4.1.2 死锁的起因
• 死锁的起因是并发进程的资源竞争。 • 产生死锁的根本原因在于系统提供的资源个数少于并
发进程所要求的该类资源数。 • 显然,由于资源的有限性,我们不可能为所有要求资
4.2.1 预防死锁的方法
• 死锁的预防是保证系统不进入死锁状态的一种策略。 • 它的基本思想是要求进程申请资源时遵循某种协议,从而
打破产生死锁的四个必要条件中的一个或几个,保证系统 不会进入死锁状态。
4.2.1 预防死锁的方法
1破坏“请求和保持”条件 • 即允许进程同时访问某些资源。 • 但是,有的资源是不允许被同时访问的,像打印机等等,这
• 顶点集合分为两部分:(1)P={P1,P2,…Pn},它由进程集合所有活动 进程组成。R={r1,r2,…rm},它由进程集合所涉及的全部资源类型组成 。边集合分为以下两种:申请边Pi->rj,表示进程Pi申请一个单位的rj资 源,但当前Pi在等待该资源。赋给边rj->pi:表示有一个单位的rj资源已
3 理解死锁的成因

4 理解预防死锁的基本方法
5 掌握死锁避免

6 掌握死锁检测方法
4.1 基本概念 the basic concept
at first, let us to look some pictures.
In operating system,you can find the same case as the above pictures.
4.4.1 系统安全状态

操作系统——死锁的概念以及死锁处理策略

操作系统——死锁的概念以及死锁处理策略

操作系统——死锁的概念以及死锁处理策略⼀、什么是死锁死锁(Deadlock):是指两个或两个以上的进程在执⾏过程中,因争夺资源⽽造成的⼀种互相等待的现象,若⽆外⼒作⽤,它们都将⽆法推进下去。

称此时系统处于死锁状态或系统产⽣了死锁。

称这些永远在互相等待的进程为死锁进程。

所占⽤的资源或者需要它们进⾏某种合作的其它进程就会相继陷⼊死锁,最终可能导致整个系统处于瘫痪状态。

学到这⾥,我们可能会对前⾯提到的⼏个名词感到困惑,死锁,饥饿,死循环⼀样吗?都代表什么意思呢?死锁和饥饿是操作系统导致的问题,⽽死循环则是被管理者的问题,也就是程序员的问题。

针对上⾯银⾏家算法,防⽌死锁发⽣可采取的措施:(1)最多允许4个哲学家同时坐在桌⼦周围。

(2)仅当⼀个哲学家左右两边的筷⼦都可⽤时,才允许他拿筷⼦。

(3)给所有哲学家编号,奇数号的哲学家必须⾸先拿左边的筷⼦,偶数号的哲学家则反之。

这⾥给出⼀个不会发⽣死锁的哲学家进餐过程的算法描述。

semaphore S[5] = {1,1,1,1,1};//5双筷⼦semaphore mutex = 4;//最多允许4个哲学家Pi(){while(1){P(mutex);P(S[i]);拿起左边的叉⼦;P(S[i+1]mod5);拿起右边的叉⼦;吃通⼼粉;放下左边的叉⼦;V(S[i]);放下右边的叉⼦;V(S[i+1]mod5);V(mutex);}}⼆、产⽣死锁的必要条件互斥条件不可剥夺条件占有并请求条件循环等待条件三、产⽣死锁的原因主要原因有两个:竞争临界资源和进程推进顺序不当。

总之就是对不可剥夺资源的不合理分配,可能导致死锁。

⼀个⼩问题:⼀个OS有20个进程,竞争使⽤65个同类资源,申请⽅式是逐个进⾏的,⼀旦某个进程获得它所需要的全部资源,则⽴即归还所有资源。

每个进程最多使⽤三个资源。

若仅考虑这类资源,该系统有⽆可能产⽣死锁,为什么?答:不可能。

因为死锁产⽣的原因有两点:系统资源不⾜或推进顺序不当,在本题中,进程所需的最⼤资源数为60,⽽系统共有该类资源65个,其资源数已⾜够系统内各进程使⽤。

第04章死锁及其对策

第04章死锁及其对策
(5)进程向量L:是一个集合,所有已运行结束的进程都 送入L中,若最后L中包括了所有的N个进程,则说明系统处于 安全状态。
第四章 死锁及其对策
今天日期:2019/9/2
第 18 页
4.4.3 死锁检测算法
1、在某个时刻T,j从1到M执行Work(j)=Av(j)。
2、检查Al矩阵和Re矩阵,是否存在某个i( i从1到M)使Al矩阵第i行中所 有的Al(i,j)和Re矩阵第i行中所有的Re(i,j)均为零。若存在这个i说明在资源 分配图中Pi进程已成为孤立结点,将Pi进程送入进程向量L中。
A A ( 1 )A ,( 2 ).,. A ( . m ) ,
(4)工作向量Work:是一个长度为M的一维数组,动态的 反映系统中可让进程运行的各类资源的数目。
W W o ( 1 ) r W o ,k ( r 2 ). o k . W . r( ,m k ) ork
1、死锁状态的推断思想 封锁进程:是指某个进程由于请求了超过系统中现有 的未分配资源数目的资源,而被系统封锁的进程。 非封锁进程:没有被系统封锁的进程
第四章 死锁及其对策
今天日期:2019/9/2
第 13 页
2、资源分配图的化简
假设某个资源分配图中存在一个进程Pi,此刻 Pi 是非封
锁进程,那么可对此资源分配图作以下化简:当 Pi 有请求边
都是一个N×M的二维数组:
Rm
Pn
(1) 请求矩阵Re:是一个N×M的二维数 组,每行代表一个进程当前对各类资源的请求 数目。若Re( i,j)=k,则代表第 i个进程Pi请求了 Rj类资源k个分配单位。
Re(1,1) Re(1,2) ... Re(1,m)
Re(2,1) Re(2,2) ... Re(2,m)

死锁PPT课件

死锁PPT课件
▪ 当某个进程提出资源请求后,若干进程因竞 争资源而在无外力P的作用下,永远不能向 前推进的状态。
▪ 例如,n个进程P1、P2,…,Pn,Pi因为申 请 不 到 资 源 Rj 而 处 于 等 待 状 态 , 而 Rj 又 被 Pi+1占有,Pn欲申请的资源被P1占有,此时 这n个进程的等待状态永远不能结束,则说 这n个进程处于死锁状态。
实例说明系统所处的和A、 B、C三类资源;
▪ A类资源共有10个,B类资源共有 5个,C类资源共有7个。
3.6 死锁
3.6.1 死锁产生 3.6.2 死锁防止 3.6.3 死锁避免 3.6.4 死锁检测和解除
3.6.1 死锁产生
若干死锁的例子(1)
例1进程推进顺序不当产生死锁
设系统有打印机、读卡机各一台,被
进程P和Q共享。两个进程并发执行,
按下列次序请求和释放资源:
进程P
进程Q
请求读卡机 请求打印机
• Aki ≤Cki 对i=1,..,m,k=1,..,n; 表示进程申 请任何类资源数不能超过声明的最大资源需求 数
一种死锁避免策略
系统中若要启动一个新进程工作,其对资 源Ri的需求仅当满足下列不等式:
Ri ≥ C(n+1)i+ ∑Cki 对i=1,..,m,k=1,..,n; 即应满足当前系统中所有进程对资源Ri 的最大资源需求数加上启动的新进程的 最大资源需求数不超过系统拥有的最大 数。
▪ 最大需求矩阵--每个进程对每类资源的最大需 求量,Cij表示进程Pi需Rj类资源最大数
C11 C12

C1m
C21 C22

C2m
Claim =
Cn1 Cn1

Cnm

死锁处理

死锁处理
的重要问题。
2
4.1.1 可重用资源
下面是一个使用可重用资源而发生死锁的例子。两个 进程程 序P重1和复P地2竞执争行必以须下互操斥作访:问的磁盘文件D和磁带机T,
P1 repeat
… Request(D);
… Request(T);
… Release(T);
… Release(D);
… forever
8
4.2.1 死锁预防
2. 破坏“占用并等待”条件 采用资源的静态预分配策略,一次申请所有的资
源。 优点: 简单安全,易于实施; 在进程的活动较单一时性能好; 无须抢占。 缺点: 资源利用率低; 启动进程慢,效率低; 有“饥饿”现象存在。
9
4.2.1 死锁预防
3. 破坏“非抢占”条件
13
4.2.2 死锁避免
2.避免分配资源
避免分配资源也称作Banker(银行家)算法。
Banker算法的主要思想:
1. 若报错进;程Pi的申请超过了其申报的最大需求数,则
2.
若进 待;
程Pi

申请超
过了可用
资源数
,则
Pi必须

3. 系源分统配暂状时态为;进程Pi分配其所需要的资源,修改资
4. 调用安全算法检查系统当前状态,若导致不安全
10
4.2.1 死锁预防
4. 破坏“循环等待 ”条件 采用资源定序方法,将所有资源按类型线性排队,并按
递增规则编号。进程只能以递增方式申请资源,因而不 会导致循环等待。 优点: 资源的申请与分配逐步进行,比预分配策略的资源利用 率高; 易实现编译期间的检查; 无须执行时间,在系统设计阶段问题就已解决。 缺点: 严格限制资源的顺序性,不允许增加资源请求; 在使用资源的顺序与系统规定不一致时,资源利用率降 低; 不能抢占。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机操作系统
第4章 死锁处理
1
本章知识点
4.1 死锁问题概述 4.2 死锁处理 4.3 哲学家用餐问题
2
内容
•何为死锁? •死锁的必要条件:四条 •死锁的预防:预先静态分配法,有序资源使用法 •死锁的避免:银行家算法 •死锁的检测:资源分配图 •死锁的恢复:强制性撤消进程,挂起和解挂机构
3
死锁的现象
19
4.2.1 死锁预防
破坏死锁的必要条件之一,消除产生死锁的可能性, 严格地防止死锁的出现。 死锁的必要条件: 互斥条件 不可抢占条件 部分分配条件 循环等待条件 防止死锁发生 控制多个进程互斥访问资源 强迫进程暂时释放资源 “预先静态分配法” “有序资源使用法”
对资源限制严格,使资源利用率和进程执行效率大大降低, 是以降低处理速度作为代价的。
没有环,就不会死锁。
15
资源分配图示例
R1 R3


P1
P2
P3
• •
R2
P2 R3 P3 R2 P2
cycle, deadlock
16
资源分配图示例
R1
• •
P2
P1
P3
P 1 R 1 P 3 R 2 P 1
cycle, no deadlock • •
P4
17
4.2 死锁处理
破坏产生死锁的四个必要条件之一, 死锁的预防:预先静态分配法,有序资源使用法 死锁的避免:银行家算法 或者允许死锁产生,但当死锁发生时能检测出死锁, 并有能力实现恢复。 死锁的检测:资源分配图 死锁的恢复:强制性撤消进程,挂起和解挂机构
18
4.2 死锁处理
系统不发生死锁,必须设法破坏产生死锁的四个必 要条件之一, 或者允许死锁产生,但当死锁发生时能检测出死锁, 并有能力实现恢复。
P1
P2
资源
R1

• •
R2
(2 个实例)
有向边Байду номын сангаас申请边:从进程外部指向资源。 分配边:从资源内部指向进程。
13
资源分配图示例
R1 R2


P1
P2
P3
• •
R3
• • •
R4
14
资源分配图
如果资源分配图出现环(有循环) • 如果每类资源只有一个实例,则定会死锁。 • 如果每类资源有多个实例,则可能会死锁。
20
4.2.1 死锁预防
1. 互斥 破坏第一个条件,使资源可以同时访问而不是互 斥使用,这是个简单的方法,但在进程并发执行 的情况下,往往有许多资源是不能同时访问的(写 操作),所以这种做法不是都可行的。
• 只能对可共享的资源(如只读文件)这样做。 • 不适合非共享资源,例如为写而打开的文件,打印机 等。
(c)
B
10
(d)
B 1 P 4(4) Q 2(1) R 3(6)
(e)
不安全状态
B 3 P 4(4) R 3(6)
(f)
32
课堂练习:
用银行家算法判断下述每个状态是否安全。如果一个状态是安全 的,说明所有进程是如何能够运行完毕的。如果一个状态是不安 全的,说明为什么可能出现死锁。 状态A 状态B ————————————— ————————————— 占有台数 最大需求 占有台数 最大需求 ————————————— ————————————— 用户1 2 6 用户1 4 8 用户2 4 7 用户2 3 9 用户3 5 6 用户3 5 8 用户4 0 2 可供分配的台数 2 可供分配的台数 1
26
4.2.2 死锁避免
1.避免启动新进程
执行一个新进程,当且仅当当前所有进程和新进程 的最大资源需求量之和能被系统满足时,才能启动一个新 的进程。 这个方法并不是最优的,因为它考虑的是最坏的情况, 即所有的进程都使用它们最大的资源需求量。
这会导致很多实际上可以运行的进程,被剥夺了运行 的权利 。
11
4.1.3 产生死锁的条件
所有四个条件必须同时满足才会出现死锁。 四个条件并不完全独立
• 循环等待条件意味着占有并等待条件 • 分开考虑这些条件是有用的(参见后面的 死锁防止)
12
资源分配图
死锁问题可以用称为系统资源分配图的有 向图进行更为精确地描述。
图形方式表示: 进程
Q进程
释放A
A申请
释放B
P和 Q 申请 A P和 Q 申请 B
获得A
B申请
获得B
获得A
释放A
获得B
释放B
P进程
9
A申请
B申请
图4.1进程推进的顺序
Q进程
.
释放A
P和 Q 申请 A
A申请
释放B 获得A
死锁 不可避免
P和 Q 申请 B
B申请
获得B
获得A
获得B
释放A
释放B
P进程
A申请
B申请
10
4.1.3 产生死锁的条件
优点: 对状态容易保留和恢复的资源较为方便。 缺点: 实现困难,恢复现场代价高; 导致过多的不必要抢占; 易导致循环重启。
23
4.2.1 死锁预防
4. 破坏“循环等待 ”条件
采用资源定序方法,将所有资源按类型线性排队,并按 递增规则编号。进程只能以递增方式申请资源,因而 不会导致循环等待。 优点:
Work:一个长度为m的工作数组。 Finish:一个长度为n状态标志数组,Finish[i]=true表示进程Pi能获 得足够的资源执行完毕,并能释放全部资源的状态。
35
银行家算法
当进程Pi发出资源请求Request[i,j]后:
1、如果Request[i,j] > C[i,j] - A[i,j], 表示出错;
资源的申请与分配逐步进行,比预分配策略的资源利用 率高; 易实现编译期间的检查; 无须执行时间,在系统设计阶段问题就已解决。
缺点:
严格限制资源的顺序性,不允许增加资源请求; 在使用资源的顺序与系统规定不一致时,资源利用率降 低; 不能抢占。
24
死锁预防示例—按序分配破坏循环等待
4
何为死锁
死锁 是由于进程间,相互竞争系统资源或通信,而引起的一种阻 塞现象。 如果操作系统不采取特别的措施,这种阻塞将永远存在,最 终可能导致整个系统处于瘫痪状态。
因此,死锁问题是操作系统中需要考虑的重要问题。
原因:
(1)系统资源不足; (2)进程推进的顺序不合适.
5
资源的概念
资源的分类:
下面是使用消耗型资源而发生死锁的例子:
P1 … Receive(P2, M); … Send(P2, N); P2 … Receive(P1, Q); … Send(P1, R);
如果Receive阻塞就会发生死锁。
实际应用中导致死锁的事件的组合很少出现, 有时会在很长的运行之后才出现死锁。
8
图4.1进程推进的顺序
34
多资源的银行家算法
现假定系统中有n个进程,m类资源
数据结构
Resource:系统拥有的资源数。 Available:系统当前可用的资源数,Av [j]=k,表明系统现 有k个Rj类资源。 Claim:一个n×m矩阵,每个进程对每类资源需求的最 大数,如果C[i,j] = k,表示进程Pi需要申请k个Rj类资源。 Allocation:一个n×m矩阵,当前分配给每个进程每类 资源的数目,A[i,j]=k,表示进程Pi当前已分得k个Rj类资 源。
21
4.2.1 死锁预防
2. 破坏“占用并等待”条件(部分分配)
采用资源的静态预分配策略,一次申请所有的资源。 优点:
简单安全,易于实施; 在进程的活动较单一时性能好; 无须抢占。
缺点:
资源利用率低; 启动进程慢,效率低; 有“饥饿”现象存在。
22
4.2.1 死锁预防
3. 破坏“非抢占”条件
方法1:若拥有某种资源的进程,在申请其他资源时遭到 拒绝,则它必须释放其占用的资源,以后再申请。 方法2:当一进程申请的资源正被其他进程占用时,可通 过操作系统抢占该资源,此方法在两个进程优先级相 同时,不能防止死锁。
1: CPU
5: floppy drive
10: printer
P1: 占有 CPU, 可以申请软驱和打印机 P2: 占有软驱,可以申请打印机但不能申请 CPU
P3: 占有软驱和打印机,要申请 CPU 必须先释放 打印机和软驱
25
4.2.2 死锁避免
预防: Prevention
破坏死锁必要条件之一,保证死锁不发生
2、如果Request[i,j] > Av[j] ,进程Pi等待; 3、否则,系统进行试探分配,并修改系统状态:
Av[j] := Av[j] - Request[i,j]
A[i,j]:= A[i,j] + Request[i,j] 4、系统调用安全性算法,判断试探性分配后的状态,是否安全状 态,若是,把资源j分配给Pi,否则,恢复原状态,Pi等待。 Av[j] := Av[j] + Request[i,j] A[i,j] := A[i,j] - Request[i,j]
27
4.2.2 死锁避免
2.避免分配资源
避免死锁算法也称作Banker(银行家)算法。
Banker算法的主要思想: 1. 2. 3. 4. 若进程Pi的申请超过了其申报的最大需求数,则报错; 若进程Pi的申请超过了可用资源数,则Pi必须等待; 系统暂时为进程Pi分配其所需要的资源,修改资源分配状 态; 调用安全算法检查系统当前状态,若导致不安全状态, 则推迟这种分配(为什么?) 。
“可重用资源”,“消耗型”资源 “可抢占”资源, “不可抢占”资源 “共享”资源, “独享”资源 资源的共同性质:
相关文档
最新文档