【问题标题】:How can I find a safe sequence while using the Banker's algorithm for avoiding deadlock?如何在使用银行家算法避免死锁时找到安全序列?
【发布时间】:2011-09-22 16:36:39
【问题描述】:

如何在使用Banker's algorithm 避免死锁时找到安全序列?如果我使用安全算法,它不会给出序列作为输出。那我怎样才能得到一个安全的序列呢?

【问题讨论】:

  • 我猜答案是:尝试所有可能的序列。
  • 在考试中尝试所有可能的序列是不可能的,我不会得到那个时间。一定有一些简单的方法!
  • 构造矩阵,然后按照算法!
  • 这个问题完全合法,我不知道为什么它被关闭了。银行家的算法维基百科页面实际上并没有描述任何特定的算法,而只是给出了一个示例的结果; Dijkstra 的原始论文是荷兰语的!你希望 OP 做什么?

标签: algorithm operating-system computer-science


【解决方案1】:

在安全算法中,将完成的向量定义为初始化为零的整数数组。不要将完成向量中的标志设置为真,而是将其设置为递增的订单号。最后完成的向量将包含序列顺序。未完成的进程的完成顺序为零。

【讨论】:

    【解决方案2】:

    通过银行家算法,您可以知道可用资源的总数,以及每个进程可能请求的最大资源数。保守一点,你毕竟是银行家,你假设任何进程在完成之前都会请求它的最大资源。

    当请求资源时,首先查看是否有足够的资源剩余,以便至少有一个进程可以接收到它的最大值。如果没有足够的资源,那么您将无法批准请求,因为您将进入不安全状态。

    现在假设您确定的所有进程都可以获取最大值并完成,并释放了它们所持有的资源。这将允许更多进程获取最大请求并完成,从而释放更多资源。

    重复直到所有进程都完成(在这种情况下可以分配请求),或者即使在所有可以完成的进程都释放了资源之后,某些进程也无法获得最大值。

    在实践中(以及在手工解决的考试问题上),通常只需通过进程列表即可查看您是否处于安全或不安全状态。

    【讨论】:

    • +1。我想知道是否有一种方法可以在进程发出请求时更新某些内部状态,以便可以有效地确定应该以什么顺序尝试它们(而不是只是重复尝试所有这些)。
    • 是的,但这可能不值得麻烦。尽管可以举出 n 次遍历列表的示例,但实际上在第一次或两次遍历之后,已经释放了足够的资源来释放所有其余的资源。保持进程的拓扑排序虽然是一个好主意,但可能比仅仅阅读列表的成本更高。这种方法最大的问题是计算一个进程的最大资源使用量的问题。
    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2013-06-07
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多