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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11
4.1.3 产生死锁的条件
所有四个条件必须同时满足才会出现死锁。 四个条件并不完全独立
• 循环等待条件意味着占有并等待条件 • 分开考虑这些条件是有用的(参见后面的 死锁防止)
12
资源分配图
死锁问题可以用称为系统资源分配图的有 向图进行更为精确地描述。
图形方式表示: 进程
1: CPU
5: floppy drive
10: printer
P1: 占有 CPU, 可以申请软驱和打印机 P2: 占有软驱,可以申请打印机但不能申请 CPU
P3: 占有软驱和打印机,要申请 CPU 必须先释放 打印机和软驱
25
4.2.2 死锁避免
预防: Prevention
破坏死锁必要条件之一,保证死锁不发生
系统产生死锁有四个必要条件: 互斥条件(独占): 一个资源一次只能被一个进程所使用 占用并等待条件(部分分配): 一个进程已占有了分给它的资源,但仍然要求其 它资源. 非抢占条件: 一个资源仅能被占有它的进程所释放,而不能被别的进程 强行强占. 循环等待条件: 在一个进程链中,每个进程至少占用一个其他进程所必需 的资源,从而形成一个等待链.
“可重用资源”,“消耗型”资源 “可抢占”资源, “不可抢占”资源 “共享”资源, “独享”资源 资源的共同性质:
一个进程由于请求一个资源而未被满足, 从而该进程被阻塞。
资源的定义
“一个逻辑资源”(简称资源),是指可以引起一个进程进入 等待状态的事物。
6
4.1.1死锁的形成--可重用资源
下面是一个使用可重用资源而发生死锁的例子。两个 进程P1和P2,竞争必须互斥访问的磁盘文件D和磁带机T, 程序重复地执行以下操作:
P1: … 申请文件D 申请磁带机T 使用 P2: … 申请磁带机T 申请文件D 使用
释放文件D
释放磁带机T …
释放文件D
释放磁带机T …
7
4.1.2死锁的形成--消耗型资源
(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
21
4.2.1 死锁预防
2. 破坏“占用并等待”条件(部分分配)
采用资源的静态预分配策略,一次申请所有的资源。 优点:
简单安全,易于实施; 在进程的活动较单一时性能好; 无须抢占。
缺点:
资源利用率低; 启动进程慢,效率低; 有“饥饿”现象存在。
22
4.2.1 死锁预防
3. 破坏“非抢占”条件
方法1:若拥有某种资源的进程,在申请其他资源时遭到 拒绝,则它必须释放其占用的资源,以后再申请。 方法2:当一进程申请的资源正被其他进程占用时,可通 过操作系统抢占该资源,此方法在两个进程优先级相 同时,不能防止死锁。
计算机操作系统
第4章 死锁处理
1
本章知识点
4.1 死锁问题概述 4.2 死锁处理 4.3 哲学家用餐问题
2
内容
•何为死锁? •死锁的必要条件:四条 •死锁的预防:预先静态分配法,有序资源使用法 •死锁的避免:银行家算法 •死锁的检测:资源分配图 •死锁的恢复:强制性撤消进程,挂起和解挂机构
3
死锁的现象
P1
P2
资源
R1

• •
R2
(2 个实例)
有向边 申请边:从进程外部指向资源。 分配边:从资源内部指向进程。
13
资源分配图示例
R1 R2


P1
P2
P3
• •
R3
• • •
R4
14
资源分配图
如果资源分配图出现环(有循环) • 如果每类资源只有一个实例,则定会死锁。 • 如果每类资源有多个实例,则可能会死锁。
下面是使用消耗型资源而发生死锁的例子:
P1 … Receive(P2, M); … Send(P2, N); P2 … Receive(P1, Q); … Send(P1, R);
如果Receive阻塞就会发生死锁。
实际应用中导致死锁的事件的组合很少出现, 有时会在很长的运行之后才出现死锁。
8Baidu Nhomakorabea
图4.1进程推进的顺序
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]
资源的申请与分配逐步进行,比预分配策略的资源利用 率高; 易实现编译期间的检查; 无须执行时间,在系统设计阶段问题就已解决。
缺点:
严格限制资源的顺序性,不允许增加资源请求; 在使用资源的顺序与系统规定不一致时,资源利用率降 低; 不能抢占。
24
死锁预防示例—按序分配破坏循环等待
破坏产生死锁的四个必要条件之一, 死锁的预防:预先静态分配法,有序资源使用法 死锁的避免:银行家算法 或者允许死锁产生,但当死锁发生时能检测出死锁, 并有能力实现恢复。 死锁的检测:资源分配图 死锁的恢复:强制性撤消进程,挂起和解挂机构
18
4.2 死锁处理
系统不发生死锁,必须设法破坏产生死锁的四个必 要条件之一, 或者允许死锁产生,但当死锁发生时能检测出死锁, 并有能力实现恢复。
优点: 对状态容易保留和恢复的资源较为方便。 缺点: 实现困难,恢复现场代价高; 导致过多的不必要抢占; 易导致循环重启。
23
4.2.1 死锁预防
4. 破坏“循环等待 ”条件
采用资源定序方法,将所有资源按类型线性排队,并按 递增规则编号。进程只能以递增方式申请资源,因而 不会导致循环等待。 优点:
31

银行B有10个单位现金,三个顾客共要求20个单位现金:P要8个、 Q要3个、R要9个,经过一段时间后,他们的借款情况如下图 (a)(括号内为该顾客要求数,括号外为顾客已借得的借款数)。
B P Q R
2 4(4) 2(1) 2(7)
(a)
安全状态
B P R 4 4(4) 2(7)
(b)
B 8 R 2(7)
27
4.2.2 死锁避免
2.避免分配资源
避免死锁算法也称作Banker(银行家)算法。
Banker算法的主要思想: 1. 2. 3. 4. 若进程Pi的申请超过了其申报的最大需求数,则报错; 若进程Pi的申请超过了可用资源数,则Pi必须等待; 系统暂时为进程Pi分配其所需要的资源,修改资源分配状 态; 调用安全算法检查系统当前状态,若导致不安全状态, 则推迟这种分配(为什么?) 。
28
4.2.2 死锁避免
优点:
无须抢占; 比死锁预防限制少,允许更多的进程并发执行。
缺点:
必须知道未来的资源请求信息,要预先声明资源的最 大需求量; 进程必须是独立的,其执行顺序不受同步要求的约束; 资源和进程的数目必须固定; 可能导致进程的长时间阻塞。
29
银行家算法
操作系统在若干个进程间,分配数量一定的共享 资源,既要使得每个进程都能满足其对资源的要 求,使之完成其运行,同时又要使整个系统不会 产生死锁。 银行家问题:银行家如何将总数一定的资金,安 全地借给若干个顾客,使这些顾客既能满足对资 金的要求,完成其交易,银行家也能收回自己的 全部资金不至于破产。
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类资 源。
19
4.2.1 死锁预防
破坏死锁的必要条件之一,消除产生死锁的可能性, 严格地防止死锁的出现。 死锁的必要条件: 互斥条件 不可抢占条件 部分分配条件 循环等待条件 防止死锁发生 控制多个进程互斥访问资源 强迫进程暂时释放资源 “预先静态分配法” “有序资源使用法”
对资源限制严格,使资源利用率和进程执行效率大大降低, 是以降低处理速度作为代价的。
20
4.2.1 死锁预防
1. 互斥 破坏第一个条件,使资源可以同时访问而不是互 斥使用,这是个简单的方法,但在进程并发执行 的情况下,往往有许多资源是不能同时访问的(写 操作),所以这种做法不是都可行的。
• 只能对可共享的资源(如只读文件)这样做。 • 不适合非共享资源,例如为写而打开的文件,打印机 等。
限制条件较强,实现简单, 严重损害了系统性能
避免:
Avoidance 不严格限制必要条件,有必要条件也不一定发生。 防止系统进入不安全状态,从而避免死锁的发生
限制条件较弱, 可能获得满意结果
方法:
1.新进程的资源需求不能被满足,避免启动该新进程 2.进程对资源的请求可能导致死锁,避免分配资源给 该进程
26
4.2.2 死锁避免
1.避免启动新进程
执行一个新进程,当且仅当当前所有进程和新进程 的最大资源需求量之和能被系统满足时,才能启动一个新 的进程。 这个方法并不是最优的,因为它考虑的是最坏的情况, 即所有的进程都使用它们最大的资源需求量。
这会导致很多实际上可以运行的进程,被剥夺了运行 的权利 。
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 产生死锁的条件
33
银行家算法的过程
银行家算法的目的:保证资源分配是从一个安全状态转向 另一个安全状态——不死锁! 进程首先提出对资源的最大需求量; 当进程申请资源时,系统测试该进程已占用的资源与本 次申请的资源数之和,是否超过了该进程对资源的最大 需求量; 若超过则拒绝分配资源; 若没有超过,则系统再测试分配后系统所剩的资源,能 否满足该进程尚需的最大资源量; 若能满足则按当前的申请量分配资源; 否则要推迟分配(为什么?) 。
没有环,就不会死锁。
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 死锁处理
4
何为死锁
死锁 是由于进程间,相互竞争系统资源或通信,而引起的一种阻 塞现象。 如果操作系统不采取特别的措施,这种阻塞将永远存在,最 终可能导致整个系统处于瘫痪状态。
因此,死锁问题是操作系统中需要考虑的重要问题。
原因:
(1)系统资源不足; (2)进程推进的顺序不合适.
5
资源的概念
资源的分类:
Work:一个长度为m的工作数组。 Finish:一个长度为n状态标志数组,Finish[i]=true表示进程Pi能获 得足够的资源执行完毕,并能释放全部资源的状态。
35
银行家算法
当进程Pi发出资源请求Request[i,j]后:
1、如果Request[i,j] > C[i,j] - A[i,j], 表示出错;
30
银行家算法
为了保证资金的安全,银行家规定: 当一个顾客对资金的最大需求量,不超过银行 家的总资金时,可以接纳该客户; 顾客可分批借款,但借款的总数不能超过该顾 客对资金的最大需求量; 当银行家现有的资金不能满足顾客尚需的借款 数额时,对顾客的借款可以推迟支付,但总能 使顾客在有限的时间里得到借款; 当顾客得到所需的全部资金后,一定能在有限 的时间里归还所有的资金。
相关文档
最新文档