ch3-2-deadlock
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
归纳起来,可以采用以下策略之一来解决死锁问 题: 忽略该问题 采用破坏4个必要条件来预防死锁 采用有控分配方法(如银行家算法)来避免死锁 当死锁发生时检测死锁,并设法修复
鸵鸟算法The ostrich algorithm
UNIX潜在地受到了一些死锁的威协,但是这些死 锁从来没有发生,甚至从来没有被检测到. 处理死锁的UNIX办法是忽略它,由于大多数用 户宁可在极偶然的情况下产生死锁,也不愿被 限制只能创建一个进程,只能打开一个文件等 等. 象鸵鸟一样对死锁视而不见是最简单的方法. 每个人对该方法的看法都不相同. 数学家认为要彻底防止死锁的产生,不论代价 有多大; 工程师们想要了解死锁发生的频率,系统因各 种原因崩溃的频率,以及死锁的严重程度.
死锁的产生
操作系统的基本特征是并发与共享。
系统允许多个进程并发执行,并且共享系统的软、
硬件资源。 为了最大限度的利用计算机系统的资源,操作系统 应采用动态分配系统各种资源的策略。 采用动态分配策略,当对某类资源的申请数目超过 这类资源的可用数目时,若分配不当,可能出现进 程之间相互等资源又都不能向前推进的情况,即造 成进程相互封锁的危险。
Bridge Crossing Example
Traffic only in one direction. Each section of a bridge can be viewed as a resource. If a deadlock occurs, it can be resolved if one car backs up (preempt resources and rollback). Several cars may have to be backed up if a deadlock occurs. Starvation is possible.
The Deadlock Problem
A set of blocked processes each holding a resource and waiting to acquire a resource held by another process in the set. Example
Require process to request and be allocated all its resources before it begins execution, or allow process to request resources only when the process has none. Low resource utilization; starvation possible.
进程Q1:
P(s1) P(s2) 使用R1和R2 V(s1)
进程Q2:
P(s2) P(s1) 使用R1和R2 V(s2)
V(s2)
V(s1)
操作系统中的例子(进程推进不合法)
Hold and wait 1
2
OS 中的例子 有二个进程 P 、P ,两个设备打印机R ,读卡机R
1
2
。
设S1=1,打印机可用。S2=1,读卡机可用。
Deadlock Characterization
Deadlock can arise if 4 conditions hold simultaneously: Mutual exclusion: only one process at a time can use a resource. Hold and wait: a process holding at least one resource is waiting to acquire additional resources held by other processes. No preemption: a resource can be released only voluntarily by process holding it, after that process completed its task. Circular wait: there exists a set {P0, P1, …, P0} of waiting processes such that P0 is waiting for a resource that is held by P1, P1 is waiting for a resource that is held by P2, …, Pn– 1 is waiting for a resource that is held by Pn, and P0 is waiting for a resource that is held by P0.
问题:那么为什么没有斜 线的推进的进程顺序呢?
t
P2进展
y
路线1
路线2
释放r1 释放r2 申请r1 申请r2
D2
C2
B2 A2
死锁点
0
x
A1 申请r1 B1 C1 D1 释放r2
两进程均占用r2 P1进展
t
申请r2 释放r1
两进程均占用r1
死锁产生的原因
3、同类资源分配不当引起死锁 若系统中有m个资源被n个进程共享,当每个进 程都要求k个资源。而m<n*k时,即资源数小 于进程所需要的总数时,如果分配不得当就可 能引起死锁。 例3,m=5,n=5,k=2,采用的分配策略是为每 个进程轮流分配。
死锁产生的条件
以上前三个条件
互斥条件(mutual exclusion) 占有和等待条件(hold and wait) 不剥夺条件(no preemption)
是死锁存在的必要条件(necessary condition), 但不是充分条件。 也就是说发生了死锁,必然具备互斥、占有和 等待、不剥夺等条件。
CHAPTER 3 DEADLOCK
(死锁)
3.5 Deadlocks
System Model Deadlock Characterization Methods for Handling Deadlocks Deadlock Prevention Deadlock Avoidance Deadlock Detection Recovery from Deadlock Combined Approach to Deadlock Handling
进程P
请求读卡机 请求打印机 释放读卡机 释放打印机
进程Q
请求打印机 请求读卡机 释放读卡机 释放打印机
死锁产生的原因
2、PV操作使用不当产生死锁 例2: R1和R2为可再用资源;进程Q1和Q2共享两个资源R1和 R2。s1和s2分别代表资源R1和R2能否被使用的信号量,由于 R1和R2是共享的,必须使用互斥。因而s1和s2的初值为1。假 定两个进程都要求使用两个资源,它们的程序如下:
Traffic Gridlock/Deadlock
一个进程需要使用独占型资源必须有一定的次序:
申请资源 使用资源 释放资源
1968年Havender在评论OS/360操作系统时说:“原先 多任务的概念是让多个任务不加限制的竞争资源, ……但是随着系统的发展,很多任务被锁在系统中了 。” 1971年Lynch说:“1962年我们设计Exec2系统时并没 有认识到死锁的问题,系统中也没有任何防范措施, 结果现在一些程序中已被锁在系统中了。”
V(S1);
两种写法, 谁可能造 成死锁?
?
等
V(S2);
等
V(S2);
V(S1);
t
P2进展
y
路线1
路线2
释放r1
释放r2 申请r1
D2 C2 B2 A2 t2
0
A 死锁点
申请r2
A1
t1
x
B1 C1 D1 释放r2
P1进展
t
申请r1
申请r2 释放r1
两进程申请占用r1区域
两进程申请占用r2区域
System has 2 tape drives. P1 and P2 each hold 1 tape drive and each needs another one.
Example
semaphores A and B, initialized to 1
P0 wait (A); wait (B); P1 wait(B) wait(A)
而具备互斥、占有和等待、不剥夺等条件却不一定产 生死锁。
死锁产生的条件
第四个条件: 循环等待条件(circular wait) 是前三个条件同时存在时产生的结果,所 以,这些条件并不完全独立。 但单独考虑每个条件是有用的,只要能破 坏这四个必要条件之一,死锁就可防止。
死锁的解决策略
① ② ③ ④
什么是死锁?
死锁的定义: 一组进程中,每个进程都无限等待被该组进程 中另一进程所占有的资源,因而无限期地僵持下 去的局面 ,这种现象称为进程死锁。 这一组进程就称为死锁进程
死锁产生的原因
1、进程推进顺序不当产生死锁。
设系统有打印机、读卡机各一台,它们被进程P和Q共享。 两个进程并发执行,它们按下列次序请求和释放资源:
P1
P(S1); V(S1);
P2
P(S2); V(S2);
申请R1 S1:1-1=0 占用R1 申请R2,但 R2被P2占用
P1
P(S1); P(S2); V(S1);
P2
P(S2); P(S1
申请R2 S2:1-1=0 占用R2
申请R1,但 R1被P1占用 );
P(S2);
V(S2);
P(S1);
产生死锁的起因和条件(总结)
起因:
1)系统资源不足
系统资源数目
< 进程需求
结论与问题:死锁一定是系统资源不足的。那 么系统资源不足是不是一定造成死锁呢(银 行家告诉我们,那不一定!)
2)联合推进路线非法
(进程推进顺序不当)
死锁产生的必要条件
1. 2. 3. 4.
1971年Coffman总结出了对于可再使用资源, 系统产生死锁必定同时保持四个必要条件: 互斥条件(mutual exclusion) 占有和等待条件(hold and wait) 不剥夺条件(no preemption) 循环等待条件(circular wait)
死锁产生的原因
4、进程通讯引起死锁 在进程通讯时使用的信件可以看作是一种临时 性资源,如果对信件的发送和接收不加限制的 话,则可能引起死锁 例4:进程p1等待进程p3的信件s3来到后再向 进程p2发送信件s1;p2又要等待p1信件来到后 再向p3发送信件s2;而p3也要等待p2的信件s2 来到后才能发出信件s3
Deadlock Prevention (2)
No Preemption –
If a process that is holding some resources requests another resource that cannot be immediately allocated to it, then all resources currently being held are released. Preempted resources are added to the list of resources for which the process is waiting. Process will be restarted only when it can regain its old resources, as well as the new ones that it is requesting.
Deadlock Prevention (1)
Restrain the ways request can be made. Mutual Exclusion – not required for sharable resources; must hold for nonsharable resources. Hold and Wait – must guarantee that whenever a process requests a resource, it does not hold any other resources.