3,904 research outputs found
Producing Scheduling that Causes Concurrent Programs to Fail
A noise maker is a tool that seeds a concurrent program with conditional synchronization primitives (such as yield()) for the purpose of increasing the likelihood that a bug manifest itself. This work explores the theory and practice of choosing where in the program to induce such thread switches at runtime. We introduce a novel fault model that classifies locations as .good., .neutral., or .bad,. based on the effect of a thread switch at the location. Using the model we explore the terms in which efficient search for real-life concurrent bugs can be carried out. We accordingly justify the use of probabilistic algorithms for this search and gain a deeper insight of the work done so far on noise-making. We validate our approach by experimenting with a set of programs taken from publicly available multi-threaded benchmark. Our empirical evidence demonstrates that real-life behavior is similar to what our model predicts
Teaching Concurrent Software Design: A Case Study Using Android
In this article, we explore various parallel and distributed computing topics
from a user-centric software engineering perspective. Specifically, in the
context of mobile application development, we study the basic building blocks
of interactive applications in the form of events, timers, and asynchronous
activities, along with related software modeling, architecture, and design
topics.Comment: Submitted to CDER NSF/IEEE-TCPP Curriculum Initiative on Parallel and
Distributed Computing - Core Topics for Undergraduate
Event Stream Processing with Multiple Threads
Current runtime verification tools seldom make use of multi-threading to
speed up the evaluation of a property on a large event trace. In this paper, we
present an extension to the BeepBeep 3 event stream engine that allows the use
of multiple threads during the evaluation of a query. Various parallelization
strategies are presented and described on simple examples. The implementation
of these strategies is then evaluated empirically on a sample of problems.
Compared to the previous, single-threaded version of the BeepBeep engine, the
allocation of just a few threads to specific portions of a query provides
dramatic improvement in terms of running time
McMini: A Programmable DPOR-based Model Checker for Multithreaded Programs
Model checking has become a key tool for gaining confidence in correctness of
multi-threaded programs. Unit tests and functional tests do not suffice because
of race conditions that are not discovered by those tests. McMini is an
extensible model checker based on DPOR (Dynamic Partial Order Reduction). A
mechanism was invented to declare to McMini new, primitive thread operations,
typically in 100~lines or less of C~code. The mechanism was extended to also
allow the end user to declare alternative thread wakeup policies, including
spurious wakeups from condition variables. One declares: (I) under what
conditions an operation is enabled; (ii) which thread operations are
independent of each other; and (iii) when two operations can be considered as
co-enabled. An optional wakeup policy is implemented by defining when a wait
operation (on a semaphore, condition variable, etc.) is enabled. A new enqueue
thread operation is described, allowing a user to declare alternative wakeup
policies. McMini was first confirmed to operate correctly and efficiently as a
traditional, but extensible model checker for mutex, semaphore, condition
variable, and reader-writer. McMini's extensibility was then tested on novel
primitive operations, representing other useful paradigms for multithreaded
operations. An example is readers-and-two-writers. The speed of model checking
was found to be five times faster and more, as compared to traditional
implementations on top of condition variables. Alternative wakeup policies
(e.g., FIFO, LIFO, arbitrary, etc.) were then tested using an enqueue
operation. Finally, spurious wakeups were tested with a program that exposes a
bug only in the presence of a spurious wakeup.Comment: 24 pages, 1 figur
A model checking-based approach for security policy verification of mobile systems
International audienceThis article describes an approach for the automated verification of mobile systems. Mobile systems are characterized by the explicit notion of (e.g., sites where they run) and the ability to execute at different locations, yielding a number of security issues. To this aim, we formalize mobile systems as Labeled Kripke Structures, encapsulating the notion of that describes the hierarchical nesting of the threads constituting the system. Then, we formalize a generic that includes rules for expressing and manipulating the code location. In contrast to many other approaches, our technique supports both access control and information flow specification. We developed a prototype framework for model checking of mobile systems. It works directly on the program code (in contrast to most traditional process-algebraic approaches that can model only limited details of mobile systems) and uses abstraction-refinement techniques, based also on location abstractions, to manage the program state space. We experimented with a number of mobile code benchmarks by verifying various security policies. The experimental results demonstrate the validity of the proposed mobile system modeling and policy specification formalisms and highlight the advantages of the model checking-based approach, which combines the validation of security properties with other checks, such as the validation of buffer overflows
- …