操作系统复习笔记(二)

一、并发:死锁和饥饿


1、死锁的条件
三个必要条件: 互斥、占有且等待(占有可以用的资源,等待被占用的资源的释放)、不可抢占
形成充分条件还需要: 循环等待( 即一个进程占有了下一个进入的进程的所需要的资源)
2、处理死锁的三种方法: 破坏4条件之一、 资源动态分配避免死锁、 检测死锁并恢复。
3、死锁预防: 设计一种系统排除死锁的可能性  (四中条件都有缺陷) 

5、死锁避免:
方法:1. 如果一个进程的请求会导致死锁,则不启动该进程
          2. 如果一个进程增加的资源请求会导致死锁,则不允许次分配。

银行家算法:(资源分配策略,即判断请求是否会导致死锁,会则拒绝分配)

             定义两种状态: safe state (至少有种资源分配序列不会导致死锁) 和 unsafe state
      步骤:  找出资源请求列表和剩余资源列表, 查找是否有足够资源满足请求列表中某项请求,若满足,则刷新剩余资源列表,再次判断;若出现不能满足情况,则处于unsafe状态,拒绝某次请求。

6、 死锁检测
算法:    方法同上
7、死锁恢复
    策略: 4种, 取消死锁, 回溯死锁进程, 取消与检测、 抢占与检测

8、哲学家就餐问题

1)条件: 每人用两个叉子吃饭,不能同时使用一个叉子 ,哲学家座位固定
  一种方案:  一次吃饭只准4个人进,则保证有一人能拿到双叉子。
2)用信号量解决方案:
   定义信号量: fork[n] = {1}  (只被一人使用)  ,  room = {4}  (只能进入四个人)   
   i 表示哲学家固定位置          
   一个人进入, wait(room) wait( fork[ (i + 1) mod 5] ) wait( fork[i] ) 判断左右手哪个叉子可以使用(只有能用一个)
  eat()
  signal 恢复所有 

  



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值