死锁原因,解决,避免方法及哲学家就餐问题

死锁的四大条件:
互斥:资源不能共享,只能由一个进程持有
占有且等待:当一个等待另外进程而阻塞时,资源不主动释放
不可抢占:操作系统不能强行抢占被进程持有的资源
循环等待:存在一个封闭的进程链,使得每一个进程都至少占有下个进程所需要的资源。

这个四个资源中,前面三个,基本所有操作系统都是可以满足的。所以一般产生死锁,第四个是关键。

关于死锁的解决方法,有三种
1. 死锁预防
2. 死锁避免
3. 死锁检测且恢复

死锁预防

死锁预防有两种方法:间接死锁预防方法,即防止前三个条件;直接死锁预防,即防止第四个条件
1. 间接死锁预防
破坏第一个是不可能的,资源本来就是互斥的;第二个占有且等待,可以要求进程一次性地请求所有需要的资源,并且阻塞到所有请求同时满足;不可抢占,将进程持有的资源抢占,也是于理不合。
2. 直接死锁预防
这个可以通过定义资源请求顺序来解决,比如进程1,2都需要资源a,b,我们可以定义必须先得到a,才能得到b,这样就不会发生,1抢了a,2抢了b,导致循环等待。

死锁避免

死锁避免中是否允许资源分配请求,是通过判断该请求是否有可能导致死锁来决定的。
1. 进程启动拒绝。如果在进程启动时,看看系统已经分配的和剩余的资源能不能满足进程需要的最大资源,如果不能,直接拒绝
2. 资源分配拒绝。采用银行家算法,当进程请求一组资源时,假设同意该请求,从而改变系统的状态,然后确定其结果是能够使系统处于安全状态,如果是,则同意该请求,如果不是,阻塞该进程直到同意该请求后系统状态能够处于安全状态。

死锁检测和恢复

方法:在所有进程中查找系统所剩余资源能够满足其运行完全的进程,标记该进程,然后将其资源返回系统,然后继续查找,直到找不到为止,然后,如果所有进程都被标记了,则没有发生死锁,如果存在未标记的进程,则说明系统发生了死锁。
恢复:
1. 取消所有的死锁进程
2. 连续取消死锁进程,直到不再死锁。


哲学家就餐问题

问题描述:

这里写图片描述

解决方法

1 信号量,5个人5只筷子,根据鸽笼原理,是有可能发生死锁的。例如,当所有哲学家都同时拿起左边的筷子时,就会形成死锁。所以可以限制人数,当4个人5只筷子时,根据鸽笼原理,是一定不会发生死锁的。所以,我们可以定义一个四个资源的信号量,来限制吃面条的哲学家人数为4个。
2 让哲学家就餐时,随机拿起左右筷子,而不是都是同一个方向,虽然可以减少,但是还是存在死锁问题。
3 采用回退方法。例如a哲学家拿起左边筷子后,当想拿起右边筷子时,发现被b哲学家拿走了,这个时候,就比较一下a,b哲学家到底是谁先拿起筷子的,如果慢拿起筷子那个,就把回退,把筷子放下。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值