死锁知识点

系统模型:

  • 根据资源分配图, 判断是否有死锁
![有环不一定死锁](https://img-blog.csdnimg.cn/20210601200900214.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppdXJpMTAwNQ==,size_16,color_FFFFFF,t_70)

死锁特征:

死锁的四个必要条件(但满足这四个条件, 不一定会死锁):

1.互斥: 在一个时间只能有一个进程使用资源
2.持有并等待: 进程至少持有一个资源, 并且正在等待其他进程持有的资源
3.不能抢占: 进程不能抢占其他进程已经持有的资源, 只能等其他进程已经完成任务之后自愿释放资源
4.循环等待: p1等p2的资源, p2等p3的资源, ..., pn等p1的资源, 一组进程对资源的持有和等待获取的资源关系形成环

死锁处理办法:

  • 鸵鸟策略:
1.处理死锁的开销很大
2.如果想让OS不发生死锁, 就需要对OS作很多约束, 这样会影响OS的性能. 
3.如果发生死锁时, 对用户影响不是很大, 就可以不用管
  • 死锁预防: 设法破坏死锁的四个必要条件
1.破坏互斥: 即允许多个进程访问互斥的资源, 可能导致运行结果的不确定性
2.破坏持有并等待: 要么不持有资源, 要么在进程开始运行前, 获取所需的全部资源(这样虽然避免了仅获取一部分资源可能导致的死锁现象, 但资源利用率低)
3.破坏不能抢占: 允许抢占, 通常只能kill对方进程来获取对方的资源
4.破坏循环等待: 给资源编号, 进程只能按编号顺序来请求资源, 这样就不会成环了, 但资源利用率同样很低. 通常应用在资源类型比较少的嵌入式系统中
  • 死锁避免: 在程序运行时,当某个进程申请一些资源时,OS通过银行家算法做出判断:若分配给它之后,是否存在某种进程的调度次序,可以满足所有进程的资源请求,不会形成死锁。如果存在,那么说明满足该进程请求后是安全状态,就满足请求,否则就拒绝请求
前提:需要对于每个进程的各种信息(当前已拥有的资源数,所需的最大资源数),以及当前系统的空闲资源数

银行家算法可分为单个资源和多个资源的,就是说只有当同时满足某进程所需的各类资源时,就代表当前空闲资源足够分配给它用,并且如果分配给它,在有限时间内它可以执行完,进而把它所拥有的全部资源释放
  • 死锁检测: 发生的更靠后,允许发生死锁,如果真的发生了就死锁回复
实现类似于死锁避免,想要判断当前状态是否死锁:
1.寻找一个当前空闲资源可以满足的进程并标记,认为它可以有限时间内执行完并释放资源,即加入到空闲资源中去
2.接着寻找下一个,最后未被标记的进程就认为它产生死锁了
  • 死锁恢复: 若真的通过死锁检测判断死锁了
利用抢占,回滚,kill进程进行恢复
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值