This work utilizes the plethora of work on verification of sequential programs for the purpose of verifying concurrent programs. We reduce the verification of a concurrent program to a series of verification tasks of sequential programs. Our approach is modular in the sense that each sequential verification task roughly corresponds to the verification of a single thread, with some additional information about the environment in which it operates. Information regarding the environment is gathered during the run of the algorithm, by need. While our approach is general, it specializes on concurrent programs where the threads are structured hierarchically. The idea is to exploit the hierarchy in order to minimize the amount of information that needs to be transferred between threads. To that end, we verify one of the threads, considered "main", as a sequential program. Its verification process initiates queries to its "environment" (which may contain multiple threads). Those queries are answered by sequential verification, if the environment consists of a single thread, or, otherwise, by applying the same hierarchical algorithm on the environment. Our technique is fully automatic, and allows us to use any off-the-shelf sequential model checker. We implemented our technique in a tool called CoMuS and evaluated it against established tools for concurrent verification. Our experiments show that it works particularly well on hierarchically structured programs.
翻译:这项工作利用了对相继程序进行核查的大量工作来核查同时程序。 我们把对并行程序的核查减少到一系列相继程序的核查任务。 我们的方法是模块化的, 即每个相继核查任务大致对应单一线条的核查, 并包含一些关于它所操作的环境的额外信息。 有关环境的信息是在算法运行期间根据需要收集的。 虽然我们的方法是一般性的, 但它专门针对线条结构分级的并行程序。 我们的方法是完全自动的, 并允许我们使用任何离线的顺序模式检查器。 为此, 我们用一个称为“ 主要”的线条线条, 被视为一个顺序程序。 它的核查程序启动“ 环境” ( 其中可能包含多条线条 ) 的查询。 这些查询通过顺序核查得到回答, 如果环境是由单一线条组成, 或者, 或者, 在环境上应用同样的等级算法。 我们的技术是完全自动的, 并允许我们使用任何离线条的序列核对器。 我们在一个工具中应用了我们的技术, 称为“ 主要” 主要” 。