10 research outputs found
Static Trace-Based Deadlock Analysis for Synchronous Mini-Go
We consider the problem of static deadlock detection for programs in the Go
programming language which make use of synchronous channel communications. In
our analysis, regular expressions extended with a fork operator capture the
communication behavior of a program. Starting from a simple criterion that
characterizes traces of deadlock-free programs, we develop automata-based
methods to check for deadlock-freedom. The approach is implemented and
evaluated with a series of examples
Detection of Asynchronous Message Passing Errors Using Static Analysis
Concurrent programming is hard and prone to subtle errors. In this paper we present a static analysis that is able to detect some commonly occurring kinds of message passing errors in languages with dynamic process creation and communication based on asynchronous message passing. Our analysis is completely automatic, fast, and strikes a proper balance between soundness and completeness: it is effective in detecting errors and avoids false alarms by computing a close approximation of the interprocess communication topology of programs. We have integrated our analysis in dialyzer, a widely used tool for detecting software defects in Erlang programs, and demonstrate its effectiveness on libraries and applications of considerable size. Despite the fact that these applications have been developed over a long period of time and are reasonably well-tested, our analysis has managed to detect a significant number of previously unknown message passing errors in their code
Compile-Time Analysis and Specialization of Clocks in Concurrent Programs
Clocks are a mechanism for providing synchronization barriers in concurrent programming languages. They are usually implemented using primitive communication mechanisms and thus spare the programmer from reasoning about low-level implementation details such as remote procedure calls and error conditions. Clocks provide flexibility, but programs often use them in specific ways that do not require their full implementation. In this paper, we describe a tool that mitigates the overhead of general-purpose clocks by statically analyzing how programs use them and choosing optimized implementations when available. We tackle the clock implementation in the standard library of the X10 programming language—a parallel, distributed object-oriented language. We report our findings for a small set of analyses and benchmarks. Our tool only adds a few seconds to analysis time, making it practical to use as part of a compilation chain
Symbolic Verification with Periodic Sets
peer reviewedSymbolic approaches attack the state explosion problem by introducing
implicit representations that allow the simultaneous manipulation of
large sets of states. The most commonly used representation in this
context is the Binary Decision Diagram (BDD). This paper takes the
point of view that other structures than BDD's can be useful for
representing sets of values, and that combining implicit and explicit
representations can be fruitful. It introduces a representation
of complex periodic sets of integer values, shows how this
representation can be manipulated, and describes its application to the
state-space exploration of protocols. Preliminary experimental results
indicate that the method can dramatically reduce the resources
required for state-space exploration
Static Deadlock Analysis for CSP-type Communications
. We present two tests for analyzing deadlock for a class of communicating sequential processes. The tests can be used for deadlock detection in parallel and distributed programs at compile time, or for debugging purposes at run time. They can also be used in conjunction with an algorithm we have for constructing valid execution traces for this class. Introduction Distributed systems, high-level software designs, software for parallel processors, and communications protocols can be specified as collections of communicating processes. It is very hard to analyze software for such systems, whether it is expressed abstractly (`specifications') or concretely (`code'). We focus on finite-state analysis techniques for specifications or code involving communicating processes. Because of length constraints, we omit proofs from this paper. The proofs can be found in [LS92b] and our monograph that will be published soon in the Springer-Verlag Lecture Notes in Computer Science series [LS94]. Our ..