死锁

本文介绍了死锁的概念,包括死锁的四个必要条件:互斥使用、占有且等待、不可抢占和循环等待。接着,阐述了破坏这四个条件以预防死锁的策略,如资源转换、一次性资源申请、资源抢占以及资源有序分配法。同时,讨论了死锁的避免、检测和解除方法,如银行家算法和安全序列,并提到了死锁检测算法的基本思想。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

死锁的定义:

一组进程中,每个进程都无限等待该组进程中另一进程所占有的资源,因而永远无法得到资源,这种现象称为进程死锁,这一组进程就称为死锁进程。


死锁的四个条件:

1、互斥使用(资源独占:打印机,十字路口)

一个资源每次只能给一个进程使用

2、占有且等待(请求和保持,部分分配:十字路口)

进程在申请新的资源的同时保持对原有资源的占有

3、不可抢占(不可剥夺:十字路口)

资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放

4、循环等待(十字路口)

存在一个进程等待队列{P1,P2,...,Pn},

其中P1等待P2占有的资源,P2等待P3占有的资源,...,Pn等待P1占有的资源,形成一个进程等待环路


死锁的预防:破坏产生死锁的四个条件之一

1、破坏“互斥使用/资源独占”条件

资源转换技术:把独占资源变成共享资源(SPOOLing技术的引入,设计一个“守护进程/线程”负责管理打印机)

2、破坏“占有且等待”条件

方案1、要求每个进程在运行前必须一次性申请它所要求的所有资源。问题:资源利用率低;饥饿 现象。

方案2、允许进程动态申请资源的前提下规定,一个进程在申请新的资源不能立即得到满足而变为等待状态前,释放已占有的全部资源,若需要再重新申请。

3、破坏“不可抢占”条件

实现方案:可以通过操作系统抢占这一资源(两个进程优先级不同)

局限性:适用于状态易于保存和恢复的资源

CPU、内存(RAM)

4、破坏“循环等待”条件

通过定义资源类型的线性顺序实现

实施方案:资源有序分配法(哲学家就餐问题)


解决死锁的方法

1、不考虑此问题(鸵鸟算法)

2、死锁预防:静态策略:设计合适的资源分配算法,不让死锁发生

3、死锁避免:动态策略:以不让死锁发生为目标,跟踪并评估资源分配过程,根据评估结果决策是否分配(银行家算法)

定义:在系统运行的过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统发生死锁或可能发生死锁,则不予分配,否则予以分配。

安全序列:一个进程序列{P1,..Pn}是安全的,如果对于每一个进程Pi1(1<= i <= n):

它以后还需要的资源量不超过系统当前剩余资源量与所有进程Pj(j<i)当前占有资源量之和

则称系统处于安全状态

4、让死锁发生:死锁的检测与解除

检测的时机:1、当进程资源请求得不到满足而等待时检测死锁。2、定时检测。3、系统资源利用率下降时检测死锁。

死锁的解除:(前两个消耗资源大)

1、撤销所有死锁进程

2、进程回退(Roll back)再启动

3、按照某种原则逐一撤销死锁进程,直到...

4、按照某种原则逐一抢占资源(资源被抢占的进程必须回退到之前的对应状态),直到...

一种简单的死锁检测算法

设置一张资源分配表、设置一张进程等待表,记录进程与要申请资源之间的关系,若出现环路则产生死锁。



参考视频:https://www.bilibili.com/video/av9555596/index_78.html?t=43#page=81

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值