Communicating Modules: A Software Design Model for Concurrent Distributed Systems

This design model separates application logic from control logic to help designers of distributed and concurrent programs exploit such concepts as stepwise refinement and data abstraction. A commonly held view is that designs for concurrent or distributed systems are best modeled on message passing systems in which each node is a module (that is, a package of programs and data objects*) and each message corresponds to the parameters of a procedure call. In such systems, nodes may be located in different memories for distributed processing , and all nodes that have received messages may process them concurrently. With that view, many of the simplifying concepts used in the design of sequential programs, such as stepwise refinement, data abstraction, and modular design, can be exploited in the design of concurrent and distributed systems. This article examines the consequences of such an approach but has an objective and perspective that differ from those of similar articles on the same subject in several important respects. Problem domain Many researchers are concerned with resolving issues that either arise in very general models of concurrency, such as Petri nets or electrical circuits, *Modules are similar to Ada packages, in that they encapsulate procedures and common data. They can also be viewed as instances of abstract data types. or in models that are insensitive to the evolutionary process of design. Following Mills,2 we are concerned with a different, but quite large, set of applications: those that can be modeled on mathematical functions (having an input and an output but no need for a memory of prior executions) or state machines (which have memory as well as input and output). Most forms of real-time interactive systems, such as those in air traffic control, satellite tracking, airline reservations, and library checkout, precisely fit this model.