第5章 死锁的预防、避免和检测

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
转换
F5
P1
F1
P1
P5
F4
P2
F2
P5
P2
P4
F3
P3
P4
P3
资源分配图
哲学家就餐问题
《分布式系统》(五) 08-04
等待图
6
死锁的图形化表示-有向图
资源分配图中
ri
Pj
rk
表示Pj占有资源ri,请求资源rk。 等待图中
Pi Pj
表示Pi请求(等待)Pj占有的资源。
等待图中,若存在有向回路,则存在死锁。
有的资源;
不可剥夺:资源不能被强制夺取; 循环等待: 在占有并等待形成的图中有一个循环
(回路)。
《分布式系统》(五) 08-04
3
资源和进程
资源是进程可以请求的任何对象,资源分:
重用型: 使用后并不消失,可以反复使用,如:
CPU、RAM、I/O等;
消费型:使用后即消失,如:消息、信号等。
一个进程使用资源的过程:(a) 请求-等待; (b) 使用;(c) 释放。
P3 P1 P2 P4 P1 P2 P3 P4
P5
P5
a)
b)
若是AND模型,则2个系统均存在死锁。若是OR模型,则系统a)中 存在回路{P2,P3,P4},但不存在结,故不存在死锁;系统b)中存 在回路和结{P2,P3,P4,P5},故存在死锁。
《分布式系统》(五) 08-04 9
处理死锁的策略
死锁预防的例子
分布式数据库系统
T1 T2
DBMS
A B
《分布式系统》(五) 08-04
事务进程T1和事务进程T2都需要同时更新数据库表 /记录A和B(资 源),因此,在更新之前需要取得 A 和 B 的独占控制权(加锁互 斥): T1/T2: lock A; lock B; transactions; unlock A; unlock B; 若事务T1和事务T2都得到一个锁并等待另一个锁,则发生死锁。
《分布式系统》(五) 08-04
18
伤害-等待方案
方案分析:
高优先级进程可以直接夺取低优先级进程占有的资 源,所以死锁不会发生; 已经取得全部所需资源或已经等待的低优先级进程, 其资源会被高优先级进程请求时剥夺; 进程完成后释放资源,同时激活这些资源关联的等 待队列中的优先级最高的一个进程; 由于保持第一次请求的时戳,所以不会发生饥饿现 象。 低优先级进程也会产生一些不必要的卷回、进行一 些不必要的资源释放,降低了系统性能和并发性。
Petri网状态
1 2 4 6 5
3
7
8 可达图
《分布式系统》(五) 08-04
状态定义:在给定的状态可达 图中,如果状态 s 的一个可达路 径( s 到不可变迁的最终状态的 路径)具有无限的长度,或者 具有一个有限的长度和一个非 死锁的最终状态,那么 s 就是安 全的。如果安全状态 s 的一个子 状态(后续状态)是不安全的, 那么它就是临界的;否则就是 非临界的。如果一个不安全的 状态是死锁的,那么它就是死 锁状态;否则为死锁边界状态。
《分布式系统》(五) 08-04
20
伤害-等待方案分析例
一个包含5个进程的系统(请求同一个资源)
进程标识 P1 P2 P3 P4 P5 优先级 2 1 4 5 3 第一次请求时间 长度(执行临界区时间) 重试间隔 1.0 1 1 1.5 2 1 2.1 2 2 3.3 1 1 4.0 2 3
P1
P2
进程Pi请求的资源正被进程Pj占有时,只有当Pi的优先级 比 Pj 高时(时戳小), Pi 才能等待;否则 Pi 被卷回(死 亡)。即: [ LCi<LCjhalt Pi (wait) □LCiLCjkill Pi (die) ] 返回的进程释放所有占有的资源,同时仍然使用第一次 请求的时戳重新请求资源。
3种处理死锁的策略
预防死锁: 通过限制请求(好的运行机制),保
证4个死锁条件中至少有1个不会发生; 避免死锁: 将资源动态地分配给进程,确保系统 的结果(下一个状态)是安全状态(至少还存在一 个执行序列使整个系统不会死锁); 检测死锁和恢复:允许死锁发生,然后发现并解 除死锁。 过桥的例子。 预防死锁会降低系统效率和并发性(降低资源利用率和 系统吞吐量);避免死锁涉及全局状态检查(分布式系 统不太实际),同时引起昂贵的系统开销;检测死锁和 恢复在死锁频繁的系统中并不有效,同时检测和解除死 锁也有一定的复杂性。
P2
P5
P3
P4
1
1.0 1.5 P1 P2 等待
2
2.1 P3 杀死
3
3.3
4
4.1 4.3
5
5.3 P4 杀死
6
6.1 6.3 P3 P4 杀死
7
7.3 P4 杀死
8
8.3 P4
9
9.3 时间
P4 P5 P3 P4 杀死 杀死 杀死
《分布式系统》(五) 08-04
17
伤害-等待方案
基于剥夺方法; 具体方案:
使用 Petri 网的位置(状态) - 变迁(事件) 模型分析系统的各种状态(及其变迁), 并避免系统进入不安全状态。 Petri网模型中状态分为:
安全状态(非死锁或还可以不进入死锁的状态)
• 非临界状态 • 临界状态
不安全状态(死锁或必然进入死锁的状态)
• 死锁边界状态 • 死锁状态
《分布式系统》(五) 08-04 23
《分布式系统》(五) 08-04 7
死锁模型
有2种死锁类型:
资源死锁(申请资源的过程中产生死锁) 通信死锁 (通信的过程中产生死锁。等待的是消
息资源)
2种死锁通常使用不同的死锁模型:
AND模型:进程取得所有所需的请求资源才能继
续执行;(取得所有请求的互斥资源)
OR模型:进程取得至少一个所需的请求资源就能
《分布式系统》(五) 08-04 16
等待-死亡方案分析例
一个包含5个进程的系统(请求同一个资源)
进程标识 P1 P2 P3 P4 P5 优先级 2 1 4 5 3 第一次请求时间 长度(执行临界区时间) 重试间隔 1.0 1 1 1.5 2 1 2.1 2 2 3.3 1 1 4.0 2 3
P1
《分布式系统》(五) 08-04
14
等待-死亡方案
方案分析:
只有高优先级进程才能等待低优先级进程,所以死 锁不会发生; 已经取得全部所需资源或已经等待的低优先级进程, 其资源不会被高优先级进程请求时剥夺; 进程完成后释放资源,同时激活这些资源关联的等 待队列(根据时戳或请求到达时刻)中的第一个进程; 由于保持第一次请求的时戳,所以不会发生饥饿现 象。 低优先级进程会产生一些不必要的卷回、进行一些 不必要的资源释放 (如:卷回的进程占有的部分资源并不 是高优先级进程所需要的) ,降低了系统性能和并发性。
P1应为Pi
高优先级的进程可以夺取低优先级的资源,让低优先级进 程返回;或 高优先级的进程可以等待请求的资源,低优先级的进程若 处于等待状态,则应放弃等待和已占有的资源(返回);
(会出现饥饿现象,可以通过不断提高返回进程的 优先级来避免) 不考虑打破互斥的情况。
《分布式系统》(五) 08-04 11
《分布式系统》(五) 08-04 19
伤害-等待方案
分析分布式数据库系统例子:
假设T1的时戳是LC1,T2的时戳LC2;且LC1<LC2。 如果T1得到A和B的锁,接着T2请求B,T2将排进B的 等待队列中,直至T1释放B后被激活; 如果T2得到A和B的锁,接着T1请求A,T1将夺取A锁, T2将被卷回; 如果T1得到A锁请求B,T2得到B锁请求A, T1将夺取 B锁,T2将被卷回。
《分布式系统》(五) 08-04
4
死锁的图形化表示-有向图
资源分配图
P1 P2 P1 P2
r1
r2
r1
r2
P3
P3
无死锁 有死锁 资源分配图可以表示一个资源类型有多个实例的情 形。
《分布式系统》(五) 08-04 5
死锁的图形化表示-有向图
等待图
当一个资源类型只有一个实例时,可以用更简单的 等待图表示。
P1
P5
P3
P4
1
1.0 1.5 P1
2
2.1 2.5
3
3.3
4
4.0 4.5 P5 等待
5
6
6.5
7
8
8.5
9
9.Байду номын сангаас 时间
P2 P3 P1 P4 (杀死P1) 等待 等待 等待
注:假设被杀死的进程会重新启动
《分布式系统》(五) 08-04 21
死锁避免
若知道一些全局的、附加的资源如何请求信息, 则可以使用死锁避免法,确保资源动态分配后, 仍然处于安全状态(抑制进入不安全状态的变 迁,避免系统进入导向死锁的路径)。 Dijkstra 的银行家算法是典型的死锁避免算法。
《分布式系统》(五) 08-04 10
死锁预防
限制资源请求,确保死锁的4个条件不发生:
1. 打破占有并等待:所有所需资源同时拥有或放弃; 2. 打破循环等待:给每个资源不同的编号,资源请求 *P95页中: 按一定顺序(由小到大或由大到小)进行,只有占 有顺序前的资源的进程才可以请求顺序后的资源; P5应为P1 3. 打破不可剥夺:赋予进程不同的优先级。
第5章 死锁的预防、避免 和检测
死锁(Deadlock)问题
占有资源的进程双方由于无法访问对方 ( 其它) 进程占有的资源而被无限阻塞,则 产生死锁。
r2 P1 r1 P2
现实生活中的死锁问题
桥 村A 河
《分布式系统》(五) 08-04 2
村B
死锁的条件
死锁的4个充分必要条件:
互斥:同一资源在同一时刻只能独占; 占有并等待: 占有资源同时等待获取其它进程占
例如: 银行余额:800万 顾客A存款:600万 顾客B存款:400万 顾客C存款:500万 A 、 B 、 C 已分别取出了 300 、 200 、 100 ,则以一种如下的取 款顺序:B(200)、C(400)、A(300),银行仍然是安全的。
《分布式系统》(五) 08-04 22
Petri网状态
进程Pi请求的资源正被进程Pj占有时,只有当Pi的优先级 比 Pj 低时(时戳大), Pi 才能等待;否则 Pj 被卷回(伤 害)。即: [ LCi<LCjkill Pj (wound) (剥夺!) □LCiLCjhalt Pi (wait) ] 返回的进程释放所有占有的资源,同时仍然使用第一次 请求的时戳重新请求资源。
继续执行。(收到多个进程的任一个消息)
我们主要讨论资源死锁及其AND模型。
《分布式系统》(五) 08-04 8
死锁条件
AND模型的死锁条件是系统等待图中存在回路。 OR模型的死锁条件是系统等待图中存在结(knot):一个结(K)是 一个节点集,对于K中的每个节点a,a能到达K中的所有节点,并 且只能到达K中的节点。 例:2个系统
《分布式系统》(五) 08-04 15
等待-死亡方案
分析分布式数据库系统例子:
假设T1的时戳是LC1,T2的时戳LC2;且LC1<LC2。 如果T1得到A和B的锁,接着T2请求B,T2将被杀死; 如果T2得到A和B的锁,接着T1请求A,T1将排进A的 等待队列中,直至T2释放A后被激活; 如果T1得到A锁请求B,T2得到B锁请求A: • T1 先于 T2 请求 A 前请求 B , T1 将排入 B 的等待队列 中, T2 在请求 A时死亡,并释放B锁,从而激活B 队列上的T1 ; • T2 先于T1请求B 前请求A,T2 将被杀死, T1请求 B 时将不被阻塞。
25
《分布式系统》(五) 08-04
Petri网状态分析(例)
1 2 4 6 5 6 5 9 死锁状态 1 非临界状态 3 3 2 4 临界状态
死锁边界状态
7
8
7
8
a)可达图
《分布式系统》(五) 08-04
9
a)反可达图
9
24
Petri网状态分析
状态分析算法:
1. 2. 3.
4.
5.
6. 7.
找到所有的死锁状态并把它们标记为死锁状态。 根据可达图创建一个反可达图(将每条边的方向取反)。 在反可达图中找到每个死锁状态的所有子节点,并将它们放 入评价队列。 从评价队列中选择一个节点a,并在可达图中找到始自节点 a 的所有可达路径:如果a的一个可达路径有无限长度或者一个 有限长度且引向一个非死锁的最终状态,就将a标记为临界的; 否则标记为死锁边界状态。 如果节点a是死锁边界状态,则找到a的所有子节点并将它们 放入评价队列(评价队列已有的节点不重复放入)。 如果评价队列非空,则转向步骤4。 * 将剩余的节点标记为非临界的。
12
Rosenkranz预防死锁方案
打破不可剥夺条件的死锁预防方案; 根据请求资源的时戳确定进程的优先级; 包括: 等待-死亡方案(wait-die scheme) 伤害-等待方案(wound-wait scheme) 两个方案是互补的。
《分布式系统》(五) 08-04
13
等待-死亡方案
基于非剥夺方法; 具体方案:
相关文档
最新文档