MST

星途 面试题库

面试题:并发与同步:死锁检测算法对系统性能的权衡

请描述至少两种常见的死锁检测算法,并分析它们在检测死锁时对系统性能产生的影响,包括时间复杂度、空间复杂度以及对系统正常运行的干扰程度。
29.0万 热度难度
操作系统并发与同步

知识考点

AI 面试

面试题答案

一键面试

资源分配图算法(Resource Allocation Graph Algorithm)

  1. 原理
    • 资源分配图是一种描述系统资源分配状态的有向图。图中包含进程节点($P_i$)和资源节点($R_j$)。从进程节点到资源节点的边表示进程请求该资源,从资源节点到进程节点的边表示资源已分配给该进程。
    • 死锁检测就是检查资源分配图中是否存在环。若存在环,且环中的每个资源类型只有一个实例,则系统处于死锁状态;若环中的资源类型有多个实例,还需进一步分析才能确定是否死锁。
  2. 性能影响
    • 时间复杂度:检测一个有$n$个节点和$e$条边的图中是否存在环,时间复杂度为$O(n + e)$。在实际系统中,$n$是进程和资源的总数,$e$是资源分配和请求边的总数。
    • 空间复杂度:需要存储资源分配图,空间复杂度为$O(n + e)$,用于存储节点和边的信息。
    • 对系统正常运行干扰程度:相对较低。因为该算法可以离线运行,即在不影响系统当前资源分配和进程运行的情况下,定期对资源分配图进行检测。

银行家算法(Banker's Algorithm)

  1. 原理
    • 银行家算法基于资源分配状态和进程对资源的最大需求,通过模拟资源分配过程来判断系统是否处于安全状态。如果系统处于安全状态,即存在一种进程执行序列,使得每个进程都能在有限时间内获得所需资源并完成运行,那么系统不会发生死锁;反之,如果不存在这样的安全序列,则系统可能处于死锁状态。
    • 算法需要记录系统中各类资源的总量(Available)、每个进程已分配的资源量(Allocation)、每个进程对各类资源的最大需求量(Max),并通过计算需求矩阵(Need = Max - Allocation)来判断是否可以进行资源分配。
  2. 性能影响
    • 时间复杂度:对于有$m$类资源和$n$个进程的系统,每次检查安全状态时,时间复杂度为$O(mn^2)$。因为在寻找安全序列的过程中,每次循环都需要遍历所有进程($n$次),且每次判断一个进程是否可运行需要检查所有资源类型($m$次),并且可能需要多次循环来确定整个安全序列。
    • 空间复杂度:需要存储Available、Allocation、Max和Need矩阵,空间复杂度为$O(mn)$。
    • 对系统正常运行干扰程度:较高。银行家算法每次资源请求时都需要执行以检查系统是否仍然安全,这会增加系统开销,影响系统正常运行的性能,尤其是在进程和资源数量较多的情况下。