操作系统笔记、面试八股(二)—— 死锁

文章介绍了死锁的四个必要条件,包括互斥、占有且等待、不可抢占和循环等待,并探讨了死锁预防的方法,如一次性申请资源和银行家算法。此外,文章还讨论了死锁检测和解除,包括进程-资源分配图在检测中的应用以及不同解除策略的优缺点。

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

2. 死锁

2.1 死锁的必要条件

  1. 互斥

    资源必须处于非共享模式,即因此只能有一个进程访问。如果有另一个进程申请该资源,那么必须等到该资源被释放为止。

  2. 占有且等待

    指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程阻塞,但又对自己已获得的资源保持不放。

  3. 不可抢占

    已经分配给一个进程的资源不能强制地被抢占,它只能被占有它的进程主动释放。

  4. 循环等待

    若干进程之间形成一种头尾相接的循环等待资源的关系(如A等待B,B等待C,C等待A)

只有同时满足这四个必要条件,才会发生死锁。

2.2 死锁预防

死锁预防是采用某种策略,限制并发进程对资源的请求,从而使得死锁的必要条件在系统执行的任何时间上都不满足。

只要破坏任何一个死锁的必要条件,就可以预防死锁的发生。但是一般比较实用的是通过破坏第二个和第四个必要条件入手。

  1. 破坏互斥条件

    对于只读文件、磁盘等资源可采用这种办法处理。但往往有很多资源是不能同时访问的 ,所以这种做法在大多数的场合是行不通的。

  2. 破坏占有且等待条件——一次性申请全部资源(静态分配策略)

    一个进程必须在执行前就申请到它所需要的全部资源,并且直到它所要的资源都得到满足之后才开始执行。

    这个方法的缺点是可能导致资源利用率和进程并发性降低。因为在每个进程所占有的资源中,有些资源是在比较靠后的执行时间里采用的,甚至有些资源是在额外的情况下才使用的,这样就可能造成了一个进程占有了一些几乎不用的资源而使其他需要该资源的进程产生等待的情况。

  3. 破坏不可抢占条件

    这是一种剥夺式方法,但目前一般仅适用于主存资源和处理器资源的分配,并不适用于所有的资源,会导致资源利用率下降

  4. 破坏循环等待条件——对资源编号(层次分配策略)

    对系统资源事先进行编号,规定进程请求所需资源的顺序必须按照资源的编号依次执行。

    在层次分配策略下,所有的资源被分成了多个层次,一个进程得到某一层的一个资源后,它只能再申请较高一层的资源;当一个进程要释放某层的一个资源时,必须先释放所占用的较高层的资源,按这种策略,是不可能出现循环等待链的,

    这种方式可以有效==提高了资源的利用率和系统吞吐量,但是增加了系统开销

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值