Design of Concurrent Software

Dr. Bo Sanden George Mason University Fairfax, VA, USA

bsanden@gmu.edu

Tel.: +1 703 993 1651 Fax: +1 703 993 1638

This course presents a direct approach to the design of concurrent software in Ada. Participants learn how to construct simple, elegant and deadlock-free concurrent systems. The course introduces a design approach called entity-life modelling (ELM), which is useful in various concurrent applications and particularly where the software controls real-world processes that may contend for resources. The concurrent designs are illustrated by programs in Ada 83 and Ada 95.

Many approaches to the design of concurrent software start with data and control flow analysis, and introduce concurrency through a laborious series of steps. This assumes that the designer is familiar with structured analysis, while concurrency is a new and difficult concept. But Ada makes concurrency easily available, and structured analysis is not as widely known as it used to be

Entity-life modelling is based on a theory of concurrency that applies to both the problem domain and the software domain. Each task in the software is patterned after a thread of events in the problem. The events in each thread occur sequentially, with some minimum distance in time. This means that simultaneous occurrences are in different threads. Each event occurrence belongs to exactly one thread. The goal is to create a thread model of a given problem with a small number of threads. Usually there are many possible thread models of a given problem. Additional heuristics are used to choose a model that will lead to suitable tasks in the software. It is important to look for threads that are either delayable or queuable. A delayable thread contains events that are triggered by time. The rationale for these threads is that a task has the built-in ability to reschedule itself for execution at a later time (as by means of the delay statement in Ada). Queuable threads compete for exclusive access to shared resources. The rationale for queuable threads is a task's ability to suspend its activity and queue for access to a resource. Shared resources are typically represented as Ada packages.

The course is primarily intended for practitioners and focuses on the practical aspects of entity-life modelling. It is also useful for anyone interested in a deeper understanding of tasking and concurrency. It includes several detailed examples of concurrent system designs. The course is largely based on the book Software Systems Construction with Examples in Ada by Bo Sanden (Prentice-Hall 1994). The material is presented at major Ada conferences and regularly used in graduate courses in the Software Engineering masters' program at George Mason University.

Dr. Bo Sanden received his master's degree from the Lund Institute of Technology, Lund, Sweden, in 1970 and his PhD from the Royal Institute of Technology, Stockholm, Sweden, in 1978. Since 1987 he has been an Associate Professor at George Mason University. Dr. Sanden is the author of two books and numerous papers.