第六章并发、死锁和饥饿浙江工业大学解析
死锁与饥饿
P2 ... Request(B) Request(A) Request(A) Request(B)
假如双方都拥有部分资源(P1 拥有 A,P2 拥有 B,且 A,B 均只有一个), 但这时 P1 还需要 B,P2 还需要 A,于是 P1 与 P2 都会处在无限等待状态,发生 了死锁。
由这个例子,我们可以归纳分析出产生死锁的必要条件: (1) 互斥条件
饥饿没有其产生的必要条件,随机性很强。并且饥饿可以被消除,因此也将 忙式等待时发生的饥饿称为活锁。
由于饥饿和饿死与资源分配策略有关,因而解决饥饿与饿死问题可从资源分 配策略的公平性考虑,确保所有进程不被忽视。如时间片轮转算法(RR)。它将 CPU 的处理时间分成一个个时间片,就绪队列中的诸进程轮流运行一个时间片, 当时间片结束时,就强迫运行程序让出 CPU,该进程进入就绪队列,等待下一次 调度。同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片, 以投入运行。如此方式轮流调度。这样就可以在不考虑其他系统开销的情况下解 决饥饿的问题。
死锁与饥饿(I)
死锁的原理:
相互竞争系统资源或者进行通信的进程永久阻塞 当一组进程中的每个进程都在等待这个事件,而只有在这组进程中的其他被阻塞的进程才可 以触发这个事件
可重用资源: 资源分为两类:可重用的和可消耗的
可重用资源:一次只能供一个进程安全的使用,并且不会由于使用而耗尽的资源
可消耗资源: 可消耗资源是指可以被创建和销毁的资源 当消费进程得到一个资源时,该资源就不再存在了
不可抢占: 1. 占用某些资源的一个进程进行进一步资源请求被拒绝,则该进程必须释放它占用 的资源 2. 一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另一个资 源
循环ቤተ መጻሕፍቲ ባይዱ待:
死锁的概念思维导图分享
死锁的概念什么是死锁?各进程互相等待对方手里的资源, 导致各进程都阻塞, 无法向前推进
死锁、饥饿、死循环的区别
死锁至少是两个进程一起死锁, 死锁进程处于阻塞态
饥饿可以只有一个进程饥饿, 饥饿进程可能阻塞也可能就绪
死循环可能只有一个进程发生死循环, 死循环的进程可以上处理机
死锁和饥饿时操作系统要解决的问题, 死循环是应用程序员要解决的死锁产生的必要条件
互斥条件对必须互斥使用的资源的争抢才会导致死锁
不剥夺条件进程保持的资源只能主动释放, 不可强行剥夺
请求和保持条件保持着某些资源不放的同时, 请求别的资源
循环等待条件
存在一种进程资源的循环等待链
循环等待未必死锁, 死锁一定需要循环等待
什么时候会发生死锁?对不可剥夺资源的不合理分配, 可能导致死锁
死锁的处理策略
预防死锁破坏死锁产生的四个必要条件
避免死锁避免系统进入不安全状态(银行家算法)
死锁的检测和解除允许死锁发生, 系统负责检测出死锁并解除。
死锁和饥饿
银行家算法—引例
银行开始有10万可借资金
(b)是安全的,因为在有2万元资金可用的情况下,银行家可 以延迟除Marvin之外的所有请求,这样便可以使Marvin运行 结束,然后释放其所有的4万元资金。如此这样下去便可以 满足Suzanne或者Barbara的请求,等等。
利用银行家算法避免死锁
1、银行家算法中的数据结构 资源总量向量Resource,m维,表示m种资源 的总量。 可用资源向量Available,m维,表示未分配的 各种可用资源数量。 需求矩阵Claim,n*m矩阵,表示n个进程对m 类资源的最大需求。 分配矩阵Allocation ,n*m矩阵,表示n个进程 已分配的各种资源数。
教学重点:死锁产生的条件,银行家算法、哲学 家进餐问题
教学难点:银行家算法、哲学家进餐问题
死锁举例:例1
两个小孩在一起玩耍,一个在玩皮球, 另一个玩自动步枪,如果这两个小孩都要对 方手中的玩具,而又不肯先放掉自己拿着的 玩具,这时就发生了僵持局面。
例2:
设系统有一台打印机和一台扫描仪,进程 P1 、 P2 并发执行,在某时刻 T ,进程 P1 和 P2 分 别 占 用 了 打 印 机 和 扫 描 仪 。 在 时 刻 T1 (T1>T),P1又要申请扫描仪,但由于扫描 仪 被 P2 占 用 , P1 只 有 等 待 。 在 时 刻 T2 (T2>T),P2又申请打印机,但由于打印机 被 P1 占用, P2 只有等待。如此两进程均不能 执行完成。称这种现象为死锁。
第六章 并发性: 死锁和饥饿
本章主要内容
死锁举例 死锁基本原理 死锁预防 死锁避免 死锁检测 哲学家就餐问题 Unix并发机制 Windows7并发机制
操作系统课件 第6章 死锁
死锁检测算法
⑤ 随机选取一条没有标记的从该节点出发 的弧(有向边),标记它。然后顺着这根 弧找到新的当前节点,返回到第3步。 ⑥ 移走该节点,返回到前一个节点。返回 第4步。
6.3.1 每种类型一个资源的死锁检测
问题的提出
是否资源分配图中存在环就一定有 死锁?
有环有死锁
有环无死锁
死锁定理
进程推进顺序不合理
进程在运行过程中具有异步性特征,如果它们 之间的请求和释放资源的顺序不当,也同样会导 致进程产生死锁。
(1) 竞争资源产生的死锁:
进程
P1
资源
R1
R2
资源
P2
进程
(2) 进程推进顺序不合理产生的死锁:
例:生产者—消费者问题中,若PV操作使用不 当,把生产者进程两个P操作次序互换,先执行 P(mutex),后执行P(empty),则可能会引起死锁。
经分析,在T0时刻,系统是安全的。因为存在 一个安全序列p2、p1、p3。见下图。
进程 最大需求 已分配 还需 可用
p1 p2
p3
10 4
9
5 2
2
5 2
7
3
由安全状态向不安全状态的转换
如果在T0 状态不按安全序列进行分配, 可能会导致系统进入一个不安全状态。
例如在T0状态下P3中申请1台磁带机。 如系统实施此次分配使系统状态由T0变为 T1状态,分析T1状态安全情况。
6.4.1 安全状态和不安全状态
• 安全状态:如果存在一个由系统中所有 进程构成的安全序列{P1,…Pn},则系 统处于安全状态。 • 不安全状态: 不存在一个安全序列,则 系统处于不安全状态。
6.4.1 安全状态和不安全状态
操作系统第6章_并发死锁和饥饿
Windows2000/XP 基于文件映射的共享存储区
• 相当于内存,可以任意读写和使用任意数
据结构(当然,对指针要注意),需要进 程互斥和同步的辅助来确保数据一致性 • 采用文件映射机制:可以将整个文件映射 为进程虚拟地址空间的一部分来加以访问。
• CreateFileMapping为指定文件创建一个文件映射对象,返
• 不可剥夺条件
进程已获得的资源在未使用完之前不能被剥夺, 只能在使用完时由自己释放
• 环路等待条件
资源分配图中存在环路
死锁的现象
• 1 互斥条件:每条道路只能通过一个方向车 • 2 保持并请求(部分分配):占用一段道路并等 • •
待前方道路的释放 3 不剥夺:单行线不能超越抢道 4 环路条件:如图
Windows2000/XP的信号
CTRL_C_EVENT CTRL_BREAK_EVENT A CTRL+C signal was received . A CTRL+BREAK signal was received .
CTRL_CLOSE_EVENT
CTRL_LOGOFF_EVENT
A signal that the system sends to all processes attached to a console when the user closes the console .
死锁的起因
• 死锁的起因是并发进程的资源竞争。产生
死锁的根本原因在于系统提供的资源个数 少于并发进程所要求的该类资源数。可以 采用适当的资源分配算法,以达到消除死 锁的目的。为此,先看看产生死锁的条件。
产生死锁同时满足下列四个条件:
• 互斥条件 • 占有且等待条件 • 非抢占(不可剥夺条件) • 循环等待条件
Java并发中死锁、活锁和饥饿是什么意思
Java并发中死锁、活锁和饥饿是什么意思解答死锁是指两个或者两个以上的进程(或线程)在执⾏过程中,因争夺资源⽽造成的⼀种互相等待的现象,若⽆外⼒作⽤,他们将⽆法推进下去。
如果线程的智⼒不够, 且都秉承着“谦让”的原则,主动将资源释放给他⼈使⽤,那么就会导致资源不断地在两个线程间跳动,⽽没有⼀个线程可以同时拿到所有资源正常执⾏。
这种情况就是活锁。
饥饿是指某⼀个或者多个线程因为种种原因⽆法获得所需要的资源,导致⼀直⽆法执⾏。
⽐如它的线程优先级可能太低,⽽⾼优先级的线程不断抢占它需要的资源,导致低优先级线程⽆法⼯作。
补充死锁是指两个或两个以上的进程(或线程)在执⾏过程中,因争夺资源⽽造成的⼀种互相等待的现象,若⽆外⼒作⽤,它们都将⽆法推进下去。
此时称系统处于死锁状态或系统产⽣了死锁,这些永远在互相等待的进程称为死锁进程。
产⽣死锁的原因互相争夺共享资源产⽣死锁的4⼤条件1.互斥条件:共享资源被⼀个线程占⽤2.请求与保持条件(占有且等待):⼀个进程因请求资源⽽被阻塞时,对已经获得资源保持不释放3.不可剥夺条件(不可抢占):进程已获得资源,在未使⽤完之前,不能进⾏剥夺4.循环等待条件:多个线程循环等待资源,⽽且是循环的互相等待死锁如何解决?只需要破坏上⾯ 4 个条件中的⼀个就能破坏。
1.请求与保持条件:放⼤锁范围,去除对资源的抢占2.不剥夺:换成可重⼊锁ReentrantLock3.循环等待:改成顺序加锁,避免循环等待4.互斥是多线程的特性,所以这个条件⽆法避免活锁是指线程1可以使⽤资源,但它很礼貌,让其他线程先使⽤资源,线程2也可以使⽤资源,但它很绅⼠,也让其他线程先使⽤资源。
这样你让我,我让你,最后两个线程都⽆法使⽤资源。
活锁不会被阻塞,⽽是不停检测⼀个永远不可能为真的条件。
除去进程本⾝持有的资源外,活锁状态的进程会持续耗费宝贵的CPU时间。
任务或者执⾏者没有被阻塞,由于某些条件没有满⾜,导致⼀直重复尝试、失败、尝试、失败。
死锁与饥饿:解决并发编程中的常见问题
死锁与饥饿:解决并发编程中的常见问题死锁和饥饿是并发编程中常见的问题,对于开发人员来说,理解和解决这些问题是至关重要的。
本文将对死锁和饥饿问题进行深入探讨,并提供一些解决方案。
一、死锁死锁是指在多线程情况下,两个或多个线程无限期等待彼此持有的资源,以致于无法继续执行下去。
这种情况下,程序将无法正常结束并可能导致系统崩溃。
死锁产生的四个必要条件是:互斥、占有并等待、不可抢占和循环等待。
1.互斥:在一段时间内,某资源只能被一个线程占有。
2.占有并等待:一个线程持有一些资源并请求新的资源。
3.不可抢占:资源只能在不持有的情况下被其他线程抢占。
4.循环等待:线程之间形成一种循环等待资源的关系。
解决死锁的常见方法有:1.预防死锁:通过破坏死锁产生的四个必要条件中的一个或多个,来预防死锁的发生。
例如,避免循环等待,按照资源的顺序请求资源等。
2.检测死锁:通过算法检测系统是否存在死锁,并在检测到死锁时采取相应的措施,如终止某个线程或回滚操作。
3.避免死锁:通过预测资源的使用情况,采取控制策略来避免发生死锁。
例如,银行家算法可以根据资源的剩余量来决定是否允许分配资源。
4.解决死锁:当死锁发生时,可以通过剥夺某个线程的资源来解除死锁。
二、饥饿饥饿是指一个或多个线程一直无法获取到所需的资源,以致于无法继续执行。
饥饿可能导致线程无法正常运行并无限期等待资源的情况。
饥饿问题的常见原因包括:1.优先级问题:高优先级的线程占用了资源,导致低优先级的线程无法获取到资源。
2.锁竞争:多个线程竞争同一把锁,导致某些线程一直无法获取到锁。
3.错误的资源分配策略:某些线程的资源分配策略导致其他线程无法获取到需要的资源。
解决饥饿问题的常见方法有:1.公平分配资源:按照先来先服务的原则,公平地分配资源,避免某个线程长时间无法获取到所需的资源。
2.使用合适的锁:在多线程环境下,选择合适的锁类型和策略,避免锁竞争导致某些线程无法获得锁。
3.优先级调整:根据线程的执行情况和重要性,适当调整线程的优先级,避免低优先级线程一直被其他线程抢占资源。
死锁——精选推荐
死锁死锁什么是死锁每个⼈都占有⼀个资源,同时⼜在等待另⼀个⼈⼿⾥的资源。
发⽣“死锁”。
在并发环境下,各进程因竞争资源⽽造成的⼀种互相等待对⽅⼿⾥的资源,导致各进程都阻塞,都⽆法向前推进的现象,就是“死锁”。
发⽣死锁后若⽆外⼒⼲涉,这些进程都将⽆法向前推进。
死锁、饥饿、死循环的区别死锁:各进程互相等待对⽅⼿⾥的资源,导致各进程都阻塞,⽆法向前推进的现象。
饥饿:由于长期得不到想要的资源,某进程⽆法向前推进的现象。
⽐如:在短进程优先〈SPF)算法中,若有源源不断的短进程到来,则长进程将⼀直得不到处理机,从⽽发⽣长进程“饥饿”。
死循环:某进程执⾏过程中⼀直跳不出某个循环的现象。
有时是因为程序逻辑bug导致的,有时是程序员故意设计的。
共同点区别死锁都是进程⽆法顺利向前推进的现象(故意设计的死循环除外)死锁⼀定是“循环等待对⽅⼿⾥的资源”导致的,因此如果有死锁现象,那⾄少有两个或两个以上的进程同时发⽣死锁。
另外,发⽣死锁的进程⼀定处于阻塞态。
饥饿都是进程⽆法顺利向前推进的现象(故意设计的死循环除外)可能只有⼀个进程发⽣饥饿。
发⽣饥饿的进程既可能是阻塞态(如长期得不到需要的I/o设备),也可能是就绪态(长期得不到处理机)死循环都是进程⽆法顺利向前推进的现象(故意设计的死循环除外)可能只有⼀个进程发⽣死循环。
死循环的进程可以上处理机运⾏(可以是运⾏态),只不过⽆法像期待的那样顺利推进。
死锁和饥饿问题是由于操作系统分配资源的策略不合理导致的,⽽死循环是由代码逻辑的错误导致的。
死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题。
死锁产⽣的必要条件产⽣死锁必须同时满⾜⼀下四个条件,只要其中任⼀条件不成⽴,死锁就不会发⽣。
互斥条件:只有对必须互斥使⽤的资源的争抢才会导致死锁(如哲学家的筷⼦、打印机设备)。
像内存、扬声器这样可以同时让多个进程使⽤的资源是不会导致死锁的(因为进程不⽤阻塞等待这种资源)。
不剥夺条件:进程所获得的资源在未使⽤完之前,不能由其他进程强⾏夺⾛,只能主动释放。
操作系统精髓及设计原理-第6章 并发性_死锁及饥饿
第六章习题翻译第一部分复习题6.1给出可重用资源和可消费资源的例子。
答:可重用资源:处理器,I/O通道,主存和辅存,设备以及诸如文件,数据库和信号量之类的数据结构。
可消费资源:中断,信号,消息和I/O缓冲区中的信息。
6.2可能发生死锁所必须的三个条件是什么?答:互斥,占有且等待,非抢占。
6.3产生死锁的第4个条件是什么?答:循环等待。
6.4如何防止占有且等待的条件?答:可以要求进程一次性地请求所有需要的资源,并且阻塞这个资源直到所有请求都同时满足。
6.5给出防止无抢占条件的两种方法。
答:第一种,如果占有某些资源的一个进程进行进一步资源请求被拒绝,则该进程必须释放它最初占用的资源,如果有必要,可再次请求这些资源和另外的资源。
第二种,如果一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另一个进程,要求它释放资源。
6.6如何防止循环等待条件?答:可以通过定义资源类型的线性顺序来预防。
如果一个进程已经分配到了R类型的资源,那么它接下来请求的资源只能是那些排在R类型之后的资源类型。
6.7死锁避免,检测和预防之间的区别是什么?答:死锁预防是通过间接地限制三种死锁必要条件的至少一个或是直接地限制循环等待的发生来避免死锁的出现。
死锁避免允许可能出现的必要条件发生,但是采取措施确保不会出现死锁的情况。
而死锁检测允许资源的自由分配,采取周期性的措施来发现并处理可能存在的死锁情况。
第二部分习题6.1写出图6.1(a)中死锁的四个条件。
解:互斥:同一时刻只有一辆车可以占有一个十字路口象限。
占有且等待:没有车可以倒退;在十字路口的每辆车都要等待直到它前面的象限是空的。
非抢占: 没有汽车被允许挤开其他车辆。
循环等待: 每辆汽车都在等待一个此时已经被其他车占领的十字路口象限。
6.2按照6.1节中对图6.2中路径的描述,给出对图6.3中6种路径的简单描述。
解:1.Q 获得 B 和A, 然后释放 B 和 A. 当 P 重新开始执行的时候, 它将会能够获得两个资源。
操作系统原理 第六章 死锁
1、资源分配图 系统由若干类资源构成,一类资源称为一个 资源类;每个资源类中包含若干个同种资源, 称为资源实例。 资源类:用方框表示(资源的不同类型) 资源实例:用方框中的黑圆点表示(存在于每个 资源中) 进程 :用圆圈中加进程名表示 分配边:资源实例进程 的一条有向边 申请边:进程资源类 的一条有向边
第六章 死锁
若对资源不加限制的分配可能导致进程 间由于竞争资源而相互制约以至无法继 续运行的局面,这就是死锁。
一、死锁的基本概念 1、死锁产生的原因 系统中两个或两个以上的进程无限期的 等待永远不可能发生的事件,则称这些 进程处于死锁状态中。
进程执行的速度 例6-1 对临时资源使用不加限制 例6-2 例6-3 生活中的例子: 独木桥 其他:wait signal操作顺序不对
二、死锁预防 1、破坏互斥条件 允许多个进程同时访问资源 2、破坏不剥夺条件 在允许进程动态申请资源的前提下:一 个进程在申请新资源的要求不能立刻得 到满足时,便处于等待状态。而一个处 于等待状态的进程的全部资源可以被剥 夺。
3、破坏“请求和保持”条件 静态资源分配法 资源预分配:进程开始之前,一次性分配他 所需要的全部资源。 主要问题: • 进程因等待所需要的资源阻塞时间过长 • 部分资源可能在相当长的时间内变得不 可用; • 进程一次性知道所需全部资源不太可能。
三、死锁避免 系统对进程发出的每一个系统能够满足 的资源申请进行动态检查,并根据检查 结果决定是否分配资源,如果分配后系 统可能发生死锁,则不予分配,否则予 以分配,这是一种保证系统不进入死锁 状态的动态策略。
1、安全和不安全状态 安全状态:在某一时刻,系统能按照某 种次序,如<P1,P2……Pn>来为并发进 程分配所需要的资源,直到最大需求, 使每个进程都顺利完成,则程此时的系 统状态为安全状态。此序列为安全序列。 不安全状态:某一时刻,不存在这样的 一个安全序列,则称为不安全状态。
pdf作业精髓OS6-并发性:死锁和饥饿
6.3 产生死锁的四个条件是什么?答:互斥(每次只有一个进程可使用某个资源),占有且等待(进程申请新资源时继续占有已分配的资源),非抢占(不可强行剥夺进程已占用的资源),循环等待(存在进程间等待资源的循环链)。
6.7 死锁避免,检测和预防之间的区别是什么?答:死锁预防是通过间接地限制三种死锁必要条件的至少一个或是直接地限制循环等待的发生来避免死锁的出现。
死锁避免允许可能出现的必要条件发生,但是采取措施确保不会出现死锁的情况。
而死锁检测允许资源的自由分配,采取周期性的检测措施来发现并处理可能存在的死锁情况。
6个进程P0~P5。
时刻:D C B A D C B A 444411011225001123331001445720143322111055591202a) 可用资源向量Available=(6, 3, 5, 4),正确。
D C B A 334312141332244322124357c) 安全序列之一<P1, P2, P3, P4, P5, P0>备注:安全序列可以有多个,但第一个运行进程绝对不会是P0、P2或P5。
4536D C B A 1096159761386612865117651056466个进程P0~P5。
时刻:D C B A D C B A 444411011225001123331001445720143322111055591202D C B A 334312141332244322124357常见作业错误1:P5请求最大需求(4, 4, 4, 4)请求更小的(3, 2, 3, 3)也不会死锁。
常见作业错误2:P5请求量(3, 2, 3, 3)源量(6, 3, 5, 4)或P5的尚需(3, 4, 3, 3) ,所以不会死锁。
b) 改变某些请求的顺序来预防死锁。
4个进程,1种资源。
P1 P2 P3 P4请求矩阵:C=[ 3 2 9 7 ]分配矩阵:A=[ 1 1 3 2 ]问:最少需要多少个资源才能保证当前状态安全?解:需求矩阵:Need=[ 2 1 6 5 ],安全序列:<P2, P1, P4, P3>。
《现代操作系统》精读与思考笔记第六章死锁
《现代操作系统》精读与思考笔记第六章死锁 本系列博⽂是《现代操作系统(英⽂第三版)》(Modern Operating Systems,简称MOS)的阅读笔记,定位是正⽂精要部分的摘录理解和课后习题精解,因此不会事⽆巨细的全⾯摘抄,仅仅根据个⼈情况进⾏记录和推荐。
由于是英⽂版,部分内容会使⽤英⽂原⽂。
课后习题的选择标准:尽量避免单纯的概念考察(如:What is spooling?)或者简单的数值计算,⽽是能够引起思考加深理解的题⽬。
为了保证解答的正确性,每道题都会附上原书解答,⽽中⽂部分会适当加⼊⾃⼰的见解。
原书答案(需注册) 最初在翻这本书的⽬录时还在想,“死锁”这个主题安排在“进程”主题下就可以了嘛,为何要单列出⼀章?与动辄近百页的其他章节⽐,这⼀章只有区区三⼗来页⽽已,看似微不⾜道。
本章开篇便告诉读者,“死锁”不仅在进程并⾏时会出现,在数据库系统甚⾄是办公室的设备共⽤时也会出现,使⽤场景很⼴泛,也难怪成为⼀个独⽴章节。
也正因适⽤范围⼴泛,⽽⽅法是抽象的,这章特别强调,在决定使⽤某种避免或消除死锁的策略前,必须结合具体场景判断是否适⽤。
1.鸵鸟算法(P441) 所谓的鸵鸟算法,就是对问题视若不见。
虽然数学家认为根本不可接受,但考虑到⼀个不常发⽣并且发⽣后的解决开销很⼤的事件(如本章的死锁),反⽽是⼀个很好的复杂度与性能的折衷。
相⽐之下,尽管该书后⽂提到的避免和解决死锁的⽅法⽐较有效,⽐如⼴为⼈知的银⾏家算法(P451~454),但实⽤性实在有限。
2.spooling的打印机仍然可能造成死锁(P454~455) 虽然使⽤打印机对应的deamon进程唯⼀地与打印机交互、其他进程的打印任务仅仅是将需要打印的⽂件放⼊deamon进程指定的⼀个⽬录下,打印机这⼀设备不再会导致死锁;然⽽,这些待打印的⽂件是需要占⽤空间的,如果磁盘空间不⾜以容纳所有待打印的⽂件,仍然会造成死锁。
习题2再次提到了这个情形。
大学计算机操作系统第6章 并发:死锁和饥饿
• Allocation:Allocation[i,j]=k
进程Pi现在已经分配了k个Rj的实例
• Need:Need[i,j]=k
进程Pi还可能申请k个Rj的实例
Need[i,j] = Claim[i,j] - Allocation[i,j]
25
➢ 符号说明 • X<=Y
• 不可抢占
不能强行抢占进程已占有的资源。
• 循环等待
存在一个封闭的进程链,使得每个进程至少占有此链 中下一个进程所需要的一个资源。
12
处理死锁的方法
• 死锁预防 • 死锁避免 • 死锁检测与恢复
13
6.2 死锁预防
• 试图设计一种系统来排除发生死锁的可能性。
间接的死锁预防方法
x 预防前三个条件
27
➢资源请求算法
• 设Requesti 为进程Pi的请求向量 1) 如果Requesti <= Needi ,那么转到第2)步。否则,产生
出错条件,因为进程已超过了其请求。
2) 如果Requesti <=Available,那么转到第3)步。否则, Pi等待,因为没有可用资源。
3) 假定系统可以分配给进程Pi 所请求的资源,并按如下方式 修改状态:
进程(要求贷款的客户)
22
1、安全状态
若存在一个安全序列,则系统处于安全状态。例:
最大需求 P0 10 P1 4 P2 9
当前占有 5 2 2
说明:某系统有12台磁带驱 动器 P0:最多要求10台 P1:最多要求4台 P2:最多要求9台
P1 分配2;用完释放4;则系统剩余5 P0 分配5;用完释放10;则系统剩余10 P2 分配7;用完释放9;则系统剩余12
操作系统原理第6章 死锁和饥饿
6.1.1 可抢占资源和不可抢占资源
• 使用一个资源所需要的事件顺序可以用抽象的形式表示为 请求资源、使用资源和释放资源。
• 若请求时资源不可用,则请求进程被迫等待。在一些操作 系统中,资源请求失败时进程会自动被阻塞,在资源可用 时再唤醒它。在其他的系统中,资源请求失败会返回一个 错误代码,请求的进程会等待一段时间,然后重试。
6.1.5 资源死锁的条件
• 值得注意的是,每一个条件都与系统的一种可选策略相关 。一种资源能否同时分配给不同的进程?一个进程能否在 占有一个资源的同时请求另一个资源?资源能否被抢占? 循环等待环路是否存在?可以通过破坏上述条件来预防死 锁。
6.1.6 死锁建模
• 描述进程资源分配的有效工具是资源分配图,它是有向图 ,阐述了系统资源(方形)和进程(圆形)的状态,指出 如何用有向图建立资源死锁四个条件的模型。图中有两类 节点:用从资源节点到进程节点的有向边代表该资源已被 请求、授权并被进程占用。在图6-4 a)中,当前资源R正 被进程A占用。
6.1.1 可抢占资源和不可抢占资源
• 当一个进程请求资源失败时,它通常会处于这样一个小循 环中:请求资源,休眠,再请求。这个进程虽然没有被阻 塞,但是从各个角度来说,它不能做任何有价值的工作, 实际和阻塞状态一样。在后面的讨论中我们假设,如果某 个进程请求资源失败,那么它就进入休眠状态。
6.1.1 可抢占资源和不可抢占资源
第6章 死锁和饥饿
• 除了请求独占性的I/O设备之外,别的情况也有可能引起 死锁。例如,在一个数据库系统中,为了避免竞争,可对 若干记录加锁。如果进程A对记录R1加了锁,进程B对记 录R2加了锁,接着,这两个进程又试图各自把对方的记 录也加锁,这时会产生死锁。所以,软、硬件资源都有可 能出现死锁。
第06章 并发性:死锁和饥饿
– 试图设计一种系统来排除发生死锁的可能性 – 两类:
• 间接的死锁预防方法:防止前面列出的三个必要条 件中的任何一个的发生 • 直接的死锁预防方法:防止循环等待的发生
• 四个条件分析(下页)
16
• 互斥 – 一般条件下,第一个条件不能禁止 • 占有且等待 – 要求进程一次性请求所需要的资源 – 所有资源都满足时才执行 – 缺点: • 进程不需要所有资源也可继续执行 • 资源被占用但长时间不用 • 进程未来所需要得资源未知 • 非抢占 – 申请被拒绝,主动释放已分配的其它资源 – 申请被拒绝,抢占已分配给其它进程的该资源 • 循环等待 – 定义资源的线性顺序 – 只能申请已有资源后面的资源
通知 下周四(12月27日)随堂小测 范围:3、5、6、8章
1
操作系统 第六章 并发性:死锁和饥饿
厦门大学软件学院 吴清强
2
6.1 死锁原理
• 死锁
– 一组竞争系统资源或互相通信的进程间相互的 “永久”阻塞 – 没有一个有效的解决方案 – 涉及到两个或多个的进程间因对资源的需求所 引起的冲突
• 当一组进程中的所有进程都在等待一个事 件(等待请求资源的释放),而只有在进 程集合中的其它阻塞的进程才可以触发该 事件,这时就称一组进程死锁
41
• 优点:
– 不需要死锁预防中的抢占和重新运行进程 – 比死锁预防的限制少,但也有限制
• 死锁避免的限制:
– 必须事先声明每个进程请求的最大资源 – 考虑的进程必须是无关的(进程间无同步) – 分配的资源数目必须是固定的 – 在占有资源时,进程不能退出
29
6.4 死锁检测
• 只要有可能,被请求的资源都被授权给进程 • OS周期性执行死锁检测 • 死锁检测算法:见P195 • 算法主要是一个标记没有死锁的进程的过程
死锁与饿死
死锁与饥饿在多道程序系统中,同时有多个进程并发运行,共享系统资源,从而提高了系统资源利用率,提高了系统的处理能力。
但是,若对资源的管理、分配和使用不当,则会产生死锁或是饥饿。
所谓死锁是指在多道程序系统中,一组进程中的每一个进程军无限期等待被该组进程中的另一个进程所占有且永远不会释放的资源。
饥饿是指系统不能保证某个进程的等待时间上界,从而使该进程长时间等待,当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿。
当饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称该进程被饿死。
下面我们就来分别讨论一下死锁与饥饿各自的特点。
首先是死锁。
产生死锁的原因主要有两个,一是竞争资源,系统提供的资源数量有限,不能满足每个进程的需求;二是多道程序运行时,进程推进顺序不合理。
由此可见,发生死锁时死锁进程的个数至少是两个。
我们可以举一个最简单的例子来了解一下死锁:假如双方都拥有部分资源(P1拥有A,P2拥有B,且A,B均只有一个),但这时P1还需要B,P2还需要A,于是P1与P2都会处在无限等待状态,发生了死锁。
由这个例子,我们可以归纳分析出产生死锁的必要条件:(1)互斥条件资源是独占的且排他使用。
即任意时刻一个资源只能给一个进程使用,其他申请者只有等待,直到资源被占有者释放。
如例子中的A,B资源。
(2)不可剥夺条件进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由拥有该资源的进程自愿释放。
如例子中P2 不能强占P1拥有的A资源,而P1也不能强占P2拥有的B资源。
(3)请求和保持条件进程每次申请他所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
如例子中P1申请B资源时继续占有A资源,P2申请A资源时继续占有B资源。
(4)循环等待条件在发生死锁时,必然存在一个进程等待环路,环路中的每一个进程已占有的资源同时被另一个进程所申请。
如例子中的P1和P2就是一个简单的等待环路。
华南农业大学——第六章并发,死锁和饥饿
定义资源类型的线性顺序 A:Ri-Rj(i<j) ;B:华南R农j-业R大i(学i>—j—) 第六章并发,死锁和饥
饿
6.3死锁避免
死锁预防---约束资源请求,至少破坏一个条件
防止前三个条件,间接完成 防止第四个条件,直接完成 导致低效的资源利用和低效的进程执行
死锁避免
允许三个必要条件 明智选择,确保永不会到达死锁点,允许更多的并发 需要知道将来的进程资源请求的情况,以判断该请求是否可能导致
Request 70 Kbytes; ...
Request 60 Kbytes;
Request 80 Kbytes;
华南农业大学——第六章并发,死锁和饥 饿
可消耗资源
可以被创建(生产)和销毁(消耗) 的资源 一个无阻塞的生产进程可以创建任意数目的这类资源 例子:中断、信号、消息和I/O缓冲区中的信息
2、假设一个阅览室有100个座位,没有座位时读者在阅览室外等待;每个 读者进入阅览室时都必须在阅览室门口的一个登记本上登记座位号和姓 名,然后阅览,离开阅览室时要去掉登记项。每次只允许一个人登记或 去掉登记。用信号量操作描述读者的行为。
华南农业大学——第六章并发,死锁和饥 饿
设两个信号量:
const int n=/*读者数*/ count 空位数,初值=100; mutex 用于登记本的互斥使用, mutex=1。
死锁
华南农业大学——第六章并发,死锁和饥 饿
6.3死锁避免
两种方法
进程启动拒绝:如果一个进程的请求会导致死 锁,不启动进程
资源分配拒绝:如果一个进程增加的资源请求 会导致死锁,则不允许分配
华南农业大学——第六章并发,死锁和饥 饿
6.3.1进程启动拒绝
死锁、活锁、饿死和阻塞的个人理解
死锁、活锁、饿死和阻塞的个人理解以下个人理解,请各位前辈多多指教:死锁:① 互斥条件:指进程对所分配到的资源进行排它性使用,在一段时间内某资源只由一个进程占用,如果此时还有其他进程请求资源,则请求者只能等待,直至占有资源的进程被释放。
② 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
③ 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
④环路等待条件:在发生死锁时,必然存在一个进程,资源的唤醒链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
解释:线程A或者B需要过独木桥(使用该进程),而C还没有走完(进程还在占用),于是三方僵死;也可以是没有C 的情况下,A和B互不礼让僵死.A和B都认为自己优先级较高应该使用该进程.活锁:活锁指的是任务或执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败。
活锁和死锁的区别在于,处于活锁的实体在不断的改变状态,而处于死锁的实体表现为等待,活锁有可能自行解开,死锁则不能。
解释:线程A和B都需要过桥(都需要使用进程),而都礼让不走(那到的系统优先级相同,都认为不是自己优先级高),就这么僵持下去.饿死:指一个可运行的进行尽管能继续执行,但被调度器无限期的忽视,而不能被调度执行的情况,饿死可以根据先来先服务资源分配策略来避免。
解释:这是个独木桥(单进程),桥上只能走一个人,B来到时A在桥上,B等待;而此时比B年龄小的C来了,B让C现行(A走完后系统把进程分给了C),C上桥后,D又来了,B又让D现行(C走完后系统把进程分个了D)以此类推B一直是等待状态.阻塞:不用解释了吧?。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B在干什么?
锁
A
示
例
输入设备
输出设备
A在干什么?
B
5/78
SPOOLing系统死锁示例
不够!
进程A
满啦!
输出井 A
L
A
F
L
B
M
C
B
G
M
N
C
H
N
D
O
E
D
I
O
P
Q
不够! F GHI J K
进程B
不够! 进 程 C
6/78
系统资源
可重用资源 (Reusable Resources) – 一次只能供一个进程安全地使用 – 使用资源顺序:请求资源;使用资源;释放资源 – 进程用完资源后可以释放该资源,供其他进程再次 使用 – 如处理器、I/O通道、主存和辅存、设备等
P1
...
Receive(P2);
...
Send(P2, M1);
P2
...
Receive(P1);
...
Send(P1, M2);
22/78
死锁的条件
死锁的三个必要条件 互斥 (Mutual exclusion)
– 一次只有一个进程可以使用一个资源
占有且等待 (Hold-and-wait)
– 当一个进程在等待分配得到其他资源时,将 继续占有已分配到的资源
并发性: 死锁和饥饿
第6章
1
死锁
多道程序系统中,多个进程并发执行可改善 系统的资源利用率和提高系统的处理能力,但也 带来一种危险,即死锁现象发生。所谓死锁是指 计算机系统和进程所处的一种状态。在系统中, 两个或多个进程无限期地等待永远不会发生的条 件,此时称系统处于死锁状态。 一组进程因竞争系统资源或相互通信所造成的永 久性阻塞 没有有效的通用解决办法 涉及到两个或更多的进程之间因对资源的需求所 引起的冲突
P1
...
Request 80 Kbytes; ...
Request 60 Kbytes;
P2
...
Request 70 Kbytes;
...
Request 80 Kbytes;
解决办法:使用虚拟存储机制
21/78
[例4]竞争可消耗资源引起死锁
进程P1、P2并发执行,通过信号量机 制进行同步。假设采用的是Receive阻塞机 制(即未收到信息则该进程被阻塞)
Rj
申请边:
进程资源类的一条有向边
Pi
Rj
10/78
系统资源分配图示例
○ R1
P1
P2
R2
○
11/78
产生死锁的原因
1.竞争资源引起死锁
– 竞争不可抢占性资源:资源不足 – 竞争可消耗性资源
2.进程推进顺序不合理 请求和释放资源的顺序不当
12/78
产生死锁的原因
1.竞争资源引起死锁 在多道程序系统,多个进程共享系
但它们又都因不
P2
能获得所需的资 源而不能继续推
R2 分配
进,从而也不能 释放出自己占有 的资源,以致进
入死锁状态。
14/78
产生死锁的原因
2.进程推进顺序不当引起死锁
在多道程序系统中,并发执行的进程推 进序列不可预测,有些推进顺序,进程可以 顺利完成,这些推进顺序是合法的;而有的 推进顺序会引起进程无限期地等待永远不会 发生的条件而不能向前推进,造成了死锁。
18/78
19/78
[例2]竞争可重用性资源引起死锁
进程P、Q并发执行,竞争访问磁盘D和磁带T。 假设按以下执行序列执行:p0p1q0q1p2q2
√√ √√
√
√
解决办法:定义资源请求的先后次序
20/78
[例3]竞争可重用性资源引起死锁
进程P1、P2并发执行,请求主存空间。 假设可用的主存空间初始为200KB,P1、P2 按以下顺序请求:
16/78
进程P和Q按路径1、 2、5、6推进顺序 合法,按3、4推进 顺序非法
17/78
修改P程序,可避免死锁
Process P … Get A … Release A … Get B … Release B
Process Q …. Get B …. Get A … Release B …. Release A
不可抢占性资源 – 一旦系统把某资源分配给该进程后,就不能 将它强行收回,只能在进程用完后自行释放 – 如磁带机、打印机等
8/78
资源分配图
用资源分配图来表示系统状态。
资源分配图由结点和边组成,是由一组结 点N和一组边E所组成的一个对偶G=(N, E)。
(1) P是一组进程结点P={ P1,P2,…, Pn},R是 资源结点R={ r1,r2,…, rn },N=PUR,且 P∩R={ }。
非剥夺 (No preemption )(不可抢占)
15/78
[例1]进程推进顺序不当引起死锁
进程P和Q并发执行,竞争两个资源A和B。 每个进程需要独占使用这两个资源。 进程P和Q程序如下:
Process P … Get A … Get B … Release A … Release B
Process Q …. Get B …. Get A … Release B …. Release A
统的资源。对于可重用的资源,当系统 把这类资源分配给某进程后,不能强行 收回,只能在进程用完后自动释放。当 多个进程竞争这类资源时就可能引起死 锁。
13/78
竞争资源
例如系统只有一台打印机R1和一台磁带 机R2,可供进程P1和P2共享。
分配 P1 申请
申请
两个进程都在等 待对方释放出自
R1
己所需要的资源,
可消费资源(Consumable Resources)(临时资源) – 可以创建并且可以消费的资源 – 进程消费完资源后,该资源就不存在了 – 如中断、信号、消息等
7/78
系统资源
可抢占性资源 – 进程在获得这类资源后,该资源可被其它进 程或系统抢占。 – 这类资源不会引起死锁 – 如处理器、主存等
2/78
汽车以70 码的速度 行驶,如 果没有任 何的措施, 接下来会 发生什么?
3/78
怎么办?
4/78
进程A
进程B
①申请输入设备 ①申请输出设备
竞
②申请输出设备 ②申请输入设备
争
③释放输入设备 ③释放输出设备
外
④释放输出设备 ④释放输入设备
设
如果执行次序为:进程A①→进程B①..., 死
则发生死锁。
(2) 任意一边e∈E,都连接着P中的一个结点 和R中的一个结点,我们用圆圈表示进程,方 框表示一类相同的资源,方框中的小圆表示一 类资源中的一个资源。
9/78
表示法 资源类(资源的不同类型):用方框表示 资源实例(存在于每个资源中):用方框
中的黑圆点表示 进程:用圆圈中加进程名表示 P
分配边: 资源实例进程的一条有向边 Pi