死锁问题 - kofbobonet
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
18
进 程 管 理
1 答:不可能。因为死锁产生的原因有两点: 系统资源不足或推进顺序不当,在本题中,进 程所需的最大资源数为60,而系统共有该类资 源65个,其资源数已足够系统内各进程使用。 2 答:简言之,死锁是某进程等待一个不会发 生的事件的一种现象;而饥饿现象是某进程正 等待这样一个事件,它发生了但总是受到其它 进程的影响,以至轮不到(或很难轮到)该进 程。
7
要记住的一些变量的名称
1 Available(可利用资源向量) 某类可利用的资源数目,其初值是系统中所配置的该类全部可用 资源数目。 2 Max最大需求矩阵 某个进程对某类资源的最大需求数 3 Allocation分配矩阵 某类资源当前非配给某进程的资源数。 4 Need需求矩阵 某个进程还需要的各类资源数。 Need= Max-Allocation 系统把进程请求的资源分配给它以后要修改的变量 Available:=Available-Request; Allocation:=Allocation+Request; Need:= Need- Request;
r1
P2
资源分配图
14
进 程 管 理
封锁进程:是指某个进程由于请求了超过了系 统中现有的未分配资源数目的资源,而被系统 封锁的进程。 非封锁进程:即没有被系统封锁的进程资源分 配图的化简方法:假设某个RAG中存在一个进 程Pi,此刻Pi是非封锁进程,那么可以进行如 下化简:当Pi有请求边时,首先将其请求边变 成分配边(即满足Pi的资源请求),而一旦Pi的所 有资源请求都得到满足,Pi就能在有限的时间 内运行结束,并释放其所占用的全部资源,此 时Pi只有分配边,删去这些分配边(实际上相 当于消去了Pi的所有请求边和分配边),使Pi 成为孤立结点。(反复进行) 。
进 程 管 理
安全状态的例子
例:假定系统有三个进程P1、P2、P3,共有12台磁带机。 进程P1总共要求10台磁带机,P2和P3分别要求4台和九 台。设在T0时刻,进程P1、P2和P3已经获得5台、2台和 2台,还有3台空闲没有分配。 进程 最大需求 10 4 9 已分配 5 2 2 可用 3
P1
P2 P3
6
进 程 管 理
三、安全性算法 系统所执行的安全性算法可描述如下: 1 设置两个向量 ①工作向量Work.它表示系统可提供给进程继续运行所需要的各类资 源的数目,它含有m个元素,执行安全算法开始时, Work:=Available。 ②Finish.它表示系统是否有足够的资源分配给进程,使之运行完成。 开始时先做Finish[i]:=false ;当有足够的资源分配给进程时, 令Finish[i]:=true. 2 从进程集合中找到一个能满足下述条件的进程:① Finish[i]=false; ②Needi≤Work. 如找到,执行步骤3;否则执 行步骤4。 3 当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它 的资源,故执行: Work:=Work+Allocation; Finish[i]:=true; Goto step2; 4 如果所有进程的Finish[i]=true,则表示系统处于安全状态;否 则,系统处于不安全状态。
已分配 Allocation A B C
还需要 Need A B C 7 4 1 (0 6 0 3 Available A B C 3 3 (2 3 2 2 2 0) 0 0 1 1 1 2
可用
P0 P1 P2 P3 P4
0 1
2 0
0
0
0)
(3 0 2) 3 0 2 2 1 1 0 0 2
若P1发出请求向量 Request(1,0,2)
12
进 程 管 理
死锁的检测:实质是确定是否存在环路 等待现象,一旦发现这种环路便认定死 锁存在,并识别出该环路所涉及的有关 进程,以供系统采取适当的措施来解除 死锁。最常用的是一种基于资源分配图 RAG和死锁定理的检测死锁算法。
13
进 程 资源分配图(RAG) 管 系统死锁可用资源分配图来描述,该图是由一组结点N和 一组边 E所组成的一对偶 G=(N,E) 。(用圆圈代表一个 理 进程,用方框代表一类资源,由于一种类型的资源可 能有多个,可用方框中的一个点代表一类资源中的一 个资源) 几个概念:请求边,分配边 P1 请求r2 r2
17
进 程 管 理
例题
1 .(北大 95 )一个 OS 有 20 个进程,竞 争使用 65 个同类资源,申请方式是逐个 进行的,一旦某个进程获得它所需要的 全部资源,则立即归还所有资源。每个 进程最多使用三个资源。若仅考虑这类 资源,该系统有无可能产生死锁,为什 么? 2.死锁和饥饿的主要差别是什么?
15
进 程 管 理
P1 r1
P1
P1 r2 r1
P2 r2
r2
r1 P2
Βιβλιοθήκη Baidu
P2
死锁定理: 系统中某个时刻S为死锁状态的充要条件是 S时刻系统的资源分配图是不可完全简化的。 在经过一系列的简化后,若能消去图中的所 有边,使所有的进程都成为孤立结点,则称该 图是可完全简化的;反之的是不可完全简化的。
16
22
进 程 管 理
系统中并发运行进程由于共享资源或相 互通信,如果调度不当,可能导致系统死 锁。解决死锁的方法有三种: (1) 预防死锁,它是通过破坏死锁的四个必 要条件实现的。 (2) 避免死锁,它是在进程请求分配资源时, 采用银行家算法等防止系统进入不安全状 态。 (3) 检测和恢复死锁,它是通过设置一个死 锁检测机构进行死锁检测,一旦检测出来, 通过逐一撤消进程使系统恢复。
4
进 程 管 理
3 分配矩阵Allocation 是一个含有 nm 的矩阵,它定义了系统中每 一类资源当前已分配给每一进程的资源数。如 果Allocation(i,j)=k, 表示进程i当前已分得Rj类 资源k个。 4 需求矩阵Need 是一个含有 nm 的矩阵,用以表示每一个进 程尚需的各类资源数。如果Need(i,j)=k, 表示 进程i还需要Rj类资源k个,方能完成其任务。 Need(i,j)= Max(i,j)-Allocation(i,j)
2 0 2 1 0 0 3 0 0 1 0 1 2 2 0
Work+Allocation finish
A B C 5 3 7 4 7 4 10 4 10 5
2 3 5 7 7
true true
true
true true
进 程 管 理
思考和练习
假定系统中有五个进程{P0、P1、P2、P3、P4}和 三种类型的资源{A,B,C},每一种资源的数量 分别为10、5、7,在T0时刻的资源分配情况如图
19
进 程 管 理
作业
1. 在某系统中,三个进程共享四台同类型的设备 资源,这些资源一次只能一台地为进程服务和释 放,每个进程最多需要二台设备资源,试问在系 统中是否会产生死锁? 2.某系统中有n个进程和m台打印机,系统约定: 打印机只能一台一台地申请、一台一台地释放, 每个进程需要同时使用的打印机台数不超过m。 如果n个进程同时使用打印机的总数小于m+n,试 讨论,该系统可能发生死锁吗?并简述理由。 3.仅涉及一个进程的死锁有可能存在吗?为什么?
P0
0 1
3 9 2 4 2 0 2 3 2 2 2 3
0 0 2) 2 1 2
7 4
1 (0 6 0 4 2 2 0 1 3
P1
P2 P3 P4
2 (3 3 2 0
0 0 0 1 0
3 3 3 2 (2 3 0) 2 0) 0 1 1
9
10,5 7
进程
资源情况
最大值 Max A B C 7 5 3 9 2 4 2 0 2 3 3 2 2 2 3
5
进 程 管 理
二、银行家算法 设Requesti是进程Pi的请求向量,如果进程Pi需要K个 Rj类资源,当Pi发出资源请求后,系统按下述步骤进行 检查: 1 如果 Requesti≤Needi, 则转向步骤 2 ;否则认为出错。 (因为它所需要的资源数已超过它所宣布的最大值。 2 如果 Requesti≤Available, 则转向步骤 3 ;否则,表示系 统中尚无足够的资源,Pi必须等待 3 系统试探把要求的资源分配给进程Pi,并修改下面数据 结构中的数值: Available:=Available-Requesti; Allocation:=Allocation+Requesti; Needi:= Needi- Requesti; 4 系统执行安全性算法,检查此次资源分配后,系统是 否处于安全状态。若安全,正式将资源分配给进程Pi, 以完成本次分配;否则,将试探分配作废,恢复原来 的资源分配状态,让进程Pi等待。
4 3
工作向量Work.它表示系统可提供给进程继续运行所需要的各类资源的数目 资源情况 进程 P1 P3 P4 P2 P0 work A B C 3 3 5 3 7 4 7 4 10 4 2 2 3 5 7 Need A B C 1 2 0 1 4 3 6 0 7 4 2 1 1 0 3
Allocation A B C
请找出该表中T0时刻以后存在的安全序列(至少2种)
资源情况 进程 P0 P1 P2 Max A B C 7 5 3 9 2 0 3 2 2 Allocation A B C Need A B C 7 4 1 2 6 0 0 1 4 3 3 2 0 1 1
11
Available A B C 3 3 2
0 1
2 0 3 0
0
0 2
P3
P4
2
4
2
3
2
3
2
0
1 1
0 2
进 程 管 理
3 死锁的检测和恢复
死锁的检测和恢复技术是指定期启动 一个软件检测系统的状态,若发现有死 锁存在,则采取措施恢复之。 (1)死锁的检测 检查死锁的办法就是由软件检查系统 中由进程和资源构成的有向图是否构成 一个或多个环路,若是,则存在死锁, 否则不存在。
T0时刻系统时安全的。这时存在一个安全序列<P2,P1,P3>
1
进 程 管 理
虽然并非所有不安全状态都是死锁状态, 但当系统进入不安全状态后,便有可能 进入死锁状态;反之只要系统处于安全 状态,系统便可避免进入死锁状态。因 此,避免死锁的实质是如何使系统不进 入不安全状态。
系统的状态可能通过下述来描述: 进程剩余申请数=最大申请数-占有数。
进 程 管 理
银行家算法之例
假定系统中有五个进程{P0、P1、P2、P3、P4} 和三种类型的资源{A,B,C},每一种资源的 数量分别为10、5、7,在T0时刻的资源分配情 况如图
资源情况 进程
Max Need Allocation A B C A B C A B C
Available A B C
进 程 管 理
死锁的恢复。是与检测死锁相配套的一 种措施,用于将进程从死锁状态下解脱 出来。常用的方法有: 1撤消进程;最简单撤消进程的方法是使 全部死锁的进程夭折掉;另一方法是按 照某种顺序逐个地撤消进程,直至有足 够的资源可用,死锁状态消除为止 2挂起进程(剥夺资源)。使用挂起/激活 机构挂起一些进程,剥夺它们的资源以 解除死锁,待条件满足时,再激活进程。 目前挂起法比较受到重视。
20
进 程 管 理
21
进 程 管 理
小结
进程的并发执行,使得它们之间存在着 两种制约关系:由共享资源引起的间接 制约关系称为互斥;由于协作完成同一 任务而引起的直接制约关系称为同步。 为了正确地解决进程之间的同步和互斥, 系统设置同步机构:锁和信号量机构。 这种同步机构称为低级通信。进程之间 的高级通信机构有消息缓冲、信箱、管 道、共享内存和共享文件等机构,其最 大特点是通信双方可交换大量的数据。
可分配资源数=总数-占有数之和。
2
进 程 管 理
银行家算法
银行家算法是最有代表性的避免死锁算 法,是Dijkstra提出的银行家算法。这是 由于该算法能用于银行系统现金贷款的 发放而得名。为实现银行家算法,系统 中必须设置若干数据结构。
3
进 程 管 理
一、银行家算法中的数据结构 1 可利用资源向量Available 是一个含有m个元素,其中的每一个元素代 Available= 3 5 4 表一类可利用的资源数目,其初值是系统中所 2 8 3 配置的该类全部可用资源 8 数6目 。 1 如果 Available[j]=k, 表示系统中现有Rj类资源k个。 2 最大需求矩阵Max 是一个含有 nm 的矩阵,它定义了系统中 n个 进程中的每一个进程对m 类资源的最大需求。 如果Max(i,j)=k, 表示进程i需要Rj类资源的最 大数目为k。
进 程 管 理
1 答:不可能。因为死锁产生的原因有两点: 系统资源不足或推进顺序不当,在本题中,进 程所需的最大资源数为60,而系统共有该类资 源65个,其资源数已足够系统内各进程使用。 2 答:简言之,死锁是某进程等待一个不会发 生的事件的一种现象;而饥饿现象是某进程正 等待这样一个事件,它发生了但总是受到其它 进程的影响,以至轮不到(或很难轮到)该进 程。
7
要记住的一些变量的名称
1 Available(可利用资源向量) 某类可利用的资源数目,其初值是系统中所配置的该类全部可用 资源数目。 2 Max最大需求矩阵 某个进程对某类资源的最大需求数 3 Allocation分配矩阵 某类资源当前非配给某进程的资源数。 4 Need需求矩阵 某个进程还需要的各类资源数。 Need= Max-Allocation 系统把进程请求的资源分配给它以后要修改的变量 Available:=Available-Request; Allocation:=Allocation+Request; Need:= Need- Request;
r1
P2
资源分配图
14
进 程 管 理
封锁进程:是指某个进程由于请求了超过了系 统中现有的未分配资源数目的资源,而被系统 封锁的进程。 非封锁进程:即没有被系统封锁的进程资源分 配图的化简方法:假设某个RAG中存在一个进 程Pi,此刻Pi是非封锁进程,那么可以进行如 下化简:当Pi有请求边时,首先将其请求边变 成分配边(即满足Pi的资源请求),而一旦Pi的所 有资源请求都得到满足,Pi就能在有限的时间 内运行结束,并释放其所占用的全部资源,此 时Pi只有分配边,删去这些分配边(实际上相 当于消去了Pi的所有请求边和分配边),使Pi 成为孤立结点。(反复进行) 。
进 程 管 理
安全状态的例子
例:假定系统有三个进程P1、P2、P3,共有12台磁带机。 进程P1总共要求10台磁带机,P2和P3分别要求4台和九 台。设在T0时刻,进程P1、P2和P3已经获得5台、2台和 2台,还有3台空闲没有分配。 进程 最大需求 10 4 9 已分配 5 2 2 可用 3
P1
P2 P3
6
进 程 管 理
三、安全性算法 系统所执行的安全性算法可描述如下: 1 设置两个向量 ①工作向量Work.它表示系统可提供给进程继续运行所需要的各类资 源的数目,它含有m个元素,执行安全算法开始时, Work:=Available。 ②Finish.它表示系统是否有足够的资源分配给进程,使之运行完成。 开始时先做Finish[i]:=false ;当有足够的资源分配给进程时, 令Finish[i]:=true. 2 从进程集合中找到一个能满足下述条件的进程:① Finish[i]=false; ②Needi≤Work. 如找到,执行步骤3;否则执 行步骤4。 3 当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它 的资源,故执行: Work:=Work+Allocation; Finish[i]:=true; Goto step2; 4 如果所有进程的Finish[i]=true,则表示系统处于安全状态;否 则,系统处于不安全状态。
已分配 Allocation A B C
还需要 Need A B C 7 4 1 (0 6 0 3 Available A B C 3 3 (2 3 2 2 2 0) 0 0 1 1 1 2
可用
P0 P1 P2 P3 P4
0 1
2 0
0
0
0)
(3 0 2) 3 0 2 2 1 1 0 0 2
若P1发出请求向量 Request(1,0,2)
12
进 程 管 理
死锁的检测:实质是确定是否存在环路 等待现象,一旦发现这种环路便认定死 锁存在,并识别出该环路所涉及的有关 进程,以供系统采取适当的措施来解除 死锁。最常用的是一种基于资源分配图 RAG和死锁定理的检测死锁算法。
13
进 程 资源分配图(RAG) 管 系统死锁可用资源分配图来描述,该图是由一组结点N和 一组边 E所组成的一对偶 G=(N,E) 。(用圆圈代表一个 理 进程,用方框代表一类资源,由于一种类型的资源可 能有多个,可用方框中的一个点代表一类资源中的一 个资源) 几个概念:请求边,分配边 P1 请求r2 r2
17
进 程 管 理
例题
1 .(北大 95 )一个 OS 有 20 个进程,竞 争使用 65 个同类资源,申请方式是逐个 进行的,一旦某个进程获得它所需要的 全部资源,则立即归还所有资源。每个 进程最多使用三个资源。若仅考虑这类 资源,该系统有无可能产生死锁,为什 么? 2.死锁和饥饿的主要差别是什么?
15
进 程 管 理
P1 r1
P1
P1 r2 r1
P2 r2
r2
r1 P2
Βιβλιοθήκη Baidu
P2
死锁定理: 系统中某个时刻S为死锁状态的充要条件是 S时刻系统的资源分配图是不可完全简化的。 在经过一系列的简化后,若能消去图中的所 有边,使所有的进程都成为孤立结点,则称该 图是可完全简化的;反之的是不可完全简化的。
16
22
进 程 管 理
系统中并发运行进程由于共享资源或相 互通信,如果调度不当,可能导致系统死 锁。解决死锁的方法有三种: (1) 预防死锁,它是通过破坏死锁的四个必 要条件实现的。 (2) 避免死锁,它是在进程请求分配资源时, 采用银行家算法等防止系统进入不安全状 态。 (3) 检测和恢复死锁,它是通过设置一个死 锁检测机构进行死锁检测,一旦检测出来, 通过逐一撤消进程使系统恢复。
4
进 程 管 理
3 分配矩阵Allocation 是一个含有 nm 的矩阵,它定义了系统中每 一类资源当前已分配给每一进程的资源数。如 果Allocation(i,j)=k, 表示进程i当前已分得Rj类 资源k个。 4 需求矩阵Need 是一个含有 nm 的矩阵,用以表示每一个进 程尚需的各类资源数。如果Need(i,j)=k, 表示 进程i还需要Rj类资源k个,方能完成其任务。 Need(i,j)= Max(i,j)-Allocation(i,j)
2 0 2 1 0 0 3 0 0 1 0 1 2 2 0
Work+Allocation finish
A B C 5 3 7 4 7 4 10 4 10 5
2 3 5 7 7
true true
true
true true
进 程 管 理
思考和练习
假定系统中有五个进程{P0、P1、P2、P3、P4}和 三种类型的资源{A,B,C},每一种资源的数量 分别为10、5、7,在T0时刻的资源分配情况如图
19
进 程 管 理
作业
1. 在某系统中,三个进程共享四台同类型的设备 资源,这些资源一次只能一台地为进程服务和释 放,每个进程最多需要二台设备资源,试问在系 统中是否会产生死锁? 2.某系统中有n个进程和m台打印机,系统约定: 打印机只能一台一台地申请、一台一台地释放, 每个进程需要同时使用的打印机台数不超过m。 如果n个进程同时使用打印机的总数小于m+n,试 讨论,该系统可能发生死锁吗?并简述理由。 3.仅涉及一个进程的死锁有可能存在吗?为什么?
P0
0 1
3 9 2 4 2 0 2 3 2 2 2 3
0 0 2) 2 1 2
7 4
1 (0 6 0 4 2 2 0 1 3
P1
P2 P3 P4
2 (3 3 2 0
0 0 0 1 0
3 3 3 2 (2 3 0) 2 0) 0 1 1
9
10,5 7
进程
资源情况
最大值 Max A B C 7 5 3 9 2 4 2 0 2 3 3 2 2 2 3
5
进 程 管 理
二、银行家算法 设Requesti是进程Pi的请求向量,如果进程Pi需要K个 Rj类资源,当Pi发出资源请求后,系统按下述步骤进行 检查: 1 如果 Requesti≤Needi, 则转向步骤 2 ;否则认为出错。 (因为它所需要的资源数已超过它所宣布的最大值。 2 如果 Requesti≤Available, 则转向步骤 3 ;否则,表示系 统中尚无足够的资源,Pi必须等待 3 系统试探把要求的资源分配给进程Pi,并修改下面数据 结构中的数值: Available:=Available-Requesti; Allocation:=Allocation+Requesti; Needi:= Needi- Requesti; 4 系统执行安全性算法,检查此次资源分配后,系统是 否处于安全状态。若安全,正式将资源分配给进程Pi, 以完成本次分配;否则,将试探分配作废,恢复原来 的资源分配状态,让进程Pi等待。
4 3
工作向量Work.它表示系统可提供给进程继续运行所需要的各类资源的数目 资源情况 进程 P1 P3 P4 P2 P0 work A B C 3 3 5 3 7 4 7 4 10 4 2 2 3 5 7 Need A B C 1 2 0 1 4 3 6 0 7 4 2 1 1 0 3
Allocation A B C
请找出该表中T0时刻以后存在的安全序列(至少2种)
资源情况 进程 P0 P1 P2 Max A B C 7 5 3 9 2 0 3 2 2 Allocation A B C Need A B C 7 4 1 2 6 0 0 1 4 3 3 2 0 1 1
11
Available A B C 3 3 2
0 1
2 0 3 0
0
0 2
P3
P4
2
4
2
3
2
3
2
0
1 1
0 2
进 程 管 理
3 死锁的检测和恢复
死锁的检测和恢复技术是指定期启动 一个软件检测系统的状态,若发现有死 锁存在,则采取措施恢复之。 (1)死锁的检测 检查死锁的办法就是由软件检查系统 中由进程和资源构成的有向图是否构成 一个或多个环路,若是,则存在死锁, 否则不存在。
T0时刻系统时安全的。这时存在一个安全序列<P2,P1,P3>
1
进 程 管 理
虽然并非所有不安全状态都是死锁状态, 但当系统进入不安全状态后,便有可能 进入死锁状态;反之只要系统处于安全 状态,系统便可避免进入死锁状态。因 此,避免死锁的实质是如何使系统不进 入不安全状态。
系统的状态可能通过下述来描述: 进程剩余申请数=最大申请数-占有数。
进 程 管 理
银行家算法之例
假定系统中有五个进程{P0、P1、P2、P3、P4} 和三种类型的资源{A,B,C},每一种资源的 数量分别为10、5、7,在T0时刻的资源分配情 况如图
资源情况 进程
Max Need Allocation A B C A B C A B C
Available A B C
进 程 管 理
死锁的恢复。是与检测死锁相配套的一 种措施,用于将进程从死锁状态下解脱 出来。常用的方法有: 1撤消进程;最简单撤消进程的方法是使 全部死锁的进程夭折掉;另一方法是按 照某种顺序逐个地撤消进程,直至有足 够的资源可用,死锁状态消除为止 2挂起进程(剥夺资源)。使用挂起/激活 机构挂起一些进程,剥夺它们的资源以 解除死锁,待条件满足时,再激活进程。 目前挂起法比较受到重视。
20
进 程 管 理
21
进 程 管 理
小结
进程的并发执行,使得它们之间存在着 两种制约关系:由共享资源引起的间接 制约关系称为互斥;由于协作完成同一 任务而引起的直接制约关系称为同步。 为了正确地解决进程之间的同步和互斥, 系统设置同步机构:锁和信号量机构。 这种同步机构称为低级通信。进程之间 的高级通信机构有消息缓冲、信箱、管 道、共享内存和共享文件等机构,其最 大特点是通信双方可交换大量的数据。
可分配资源数=总数-占有数之和。
2
进 程 管 理
银行家算法
银行家算法是最有代表性的避免死锁算 法,是Dijkstra提出的银行家算法。这是 由于该算法能用于银行系统现金贷款的 发放而得名。为实现银行家算法,系统 中必须设置若干数据结构。
3
进 程 管 理
一、银行家算法中的数据结构 1 可利用资源向量Available 是一个含有m个元素,其中的每一个元素代 Available= 3 5 4 表一类可利用的资源数目,其初值是系统中所 2 8 3 配置的该类全部可用资源 8 数6目 。 1 如果 Available[j]=k, 表示系统中现有Rj类资源k个。 2 最大需求矩阵Max 是一个含有 nm 的矩阵,它定义了系统中 n个 进程中的每一个进程对m 类资源的最大需求。 如果Max(i,j)=k, 表示进程i需要Rj类资源的最 大数目为k。