操作系统-----死锁

1.什么是死锁?

多个进程互相等待对方资源,在获得对方资源之前又不释放资源的现象叫死锁。一个或多个进程死锁就会导致系统死锁。

 2.发生死锁的四个必要条件(缺一不可

(1)互斥条件:每个资源每次只能被一个线程(或进程,下同)使用。即只有对必须互斥使用的资源的争抢才会发生死锁。

如何破坏:将互斥使用的资源改造成共享使用的资源

缺点:并不是所有的互斥使用的资源都可以改造成共享资源。反而是为了系统的安全要保护这种互斥性。因此破坏互斥条件不可行。

(2)请求和保持条件:指当一个线程(或进程)因请求资源而阻塞时,则需对已获得的资源保持不放。

如何破坏

破坏“请求”条件:

每个进程在运行之前,必须一次性申请完其在整个运行期间所需要的全部资源

缺点

  • 资源利用率低:有些资源很晚才使用却一直被占用,导致其他进程无法使用该资源
  • 可能出现饥饿现象:进程由于个别资源申请不到导致进程一直无法开始

破坏“保持”条件:进程在申请资源之前释放所占有的一切资源

(3)不剥夺条件(非抢占条件):指进程(或线程)已获得的资源,在未用完之前不能被强行剥夺。

如何破坏

  • 法一:当某进程申请新的资源得不到满足时,必须立即释放保持的一切资源。,待以后需要时重新申请。
  • 法二:当某进程所请求资源被其他进程占有时,可以在操作系统的协助下强行剥夺资源。

缺点

  • 实现起来hin复杂。
  • 释放已有资源会造成前一阶段的工作失效。因此法一适用于易保存和恢复状态的资源,如CPU。
  • 反复申请和释放资源会增加系统开销,降低系统吞吐量。
  • 法一可能导致进程饥饿。

(4)循环等待条件:若干进程(或线程)之间形成一种头尾相接的循环等待资源关系。

如何破坏

顺序资源分配法:给系统中的所有资源类型进行编号,规定每个进程按编号递增的顺序请求资源,同类型资源(即编号相同)一次性申请完。(ps:如果进程后面又想申请序号低的资源(比如5),那就必须把现在拥有的序号为5及其以上的资源全部释放

②原理分析(证明):

一个进程只有已占有小编号的资源时,才有资格申请更大编号的资源。按照这种规则,拥有大编号资源的进程不可能逆向回来申请小编号资源,也就构不成“循环”条件。

也就是说进程里总有一个进程有相对的最大号资源,如果它再次申请更大号资源,则申请的资源一定没有被占用。

(借用)

 

3.死锁的处理:

允许死锁发生:

  1. 预防死锁:破坏死锁发生的四个必要条件中的一个或几个(参考上文
  2. 避免死锁:(重点)银行家算法

待补充~~~`

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值