死锁浅析

在并发计算,一个死锁时,两个相互竞争的行动等待其他完成,因此没有永远不会发生。死锁是一个普遍的问题多系统,并行计算和分布式系统,其中软件和硬件锁是用于处理共享资源和执行过程同步。

在一个操作系统中,当发生死锁进程或线程进入等待状态,因为所请求的系统资源被另一个等待过程,而这又是等待由另一个等待进程 ​​持有另一个资源保持。如果因为由它要求的资源正在使用另一个等待处理的过程是不能无限期地改变其状态,则系统被认为是在一个死锁。

在一个交易数据库,当两道工序,每一个自己的事务中,更新两行数据(即记录),但以相反的顺序发生死锁。例如,处理一个更新行1再行2在该处理的同时乙更新行2然后排1。处理一个无法完成更新行2,直到处理乙完成的,但过程中乙不能完成更新一行1,直到处理一个结束。不管有多少时间被允许通过,这种情况绝不会自行解决。由于这个原因,一个数据库管理系统通常会杀死已完成的工作量最少的处理的事务。
在通信系统中,死锁发生主要是由于丢失或损坏的信号,而不是资源争用。

产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁。



两个过程在相反的顺序两种资源的竞争。
(A)一个进程经历。
(B)在后面的过程必须等待。
(C)时的第一道工序在同一时间,第二个锁定第一资源发生死锁进程锁定第二资源。
(D)的死锁可以通过取消并重新启动所述第一过程来解决。


处理死锁
目前大多数操作系统不能防止死锁。系统发生死锁时,不同的操作系统,以他们在不同的非标准的方式作出回应。大多数方法通过防止四个条件之一的发生,特别是在第四个工作。主要方法是如下:

忽略僵局
在这种方法中,假设永远不会发生死锁。这也是一个应用鸵鸟算法。这种方法最初用于MINIX和UNIX。当死锁的发生之间的时间间隔大,每次发生的数据丢失是这是用来容忍的。

检测
在死锁检测,死锁被允许发生。然后检查系统的状态,以检测已发生死锁,随后它被校正。算法被采用,跟踪的资源分配和过程状态,它回滚和重新启动的一个或多个进程,以去除所检测的僵局。检测已经发生的死锁是容易可行的,因为每一个进程已锁定和/或当前所请求的是已知的操作系统的资源调度的资源。

检测到死锁后,它可以通过使用下列方法之一进行校正:
1.进程终止:死锁中涉及的一个或多个进程可能会中止。人们可以选择中止所有竞争过程中涉及的僵局。这确保了僵局肯定和速度解决。但是代价是高达局部的计算都将丢失。或者,人们可以选择在同一时间终止一个进程,直到僵局得到解决。这种方法具有很高的开销,因为在每次中止算法必须确定系统是否仍处于僵局。有几个因素必须考虑而选择终止的候选人,如进程优先级和年龄。
2.资源抢占:分配到各个流程的资源可以连续抢占分配给其他进程,直到僵局被打破

预防
死锁预防工作,防止四个科夫曼条件之一的发生。
除去互斥条件意味着任何过程将具有对资源的独占访问。这对于不能被证明的资源是不可能的后台。但即使有后台的资源,仍可能会发生死锁。该避免互斥算法被称为无阻塞同步算法。

在保持和等待或资源保持也可在需要的过程,要求他们将启动(或在一组特定的操作在着手之前)之前需要的所有资源中删除的条件。这个预先知识是经常难以满足,并且在任何情况下,是一个资源利用效率低。另一种方式是需要的过程来请求资源仅当它具有无。因此,首先必须要求他们将需要从头开始的所有资源之前释放他们所有的当前持有资源。这也是经常是不切实际的。它是如此,因为资源可以被分配并且留长期不用。此外,需要一种流行的资源的过程可能需要无限期地等待,因为这样的资源可以总是被分配给一些过程中,产生资源饥饿。

在没有抢占条件也可能很难或不可能避免作为过程必须能够有一个资源要一定的时间,或在处理结果可能不一致或抖动,可能会发生。但是,不能执行抢占可与干扰优先算法。一个“锁定”的资源抢占通常意味着回滚,并且是要避免的,因为它是在开销非常昂贵的。算法,允许抢占包括无等待无锁和算法和乐观并发控制。如果一个进程保持某些资源和要求一些其他资源(多个)不能立即分配给它,该条件可以通过释放过程的所有当前正在举行的资源中删除。

最后一个条件是循环等待状态。这避免循环等待的方法包括在关键的部分,并用层次来决定一个禁止中断偏序资源。如果没有明显的层次结构中存在,即使资源的存储器地址已经被使用,以确定排序和资源请求在枚举的递增顺序。



(A)两个进程争夺一个资源,遵循先到先得的政策。
(B)当两个进程同时锁定资源发生死锁。
(C)的僵局可以解决通过打破锁的对称性。
(D)的死锁可以防止通过断开锁定机构的对称性


活锁
一个活锁类似于死锁,不同之处在于所涉及的活锁的进程的状态不断对于彼此改变,没有取得进展活锁是一种特殊情况下的资源匮乏 ; 一般定义只指出一个特定进程未取得进展。

活锁是一些算法检测和恢复陷入僵局的危险。如果多于一个进程采取行动,死锁检测算法可以反复触发。这可以通过确保只有一个进程(任意选择或优先级)采取行动来避免。

分布式死锁

分布式死锁发生在分布式系统时,分布式事务或并发控制正在使用。分布式死锁可以检测或者通过构建一个全球性的等待-为图形当地等待了在死锁检测图表或通过分布式算法像边追。
幻象死锁是被在分布式系统中错误地检测,由于系统内的延迟,但实际上并不存在的死锁。例如,如果一个进程释放的资源,R1和发出用于请求R2,和第一消息丢失或延迟,协调器(死锁检测器)可以错误地断定死锁(如果为请求R2具有同时R1会引起僵局)。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值