“不良苹果”算法或进程使共享沙箱崩溃


9

我正在寻找一种算法来处理以下问题,我暂时将其称为“坏苹果”算法。

问题

  • 我有N个进程在M个沙箱中运行,其中N >>M。
  • 为每个进程提供自己的沙箱是不切实际的。
  • 这些进程中至少有一个进程表现不佳,并导致整个沙箱崩溃,从而杀死了同一沙箱中的所有其他进程。

如果这是一个行为不佳的进程,那么我可以使用简单的二等分将一半的进程放在一个沙箱中,再将一半的进程放在另一个沙箱中,直到发现错误为止。

问题

如果一个以上进程的行为不佳-包括它们表现不佳的可能性-这种朴素的算法是否有效?是否可以保证在某些合理范围内工作?

简化版

为了争辩,让我们假设一个不好的过程会立即降低其沙箱,而一个好的过程则永远不会。


如何保证行为不端的过程会使沙箱崩溃?我的意思是-我们可以假设有一个有限的时间,当我们确定给定的沙箱没有崩溃时,它只能运行“干净”的进程吗?
SF。

不幸的是,并不是:沙盒不会在5分钟内崩溃的事实并不意味着所有过程都表现良好,但确实使我们对该事实更有信心。
罗杰·利普斯科姆

...但是出于这个问题的目的,我想可以通过允许有限的时间来近似。
罗杰·利普斯科姆

您必须雾化您认为是“通过”和“失败”的过程。如果它运行5分钟而没有失败,从技术上讲它还是个坏苹果,但是就像停顿的问题一样,当它过去时,如果在沙子上不打硬线,您将永远无法100%确定。
尼尔

听起来您走在正确的轨道上。如果存在多个进程,并且有多个坏苹果,则可能必须使用较大的M值或不均匀的组,以便可以隔离已知的好苹果,然后将已知的好软件保留在一个沙箱中,并在两个进程之间进行划分您的其他沙箱,直到您确定了个人。您拥有的沙箱越多,它就会越快。正如@Neil指出的那样,这是N个算法的对数M的大O,因此增加M将减少您的尝试。
GlenPeterson

Answers:


2

如果您发现一个坏苹果,则可以应用以下算法:

  1. 将N分为M组
  2. 在每个组上执行测试。
  3. 如果组大小大于1,请返回步骤1,用不良组中的项目数替换N。

同样,如果您找到一个“好”苹果,则可以应用相同的算法,而是找到好组。

该算法的性能为O(log_M(N)),但它取决于只有一个坏苹果的事实。

如果您不知道苹果有多少好坏苹果,则可以使用以下算法:

For each M processes in N
  Test M processes

这是最坏的情况,但是它会O(N/M)及时运行(或O(N)取决于您是否将一次通过视为单个测试还是作为并行执行的测试的集合)。考虑到所有因素,无论如何这都不是一个坏方法。

可能有一些算法的性能比这更好,但是它要求您知道批处理中有多少坏苹果/好苹果。不知道这个因素,虽然我无法证明,但我敢打赌,您不能做得比上面列出的后者更好。

希望有帮助!

编辑:从实际角度看,我知道其中一些操作不容易执行。但是,确实如此,不幸的现实是,您不能严格确定当时运行的沙箱上正在运行哪些进程的坏苹果,而不必至少激活或停用进程。如果问题与算法有关,我想我已经回答了。如果问题与如何处理这种情况有关,那么该问题可能更适合于超级用户SE。


1
不幸的是,我无法“测试”这些过程。我所知道的是,一个沙箱崩溃了,这是由其中一个或多个进程引起的。
罗杰·利普斯科姆2013年

1
问题在于,将集合二等分后,两个分区中可能都包含坏苹果。这让我认为我需要的不仅仅是一个简单的分区……
Roger Lipscombe

@RogerLipscombe您正在尝试将算法应用于实际场景。当然,您将无法一次测试一个进程,并且可能很难在不同的机器上测试这些进程,但是,如果要深入了解这一点,您将必须找到一种方法或另一种方法。如果您插入了无法解析的变量,那么您将根本无法找到可以准确查明不良苹果的算法。
尼尔

好的,因此,“测试”仅表示“让它们运行足够长时间以使其充满信心” ...?
罗杰·利普斯科姆

我想是@RogerLipscombe。可能需要更多时间,但您必须弄清楚要等待多长时间。知道这一点并遵循此算法,您可以从技术上找出所有不良苹果。但是,仅查看Windows事件日志中的崩溃可能会更快。
尼尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.