《操作系统》分布式系统中的死锁问题之 检测死锁

         检测死锁的算法很多,一般都是基于图的算法或者说基于环路的校验算法,这个网上有很多论文可以看,然而在这本书里归纳了一些其他理论来当作死锁检测的依据,我觉得和标题不符,我的理解是原文含义是如何降低死锁,不过尊重原文,我还是不做修改在此记录下。

原文转载自 : http://book.51cto.com/art/200907/133348.htm

11.14.3  检测死锁

        诚如所知,在检测死锁的方法中,允许进程使用共享资源。如果因为这种使用而出现死锁,那么就表示检测出死锁。在这种情况下,其中一个进程必须释放自己占据的共享资源。

在分布式操作系统中,实现该方案的麻烦之处在于每个节点只知道本地进程的情况。它不会知道其他节点/进程(也就是全局状态),因此无法帮助检测死锁,而这是避免死锁不可缺少的条件。所以,需要某种仲裁检测分布式操作系统中的死锁。下面给出了三种处理这种情况的解决方案。

       1. 集中式控制

在该方法中,指定一个节点为控制节点,该节点决定死锁检测和指出的方式。所有其他进程向该节点提供信息,并遵守该节点的规定。该方法的优点就是简 单,但缺点是由于大量通信、大的存储空间造成大的系统开销以及控制节点出现故障所导致的危险。最后一点最关键,因为在这种情况下,控制节点出现故障就会导 致整个网络环境瘫痪。

       2. 层次式控制

它会生成类似树状的结构。这里,所有父节点检测它自己的子节点的死锁,并做出合适的决策。

       3. 分布式控制

这是一个民主方法,该方法等同地对待所有的节点/进程。所有的节点/进程需要协同工作。这种方式有大量的信息交换,因而导致大量的系统开销。

诚如所见,所有方法都有自己的优缺点。因此,选择其中一种方法的决策要视具体情况而定,因为每种问题的情况各有不同。

看第2点 第3点 很容易和zookeeper联想到一起,这等看了zookeeper源码后再下结论吧。

猜你喜欢

转载自dikar.iteye.com/blog/927516