哈工大李治军老师操作系统笔记【17】:死锁处理(Learning OS Concepts By Coding Them !)

30 篇文章 22 订阅

0 回顾

  • 回顾了之前多进程图像的一些知识

1 死锁

  • 这是进程这部分最后一讲,死锁是多进程图像产生的一个问题,要解决这个问题,多个进程在内存当中同时触发交替执行的时候,如果控制不好,就会出现互相死锁的计划,这种死锁就需要操作系统进行一系列的处理,不然就会造成一系列问题

  • 如下,生产者消费者信号量解法,这两个因为信号量的问题就会造成死锁
    在这里插入图片描述
  • 将empty和mutex反过来会怎样?
  • 因为这是用户写的代码,完全可以反过来
  • 但是反过来的话,就会造成死锁,如下图

在这里插入图片描述

  • 总的来就是,你得先看好有没有纸,有纸才能去占坑。你先占坑然后发现没纸了,只能等别人给你送,但别人进来会发现坑被你占了,就会等着不会进来给你送纸

  • 我们将这种多个进程由于互相等待对方持有的资源而造成的准都无法执行的情况叫死锁,如果死锁造成了很多进程都没法执行,再结合操作系统的核心就是多进程图像,计算机就不工作了
  • 调换一下信号量的使用顺序,如上图,就会产生死锁
  • 等待条件形成了一条环路

1.1 死锁的成因


在这里插入图片描述


  • 互相等待对方死锁的资源造成了死锁
  • 进程占有了一些资源,又不释放,再去申请其他资源
  • 各自占有的资源和互相申请的资源形成了环路等待

1.2 死锁的四个必要条件


在这里插入图片描述


1.3 死锁的处理方法

  • 再来回顾一下怎么会产生死锁,因为循环等待对方占着资源导致谁也没法执行,想一下四条火车占着四条路,谁也动不了的那张图
  • 死锁怎么造成的呢?因为占有一个东西又去请求一个东西造成环路等待,在请求的时候自己占有的资源只能靠自己自愿释放,又不能剥夺,又必须互斥等造成了死锁

在这里插入图片描述


  • 死锁预防的方法例子

在这里插入图片描述


1.4 银行家算法

  • 死锁避免,银行家算法
  • 所以判断他是否死锁可以转变思想来判断他是不是不死锁
  • 不死锁就是:是不是存在一条路,能够走下去,也就是判断是不是存在一条可以完成的执行序列,看按照那种方式执行完以后,所有进程都能执行完事
  • 如果有,那个状态就是安全状态

在这里插入图片描述


  • 如图一步步推下去,发现AD是正确的
    在这里插入图片描述

在这里插入图片描述


  • 每一次都去判断一下 n e e d need need是不是小于 w o r k work work
  • 如果能满足了,这个进程就可以 f i n i s h finish finish
  • w o r k work work就把曾经分配给他的资源进行累加
  • 然后挨个判断即可
  • 银行家算法的时间复杂度是 O ( m n 2 ) O(mn^2) O(mn2) m m m是资源的个数, n n n是进程的个数,时间复杂度较高
  • 银行家算法是找到一个可执行的安全序列,那怎么通过银行家算法判断此次请求是否引起死锁呢?
    • 假装给此次请求分配资源,然后调用银行家算法,看还能不能找到一个安全序列

  • 假如先申请 P 0 P_0 P0 ( 0 , 2 , 0 ) (0, 2, 0) (0,2,0),往下推发现都行不通,所以 P 0 P_0 P0的这个申请不是个安全序列,一旦给他了,系统就造成死锁了,所以不应该
  • 所以请求出现时:首先假装分配,然后调用银行家算法,看看有无死锁,如果有,此次死锁直接拒绝,所以造成代价比较大(关键是每次申请都要做)
    在这里插入图片描述

在这里插入图片描述


  • 死锁检测+恢复
    • 定时检测或者是发现资源利用率低时检测,执行一遍银行家算法
    • 找到死锁的进程序列,从里面挑一个进程回滚
    • 什么是回滚?就是把曾经他执行的东西全部退出去
    • 回滚到什么状态呢?就是往前往后回滚试一试,滚到一定程度,再用银行家算法看看,别人可以执行或者不卡了那就可以不用回滚了
    • 那么选择谁回滚?
    • 占用资源多的?优先级低的?

在这里插入图片描述


1.5 死锁的引出


  • 死锁忽略
    在这里插入图片描述

2 总结

死锁就想四条火车的那张图。


在这里插入图片描述


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值