操作系统(6)

6.1死锁的原理

  1. 定义
    1. 一组进程中每个进程都在等待某个事件(资源),而该事件(资源)在其他阻塞进程中才能触发(释放)
    2. 死锁涉及两个及多个进程之间的资源需求冲突
    3. 死锁的原因:竞争资源,进程推进顺序不当
  2. 利用联合进程图来推断是否会发生死锁

  1. 两类资源
    1. 可重用资源:可重复使用,互斥使用
    2. 可消耗资源
  2. 利用资源分配图来判断是否发生死锁
    1. 资源指向进程:占有(分配),进程指向资源(请求)
    2. 圆点表示进程,方框是资源
    3. 有向图,描述资源和进程的状态
    4. 死锁必有环,有环不一定死锁(要看是否所有进程都阻塞)
  3. 死锁的条件——四个必要条件同时成立才可能进入死锁
    1. 互斥:互斥访问的临界资源
    2. 占有且等待:进程申请资源阻塞时没有释放已分配资源
    3. 不可抢占:进程已占用资源使用完前不可抢占
    4. 循环等待:进程间形成等待资源的循环链
  4. 三种处理方法
    1. 死锁预防:破环四个必要条件之一
    2. 死锁避免:不破坏,但分配资源前会先判断检查资源分配状态

------------------------------保证系统不会进入死锁--------------------------------

    1. 死锁检测和恢复:检查是否死锁,并撤销死锁进程或剥夺资源
    2. 忽略死锁:假设死锁不发生

 

6.2死锁预防(利用率低)

  1. 破坏互斥——为了资源的互斥,不能破坏
  2. 破坏占有且等待
    1. 资源静态分配法:一次分配所有需要资源,若不能满足则全不分配,进程等待直至所有资源可用
      1. 可能引起饥饿,资源利用率低
      2. 进程可能事先不知道所需要的资源列表
  3. 破环不可抢占
    1. 进程申请新资源被阻塞时,主动释放已占有资源
    2. os剥夺低优先级的资源给高优先级
  4. 破环循环等待
    1. 资源有序分配法:为每一个资源编号,进程严格按照编号递增顺序申请资源

 

6.3死锁避免(同样利用率低)

  1. 动态申请资源以及先计算安全性后决定是否分配
  2. 两种死锁避免方法
    1. 进程启动拒绝:若新进程资源最大需求总量会导致死锁,则不启动新进程
      1. 进程资源已分配量不能超过其事先声明的最大需求量(看看自己是不是过分了)
      2. 每一进程对一种资源的需求量不能大于该资源总量(可用是否足够)
      3. 所有进程最大需求量加上新进程Pn+1的最大需求量小于系统资源总量时才启动新进程(安不安全)
    2. 资源分配拒绝,某次资源请求会导致死锁,则不允许此次分配
      1. 银行家算法:分配前先计算是否会导致系统不安全
        1. 安全状态:能找到一个安全序列,使得所有进程都能运行完
        2. 不安全状态,不存在一个安全序列使得进程运行完
        3. 不安全状态≠死锁状态
          1. 先比较请求的资源加上已分配是否大于最大声称最大(自查)
          2. 比较请求是否小于剩余可用
          3. 试探性分配,是否存在安全序列

 

6.4死锁检测(利用率高但安全性低)

  1. 只要请求资源可用则分配,定时检测是否有死锁
    1. 检测算法:类似银行家算法,若存在未标记进程则该进程为死锁进程(当allocation=0则结束)
    2. 资源分配图化简法检测死锁
      1. 当且仅当该状态的资源分配图不可完全简化时系统发生死锁
      2. 逐个找出既不阻塞又非孤立的进程节点,消去请求边和分配边
  2. 从死锁中恢复
    1. 解除死锁:代价最小的撤销进程,剥夺资源
      1. 终止所有死锁进程
      2. 死锁进程滚回安全状态检查点
      3. 每次终止一个死锁进程,直到死锁解除
      4. 每次剥夺一个资源
    2. 如何选择终止的进程或剥夺的资源
      1. 已运行时间最短,预计剩余最长
      2. 已产生输出少,已用资源最少
      3. 进程优先级最低
      4. 防止饥饿:避免总是选择同一个牺牲者

 

6.6哲学家就餐问题

  1. 基于信号量解决方案(5个哲学家)
    1. 至多允许4给哲学家同时拿起叉子(加多一个room=4的信号量)
    2. 奇数号先拿左叉,偶数先拿右叉(4个先左后右,1个先右后左)
    3. 利用管程

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值