操作系统中的死锁问题
什么是死锁?
在多道程序环境下,多个进程可能竞争一定数量的资源。某个进程申请资源,如果这时资源不可用,那么该进程进入等待状态。如果申请的资源被其他等待进程占有,那么该等待进程有可能再也无法改变其状态。这种情况称为死锁。
在正常情况下,进程只能按如下顺序使用资源:
1 申请 如果申请的资源正在被其他的进程使用,那么申请进程必须等待,直到它获得该资源为止
2 使用 进程对资源进行操作
3 释放 进程释放资源
当一组进程中的每个进程都在等待一个事件,而这一事件只能由这一组进程的另一进程引起,那么这组进程就处于死锁状态。
死锁产生的必要条件
如果在一个系统中,下面4个条件同时满足,那么可能就会引起死锁
(1)互斥 至少有一个资源处于非共享模式,即一次只能由一个进程使用。如果另一进程申请该资源,那么申请进程必须等到该资源被释放为止。
(2)占有并等待 一个进程必须至少占有一个资源,并等待另一资源,而该资源位其他进程占有
(3)非抢占 资源不能被抢占,即资源只能在进程完成任务后自动释放
(4)循环等待 {P0,P1,P2,................,Pn} P0等待的资源为P1占有,P2等待的资源为P3占有,................,Pn等待的资源位P0z占有。
资源分配图——死锁问题精确的描述
死锁问题可用称为系统资源分配图的有向图进行更为精确的描述。
资源分配图的表示 节点(分为两种类型系统活动进程的节点和系统所有资源类型的节点)和边(申请边:从进程指向资源节点和分配边:从资源指向进程节点)
画法 进程节点
资源节点 带有两个实例
下面我们由一个资源分配图为例,从资源分配图,我们可以找到很多信息
由资源分配图可以看出
集合P,R,E
资源实例 如R1有一个实例 R2有2个实例
进程状态 如进程P1占有资源类型为R2的一个实例,等待资源类型为R1的实例。
由资源分配图可以看出
1 如果没有环则没有死锁
2 如果有环则分为两种情况
2.1 单资源实例有环必死锁 (又分为 环所涉及的资源刚好有一个实例和 所有资源都只有一个实例)
2.2 多资源环的出现可能会引起死锁
死锁实例
总而言之 ,如果资源分配图没有环就不会处于死锁状态,另一方面,如果有环,那么系统可能处于死锁状态。
补充 什么是活锁
如果有太多进程或操作在短时间内大量请求同一资源出现了活锁;
特点:
好像停滞了,但可以解开;
数据库例子:如果食物T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然在等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求,……,T2有可能永远等待,这就是活锁的情形
网络的例子:中断活锁;
网卡速率变化导致数据包处理方式的变化
中断->轮询
死锁处理方法
从原理上说,有三种方法可以解决死锁问题。
1 可使用协议以预防或避免死锁,确保系统不会进入死锁状态。 也就是说提前评估一下是否会导致死锁。
2 可允许系统进入死锁,然后检测他恢复他
3 可忽视这个问题,认为死锁不可能在系统内检测 鸵鸟策略
鸵鸟策略看似可笑,但是应用还是比较广泛的:
数学家观点(理论型,完美主义者):
希望世界完美无缺
有问题就必须处理,无论任何代价
工程师观点(实践):
能够工作就可以
有问题(死锁):频率、危害、处理代价进行比较
死锁频率<其他故障频率
处理代价>大于处理代价
接下来将我将会详细讨论每种处理方法的详细讨论每种方法的机制和算法 敬请期待。
操作系统中的死锁问题
什么是死锁?
在多道程序环境下,多个进程可能竞争一定数量的资源。某个进程申请资源,如果这时资源不可用,那么该进程进入等待状态。如果申请的资源被其他等待进程占有,那么该等待进程有可能再也无法改变其状态。这种情况称为死锁。
在正常情况下,进程只能按如下顺序使用资源:
1 申请 如果申请的资源正在被其他的进程使用,那么申请进程必须等待,直到它获得该资源为止
2 使用 进程对资源进行操作
3 释放 进程释放资源
当一组进程中的每个进程都在等待一个事件,而这一事件只能由这一组进程的另一进程引起,那么这组进程就处于死锁状态。
死锁产生的必要条件
如果在一个系统中,下面4个条件同时满足,那么可能就会引起死锁
(1)互斥 至少有一个资源处于非共享模式,即一次只能由一个进程使用。如果另一进程申请该资源,那么申请进程必须等到该资源被释放为止。
(2)占有并等待 一个进程必须至少占有一个资源,并等待另一资源,而该资源位其他进程占有
(3)非抢占 资源不能被抢占,即资源只能在进程完成任务后自动释放
(4)循环等待 {P0,P1,P2,................,Pn} P0等待的资源为P1占有,P2等待的资源为P3占有,................,Pn等待的资源位P0z占有。
资源分配图——死锁问题精确的描述
死锁问题可用称为系统资源分配图的有向图进行更为精确的描述。
资源分配图的表示 节点(分为两种类型系统活动进程的节点和系统所有资源类型的节点)和边(申请边:从进程指向资源节点和分配边:从资源指向进程节点)
画法 进程节点
资源节点 带有两个实例
下面我们由一个资源分配图为例,从资源分配图,我们可以找到很多信息
由资源分配图可以看出
集合P,R,E
资源实例 如R1有一个实例 R2有2个实例
进程状态 如进程P1占有资源类型为R2的一个实例,等待资源类型为R1的实例。
由资源分配图可以看出
1 如果没有环则没有死锁
2 如果有环则分为两种情况
2.1 单资源实例有环必死锁 (又分为 环所涉及的资源刚好有一个实例和 所有资源都只有一个实例)
2.2 多资源环的出现可能会引起死锁
死锁实例
总而言之 ,如果资源分配图没有环就不会处于死锁状态,另一方面,如果有环,那么系统可能处于死锁状态。
补充 什么是活锁
如果有太多进程或操作在短时间内大量请求同一资源出现了活锁;
特点:
好像停滞了,但可以解开;
数据库例子:如果食物T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然在等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求,……,T2有可能永远等待,这就是活锁的情形
网络的例子:中断活锁;
网卡速率变化导致数据包处理方式的变化
中断->轮询
死锁处理方法
从原理上说,有三种方法可以解决死锁问题。
1 可使用协议以预防或避免死锁,确保系统不会进入死锁状态。 也就是说提前评估一下是否会导致死锁。
2 可允许系统进入死锁,然后检测他恢复他
3 可忽视这个问题,认为死锁不可能在系统内检测 鸵鸟策略
鸵鸟策略看似可笑,但是应用还是比较广泛的:
数学家观点(理论型,完美主义者):
希望世界完美无缺
有问题就必须处理,无论任何代价
工程师观点(实践):
能够工作就可以
有问题(死锁):频率、危害、处理代价进行比较
死锁频率<其他故障频率
处理代价>大于处理代价
接下来将我将会详细讨论每种处理方法的详细讨论每种方法的机制和算法 敬请期待。