转】死锁、活锁和饿死

转】死锁、活锁和饿死

《并行计算机互连网络》中死锁,活锁与饿死

:一组报文将永远被阻塞,每个报文总在请求其他报文占用的资源,而自己又占用着其他报文所请求的资源。

:在有些情况下,某些报文即使没有被永久阻塞,它们也不能到达相应的目的节点,这时是因为报文到达目的节点的所请求的通道被其他报文占用,报文只能围绕着目的节点却永远不能到达目的节点,这种情况为活锁。只有允许报文沿非最短路径发送时才会出现这种情况。例如一个死锁永久阻塞了一些报文,而这些报文恰好占用了其他报文到达目的节点需要的缓冲器,于是这些报文无法到达目的节点,只能在目的节点周围不断的绕道路由,从而产生活锁。这也说明了死锁、活锁和饿死是相互影响的,一种情况可能会导致另一种情况的发生。

如果网络流量紧张,某个报文由于所请求的资源总是分配给其他请求同一资源的报文,该报文也会被永久性阻塞。这种情况为饿死。通常是由于仲裁冲突时使用不合理的资源分配策略所致。

操作系统中:

死锁定义:一组进程中的每一个进程,均无限期地等待此组进程中某个其他进程占有的,因而永远无法得到的资源,这种现象称为进程死锁。结论:

参与死锁的进程至少有二个
每个参与死锁的进程均等待资源
参与死锁的进程中至少有两个进程占有资源;
死锁进程是系统中当前进程集合的一个子集。

在一个动态系统中,资源请求与释放是经常性发生的进程行为.对于每类系统资源,操作系统需要确定一个分配策略,当多个进程同时申请某类资源时,由分配策略确定资源分配给进程的次序。 资源分配策略可能是公平的(fair),能保证请求者在有限的时间内获得所需资源;资源分配策略也可能是不公平的(unfair),即不能保证等待时间上界的存在。 在后一种情况下,即使系统没有发生死锁,某些进程也可能会长时间等待.当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿(starvation),当饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称该进程被饿死(starve to death)。       

     考虑一台打印机分配的例子,当有多个进程需要打印文件时,系统按照短文件优先的策略排序,该策略具有平均等待时间短的优点,似乎非常合理,但当短文件打印任务源源不断时,长文件的打印任务将被无限期地推迟,导致饥饿以至饿死。                                                                 

与饥饿相关的另外一个概念称为活锁 (live lock) ,在忙式等待条件下发生的饥饿,称为活锁。例如不公平的互斥算法

不进入等待状态的等待称为忙式等待。另一种等待方式是阻塞式等待,进程得不到共享资源时将进入阻塞状态,让 出 CPU 给其他进程使用。忙等待和阻塞式等待的相同之处在于进程都不具备继续向前推进的条件,不同之处在于处于忙等待的进程不主动放 弃 CPU , 尽 管 CPU 可 能被剥夺,因而是低效的;而处于阻塞状态的进程主动放弃 CPU ,因而是高效的。

有人说活锁是数据资源分配引起的,而饿死是处理器资源分配引起的。不同领域中,本质应该是一样的。

我认为活锁的进程不放弃CPU 并且无法完成工作的情况(一直在努力争取,从未成功获得,加油,加油,还要继续努力阿!),就如上面网络中说的报文围绕目的节点转悠,却不能真正到达目的节点。而饿死则是放弃CPU让其他进程工作,但这一让就成了无限期的让,从而导致了饿死(努力一次,被抛弃,从此一直被抛弃,自己也沉沦下去)。

   

做作业的时候发现,貌似活锁的概念在中英文的世界里是不一样的。

首先是来自wikipedia的解释:

A livelock is similar to a deadlock, except that the states of the processes involved in the livelock constantly change with regard to one another, none progressing. This term was defined formally at some time during the 1970s — an early sighting in the published literature is in Babich’s 1979 article on program correctness.[10] Livelock is a special case of resource starvation; the general definition only states that a specific process is not progressing

A real-world example of livelock occurs when two people meet in a narrow corridor, and each tries to be polite by moving aside to let the other pass, but they end up swaying from side to side without making any progress because they both repeatedly move the same way at the same time.

然后看一下来自百度百科的解释:

活锁(英文 livelock)。如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁后,系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后,系统又批准了T的请求……T2可能永远等待,这就是活锁。

活锁有一定几率解开。而死锁(deadlock)是无法解开的。

很明显,百度百科解释的活锁其实是饿死(starvation)。

通俗得讲,活锁应该是一系列进程在轮询地等待某个不可能为真的条件为真。活锁的时候进程是不会blocked,这会导致耗尽CPU资源,这是与死锁最明显的区别。

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值