2-4进程管理-死锁

一.死锁的概念

1.什么是死锁?
多个进程因竞争资源而造成的一种僵局(相互等待),若无外力作用,这些进程都将无法向前推进
2.为什么会产生死锁?
由于系统中存在一些不可剥夺资源,当两个或两个以上进程占有自身的资源并请求对方的资源时,会导致每个进程都无法向前推进
3.死锁产生的原因
系统资源的竞争、进程推进顺序非法、信号量使用不当
4.死锁产生的必要条件
(1)互斥条件
进程要求分配的资源是排他性的,即最多只能同时供一个进程使用
(2)不剥夺条件
进程在使用完资源之前,资源不能被强制夺走
(3)请求并保持条件
占有自身本来拥有的资源并要求其他资源
进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
(4)循环等待条件
存在一种进程资源的循环等待链,链中每个进程已获得的资源同时被链中下一个进程所请求
5.死锁、饥饿、死循环
在这里插入图片描述

二.死锁的处理策略

1.死锁预防:破坏必要条件,让死锁无法发生

(1)破坏互斥条件
将互斥使用的资源改为共享设备。
如两个进程互斥访问打印机,利用SPOOLing技术,由一个输出进程接收两进程的打印数据,然后依次发给打印机,将打印机改为了共享设备。

但并不是所有的资源都可以改造成可共享使用的资源。并且为了系统安全,很多地方还必须保护这种互斥性。因此,很多时候都无法破坏互斥条件。

  • SPOOLing技术(假脱机技术)
    为了缓和CPU的高速性和I/O设备低速性之间的矛盾,引入了脱机输入/输出技术。SPOOLing技术是操作系统中采用的一项将独占设备改造成共享设备的技术
  • 特点:提高了I/O的速度,将独占设备改造为共享设备、实现了虚拟设备功能
  • 组成:输入井和输出井、输入缓冲区和输出缓冲区、输入进程和输出进程

(2)破坏不剥夺条件
①主动释放。当某个进程请求新的资源得不到满足时,它必须立即释放保持的所有资源,待以后需要时再重新申请。也就是说,即使某些资源尚未使用完,也需要主动释放,从而破坏了不可剥夺条件。
②强行剥夺。当某个进程需要的资源被其他进程所占有的时候,可以由操作系统协助,将想要的资源强行剥夺。这种方式一般需要考虑各进程的优先级(比如:剥夺调度方式,就是将处理机资源强行剥夺给优先级更高的进程使用)

缺点:
①实现起来比较复杂
②释放已获得的资源可能造成前一阶段工作的失效。因此这种方法一般只适用于易保存和恢复状态的资源,如CPU。
③反复地申请和释放资源会增加系统开销,降低系统吞吐量。④若采取主动释放,只要暂时得不到某个资源,之前获得的那些资源就都需要放弃,以后再重新申请。如果一直发生这样的情况,就会导致进程饥饿。

(3)破坏请求并保持条件
可以采用静态分配方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不让它投入运行。一旦投入运行后,这些资源就一直归它所有,该进程就不会再请求别的任何资源了。

缺点:有些资源可能只需要用很短的时间,因此如果进程的整个运行期间都一直保持着所有资源,就会造成严重的资源浪费,资源利用率极低。另外,该策略也有可能导致某些进程饥饿。

(4)破坏循环等待条件
可采用顺序资源分配法。首先给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源(即编号相同的资源)一次申请完。即:一个进程只有已占有小编号的资源时,才有资格申请更大编号的资源。按此规则,已持有大编号资源的进程不可能逆向地回来申请小编号的资源,从而就不会产生循环等待的现象。

缺点:
①不方便增加新的设备,因为可能需要重新分配所有的编号
②进程实际使用资源的顺序可能和编号递增顺序不一致,会导致资源浪费
③必须按规定次序申请资源,用户编程麻烦。

2.避免死锁:在动态分配资源的过程中,用一些算法防止系统进入不安全状态

(1)银行家算法

在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。

系统中有5个进程P0-P4,3种资源R0-R2,初始数量为(10,5,7),则某一时刻的情况可表示如下:

当前剩余可分配(3,3,2)
在这里插入图片描述
①P0不满足,P1满足,分配给P1并回收,剩余(5,3,2)
②P0不满足,P2不满足,P3满足,分配给P3并回收,剩余(7,4,3)
③P0满足,分配并回收,剩余(7,5,3)
④P2满足,分配并回收,剩余(10,5,5)
⑤P4满足,分配并回收,剩余(10,5,7)

共五次循环检查即可将5个进程都加入安全序列中,最终可得一个安全序列。该算法称为安全性算法。

(2)系统安全状态

所谓安全序列,就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个。如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有进程都无法顺利的执行下去。

如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,就可能发生死锁。

(3)银行家算法代码角度

在这里插入图片描述
(3-1)基本定义
假设系统中有n个进程,m种资源。
①每个进程在运行前先声明对各种资源的最大需求数,则可用一个n* m的矩阵表示所有进程对各种资源的最大需求数。最大需求矩阵Max,Max[i,j]=K表示进程Pi最多需要K个资源Rj
②n*m的分配矩阵Allocation表示对所有进程的资源分配情况
③Max-Allocation=Need矩阵,表示各进程最多还需要多少各类资源。
④用一个长度为m的一维数组Available表示当前系统中还有多少可用资源
⑤用一个Allocation表示对所有进程的资源分配情况
⑥某进程Pi向系统申请资源,可用一个长度为m的一维数组Requesti表示本次申请的各种资源量

(3-2)分配过程
因为它所需要的资源数已超过它所宣布的最大值。可用银行家算法预判本次分配是否会导致系统进入不安全状态:
①检查此次申请是否超过了之前声明的最大需求数。如果Requesti[j]<=Need[i,j] (0≤j≤m)则继续,否则认为出错
②检查此时系统剩余的可用资源是否还能满足这次请求。如果Requesti[j]<=Available[j](0≤j≤m),则继续。否则表示尚无足够资源,Pi必须等待。
③系统给进程Pi进行资源预分配,并修改相应的数据:Available=Available-Requesti,Allocation[i, j] = Allocation[i, j] + Requesti[j],Need[i, j] = Need[i, j] – Requesti[j]
④操作系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式分配;否则,恢复相应数据,让进程阻塞等待。

3.死锁的检测和解除:只检测当前系统有没有发生死锁,若有,采取一些措施解除

(1)资源分配图

圆圈代表一个进程,框代表一类资源,框中的一个圆代表一类资源中的一个资源。

①请求边:从进程到资源的有向边称为请求边,表示该进程申请一个单位的该类资源
②分配边:从资源到进程的边称为分配边,表示该类资源已有一个资源分配给了该进程

图中,进程P1已经分得了两个R1资源,并又请求一个R2资源;进程P2分得了一个R1资源和一个R2资源,并又请求一个R1资源。
在这里插入图片描述

(2)死锁定理

R2只分配了1个,剩1个,P1请求R2可以满足
在这里插入图片描述
回收P1资源,删除P1的出边和入边。
P2请求可以满足。
在这里插入图片描述
回收P2,删除P2的出边和入边
在这里插入图片描述
若最终能消除所有边,就称这个图是可完全简化的。此时一定没有发生死锁(相当于能找到一个安全序列)。如果最终不能消除所有边,那么此时就是发生了死锁。最终还连着边的那些进程就是处于死锁状态的进程。

(3)死锁解除

①资源剥夺法:挂起某些死锁进程,并抢占它的资源将这些资源分配给其他的死锁进程,但要防止被挂起的进程长时间得不到资源而处于资源匮乏状态
②撤销进程法
强制撤销部分甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行
③进程回退法
让一(或多)个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而非被剥夺。要求系统保持进程的历史信息,设置还原点

如何决定“对谁动手”
①进程优先级。低优先级的先剥夺。
②已执行多长时间。执行时间短的先剥夺。
③还要多久能完成。保护马上就要完成的。
④进程已经使用了多少资源。剥夺使用资源多的容易解除死锁局面。
⑤进程是交互式的还是批处理式的。保护交互式进程,用户优先。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡__卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值