死锁

产生原因

1.竞争不可剥夺资源(打印机和扫描机)
2.推进顺序不当

必要条件

互斥条件:一个资源一次只能给一个进程使用
不可剥夺条件:资源申请者不能强行从资源占有者的手中剥夺出去,资源只能由资源占有者主动释放。
请求和保持条件:在申请新的资源的同时保持对原有资源的占有。
循环等待条件:存在一个进程等待资源环形链(哲学家进餐问题)

死锁的预防

1.破坏互斥条件
2.破坏不可剥夺条件:在允许动态申请资源的情况下,如果一个进程申请新的资源不能立刻满足,而变为阻塞状态之前,会释放自己已经申请到的资源
3.破坏请求和保持条件:资源进行静态预分配。在运行前,一次性将其所需要的所有资源分配给该进程。这样该进程在整个运行期间,便不再提出资源要求,从而摒弃了请求条件。
【优点】:简单、易于实现且很安全
【缺点】:资源利用率很低,进程也会延迟运行
4.破坏循环等待条件: 把系统中的全部资源分别分给一个特定的序号,并且要求每个进程均应严格地按照序号递增的次序请求资源,否则操作系统不予分配。
【优点】: 基于动态分配方法,资源利用率较前提高。
【关键】: 小心安排资源序号
【问题】:
(1)各类资源序号一经安排,不宜经常地随意改动;
(2)资源序号尽可能反映多数作业的实际使用资源的顺序,但总有不合适的作业而造成资源浪费

死锁的避免和解除

死锁地避免:允许进程动态地申请资源,系统在进行资源分配之前,先计算资源分配的安全性。(银行家算法)
死锁的解除:检测到当前系统发生死锁的时候,并采取一些措施解除死锁。

典型例子

哲学家进餐问题

有五个哲学家,他们的生活方式是交替地进行思考和进餐。他们共用一张圆桌,分别坐在五张椅子上。

在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐完毕,放下筷子又继续思考。

在这里插入图片描述
死锁状况: 当五个哲学家都试图去取同一侧的筷子的时候,五个哲学家每个人都取到了一只筷子,都在等待另一只筷子,会因为循环等待而造成死锁
解决方式
方法一(破坏循环等待条件):
最多只允许四个哲学家同时取筷子,那么就至少会有一个哲学家可以拿到筷子,当其用晚餐之后就会释放两只筷子其余的哲学家就可以进餐了。
方法二(破坏不可剥夺条件):
只有哲学家同时拿到左右两只筷子的时候才允许进餐,如果没有办法同时拿到两只筷子,那么就要立刻释放手中持有的资源
方法三(破坏请求和保持条件):
资源进行静态预分配,奇数号的哲学家必须先拿起左手边的筷子,才允许去拿右手边的,偶数号的则相反。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值