操作系统第七章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
占有且等待(请求和保持条件)
非抢占(非剥夺)条件
循环等待条件
循环等待条件(环路条件):与其它三个条件
有本质的区别:第1项到第3项起决定作用
请求 P1
资源A
被占有
被占有
资源B
请求
P2
6.3 死锁处理方法
预防死锁:通过限制如何申请资源的方
法来确保至少有一个条件不成立。 避免死锁:根据有关进程申请资源和使 用资源的额外信息,确定对于一个申请 ,进程是否应该等待。 检测死锁和恢复:通过算法来检测并恢 复 忽视此问题:认为死锁不可能在系统内 发生。如Unix采用这种方法。
进程A请求资源Request(1,0,1),能够分配?为什么? RequestA(1,0,1)<=Need(2,2,2) RequestA(1,0,1)<=Available(1,1,2) 假定满足进程A的要求,为它分配所申请的资源,并且修改 AllocaitonA 和 NeedA,得到:
如果一个新的进程的资源请求会导致死锁,
则拒绝启动
这个进程 如果满足一个进程新提出的一项资源请求会导致死锁, 则拒绝分配资源给这个进程
6.5.1 系统的安全状态
系统能按某种顺序, 如<P1, P2, …, Pn>, 为每个进程分配所需资源, 直到最大需求, 使每个 进程都可顺序完成, 称系统处于安全状态。(安全 状态一定是没有死锁发生的) 安全序列: 一个进程序列{P1,…,Pn}是安全的, 如果对于每一个进程Pi(1≤i≤n),它以后尚需 要的资源量不超过系统当前剩余资源量与所有进 程Pj (j < i )当前占有资源量之和,系统处于安 全状态。 安全序列可以不唯一! 不安全状态: 系统中不存在安全序列。不安全状 态不一定导致死锁。
6.4 死锁预防
摒弃“环路等待”
方法的问题:
不便于添
此方法要求资源类型序号相对稳定,
加新类型的设备. 易造成资源浪费, 类型序号的安排只能考虑一 般作业的情况, 限制用户简单、自主地编程 限制进程对资源的请求;资源的排序占用系 统开销;
6.5 死锁避免(Deadlock Avoidance)
银行家算法中的数据结构
设系统中有m种不同资源, n个进程
Available向量: 系统中尚未分配的每种资源的总量
Available[j]:
尚未分配的资源j的数量
Max矩阵: 各个进程对每种资源的最大需求量(进程事 先声明)
Max[i,
j](Claim[I,j]): 进程i 对资源j 的最大需
第7章 死锁
死锁的特征 用于预防或者处理死锁的各种方法。
7.1 系统模型
系统拥有一定数量的资源,分布在若干竞争进程
之间。 资源: 物理资源:内存、CPU、I/O设备(打印机和 磁带机等) 逻辑资源:文件、信号量等 资源分成多种类型,每种类型有相同数量的实例 。如果系统中有两个CPU,那么资源类型CPU 就有2个实例。 正常操作模式下,进程按如下顺序使用资源 申请(获得资源或者等待)-使用-释放
R3
2 3 3 4
R1
1 2 1 4
Need R2 0 2 0 2
R3
2 2 3 0
Allocation R1 R2 R3 5 1 2 0 1 0 1 0 1 0 1 2
Work+allocation R1 6 7 9 9 R2 2 2 3 3 R3 3 3 4 6
Finis h
True True True true
适用条件
资源的状态可以很容易地保存和恢复,如CPU寄
存器、内存空间,不能适用于打印机、磁带机
缺点
实现复杂、代价大,
反复申请/释放资源, 系统开销
大, 降低系统吞吐量
6.4 死锁预防
摒弃“环路等待”
系统把所有资源按类型进行线性排队。如输
入机=1,打印机=2,磁带机=3,磁盘机=4; 所有进程对资源的请求必须严格按资源序号 递增的顺序提出, 从而保证任何时刻的资源分 配图不出现环路 即:如果一个进程已经分配了R类型的资源 ,它接下来请求的资源只能是那些排在R类 型之后的资源; 例:A要获得Ri,请求Rj,而B获得Rj,请求 Ri : 这个条件是不可能的,因为当i<j时,资 源R 排在R 前面
求量
Allocation矩阵: 当前资源分配状况
Allocation[i,
j]: 进程i获得的资源j的数量
源自文库
Need矩阵: 每个进程还需要的剩余资源的数量
Need[i,
j]: 进程i尚需的资源j的数量
各数据间的关系
对所有的i , j (i = 1, 2, …, n; j = 1, 2, …, m), 有: Resource[j] = Available[j] + (Allocation[1, j] + Allocation[2, j] + … + Allocation[n, j]) Max[i, j] <= Resource[j] Allocation[i, j] <= Max[i, j] Allocation[i, j] + Need[i, j] =Max[i, j]
可分配到其所需资源; 如果新状态不安全,那么进程Pi 必须等待 Requesti并恢复到原先资源分配状态
银行家算法—举例
假定系统有三个进程P1,P2,P3,共有12台磁带机。进程 P1总共要求10台磁带机,P2和P3分别要求4台和9台。设在 T0时刻进程P1,P2,P3已分别获得5,2,2台,尚有3台空 余未分。
1. 如果Requesti Needi 转到 2. 否则, 产生出错条件,因为进程Pi请求的数量已超 过了其所需的资源数量请求。 2. 如果 Requesti Available,则转到第 3步. 否则 Pi 必须等待,这是因为没有足够的 可用资源.
资源分配算法(2)
3.假定系统可以分配给进程Pi
资源;允许进程在没有资源时才可以申请资源。 优点: 简单、易于实现、安全 缺点: 一个进程可能被阻塞很长时间,等待资源,发生饥饿 资源严重浪费, 进程延迟运行; 如打印机:最后打印
6.4 死锁预防
放弃“非抢占”条件:
可以剥夺一个进
程占有的资源, 分配给其他进程 一个已经保持了某些资源的进程, 当它再提出新的 资源请求而不能立即得到满足时, 必须释放它已经 保持的所有资源, 待以后需要时再重新申请;
安全状态:
关系
只要系统处于安全状态,
必定不会进入死锁状态;死锁状
态是不安全状态
不安全状态不一定是死锁状态(不安全状态可能导致死
锁);
6.5.2 银行家算法(Dijkstra, 1965)
银行家算法的设计思想:当用户申请一
组资源时,系统必须做出判断:如果把 这些资源分出去,系统是否还处于安全 状态。若是,就可以分配这些资源;否 则,暂时不分配。
最大需求 P1 P2 P3 10 4 9 已分配 5 2 2 尚需 5 2 7 3 可用
P2运行, 5台空闲 并释放 可使P2结束 资源 可使P1结束 3台空闲 称 P2,P1,P3 为安全序列
P1运行, 10台空闲 P3 并释放 可使P3结束 资源
银行家算法--例
条件同前例,如果:P3提出申请2台资源,问是否 可以满足要求?
每个进程试图从另一个进程接收消息,然后再给它发送
一条消息。
如果是receive阻塞接收(接收进程被阻塞直到收到消息
),则可能发生死锁。
6.2 死锁的必要条件
互斥条件
指进程对所分配到的资源进行排它性使用, 即在一段时间内某资源 只能由一个进程占有。如果此时还有其它进程申请该资源,则它只能 阻塞, 直至占有该资源的进程释放。 进程已经保持了至少一个资源, 但又提出了新的资源要求, 而该资源 又已被其它进程占有, 此时请求进程阻塞, 但又对已经获得的其它资 源保持不放。 进程已获得的资源, 在未使用完之前, 不能被剥夺, 只能在使用完时 由自己释放。 在发生死锁时, 必然存在一个进程-资源的封闭的环形链. 即进程集合 {P0, P1, P2, …, Pn}中的P0正在等待一个P1占用的资源; P1正在等待 P2占用的资源, ……, Pn正在等待已被P0占用的资源.
不需象死锁预防那样,事先采取限制措施破坏产 生死锁的必要条件; 在资源的动态分配过程中, 采 用某种策略防止系统进入 不安全状态 , 从而避免 发生死锁 定义:在系统运行过程中,对进程发出的每一个 系统能够满足的资源申请进行动态检查,并根据 检查结果决定是否分配资源,若分配后系统可能 发生死锁,则不予分配,否则予以分配
死锁现象举例
可重用资源与可消费资源
可重用资源
一次只能供一个进程安全地使用,
且不会由于
使用而耗尽 例子: CPU、 I/O通道、主存和辅存、 设备、 文件、数据库、信号量等数据结构
可消费资源
可以创建并且可以销毁的资源
数目没有限制,
当一个进程得到一个可消费资 源时, 这个资源就不再存在了 例子: 中断、信号、 消息、 I/O缓冲区中的信 息
6.4 死锁预防 (Deadlock prevention)
通过破坏产生死锁的四个条件中的一个或多个条件,
保
证不会发生死锁现象 保证互斥条件
由设备(非共享资源)的固有特性所决定,不能被破坏,
应加以保证。如打印机。
放弃“占有和等待”
要求所有进程要一次性地申请在整个运行过程需的全部
所请求的资
源,并按如下方式修改状态:
Available
= Available - Requesti;
Allocationi =
Allocationi + Requesti;
Needi = Needi – Requesti;;
4.系统执行安全性算法。查看:
如果所产生的资源分配是安全的,那么进程Pi
安全性算法
1.设Work和Finish 分别是长度为m 和n 的向量,按如 下方式进行初始化:
Work = Available Finish [i] = false for i - 1,3, …, n.
2. 查找这样的i使其满足:
(a) Finish [i] = false (b) Needi Work 如果没有这样的i存在,那么就转到第4步.
解:先假设能够满足要求且分配资源,则系统状态如下:
最大需求 P1 P2 P3 10 4 9 已分配 5 2 4 尚需 5 2 5 1 可用
只剩余 1 台资源,不能使任何一个进程执行结束,因而 不存在安全序列,所以系统不安全,因此拒绝分配资源, 撤消开始的假设。
假设法
例:R1,R2,R3的数量分别为(9,3,6);Available(1,1,2)
死锁的概念
死锁定义:一组进程中,每个进程都无限等待被
该组进程中另一进程所占有的资源,因而永远无 法得到资源,这种现象称为进程死锁,这一组进 程就称为死锁进程。
产生死锁的原因
资源不足导致的资源竞争:多个进程所共享的资源不足
,引起它们对资源的竞争而产生死锁。 并发执行的顺序不当。进程运行过程中,请求和释放资 源的顺序不当,而导致进程死锁. 如P,V操作的顺序不当 死锁 可能涉及同一种类型的资源 可能涉及不同资源类型
两个进程竞争可重用资源死锁的例子
两个进程:一个访问磁盘文件D,一个访问磁带设备T 如果执行序列为:P0、P1、q0、q1、P2、q2,则发生死锁
涉及可消费资源死锁的例子
P1: P2:
… receive(P2); … send(P2, M1); …
… receive(P1); … send(P1, M2); …
3. Work = Work + Allocationi Finish[i] = True 返回到第2步. 4. 如果对所有的i,Finish [i] == True ,那么系统处于 安全状态
一个安全性计算的实例
问:T0时刻是否 为安全状态?
资源分配算法(1)
设Requesti
为进程Pi的请求向量。如果 Requesti [j] = k 那么进程Pi 所需要的资 源类型Rj.的实例数量为k。当进程pi 做出 资源请求时,会采取如下动作:
Allocation R1 A B C D 1 5 2 0 R2 0 1 1 0 R3 0 1 1 2 R1 3 6 3 4 Max R2 2 1 1 2 R3 2 3 4 2 R1 2 1 1 4 Need R2 2 0 0 2 R3 2 2 3 0
T0时刻是否为安全状态? 安全!
R1
B A C D 1 6 7 9 Work R2 1 2 2 3