分布式系统中的死锁检测技术
1. 分布式系统死锁处理概述
在分布式系统中,死锁是一个常见且棘手的问题。处理死锁通常有预防、避免和检测三种方法。然而,死锁预防通过让进程在执行前一次性请求所有资源,或者抢占持有所需资源的进程,这种方式在分布式系统中效率极低且不切实际。死锁避免则是在系统全局状态安全时才将资源分配给进程,但由于存在诸多问题,在分布式系统中也不实用。因此,死锁检测似乎是处理分布式系统死锁的最佳方法,它需要检查进程 - 资源交互状态,判断是否存在循环等待。
死锁检测主要涉及两个基本问题:一是检测现有死锁,二是解决检测到的死锁。
1.1 死锁检测的正确性标准
一个正确的死锁检测算法必须满足以下两个条件:
- 进度(无未检测到的死锁) :算法必须在有限时间内检测到所有现有的死锁。一旦死锁发生,死锁检测活动应持续进行,直到检测到死锁。也就是说,在死锁的所有等待依赖关系形成后,算法不应再等待其他事件发生来检测死锁。
- 安全(无虚假死锁) :算法不应报告不存在的死锁(称为幻影或虚假死锁)。在分布式系统中,由于没有全局内存和全局时钟,很难设计出正确的死锁检测算法,因为各个站点可能获得系统过时且不一致的等待图(WFG),从而检测到实际上不存在的循环。这也是许多文献中报道的死锁检测算法不正确的主要原因。
1.2 检测到的死锁的解决方法
死锁解决涉及打破进程之间现有的等待依赖关系。这通常包括回滚一个或多个死锁进程,并将其资源分配给阻塞进程,以便它们可以恢复执行。需要注意的是,一些死锁检测算法会沿着等待图的边传播等待依赖关系的信息
超级会员免费看
订阅专栏 解锁全文
72

被折叠的 条评论
为什么被折叠?



