Real-Time Software Design and Architecture Concepts

This chapter describes key concepts in the software design of concurrent object-oriented real-time embedded systems as well as important concepts for developing the architecture of these systems. First, object-oriented concepts are introduced, with the description of objects and classes, as well as a discussion of the role of information hiding in object-oriented design and an introduction to the concept of inheritance. Next, the concurrent processing concept is introduced and the issues of communication and synchronization between concurrent tasks are described. These design concepts are building blocks in designing the software architecture of a real-time embedded system: the overall structure of the system, its decomposition into components, and the interfaces between these components. Section 3.1 provides an overview of object-oriented concepts. Section 3.2 describes information hiding and how it is used in software design. Section 3.3 describes inheritance and generalization/specialization relationships. Section 3.4 describes active and passive objects, while Section 3.5 provides an overview of concurrent processing. Section 3.6 describes cooperation between concurrent tasks, including mutual exclusion, task synchronization, and the producer/consumer problem. Section 3.7 describes how information hiding is applied to access synchronization. Section 3.8 provides an overview of runtime support for concurrent processing, while Section 3.9 describes task scheduling. Finally, Section 3.10 provides an overview of software architecture and the concepts of components and connectors. OBJECT-ORIENTED CONCEPTS An object is a real-world physical or conceptual entity that provides an understanding of the real world and hence forms the basis for a software solution. A real-world object can have physical properties (they can be seen or touched); examples are a door, motor, or lamp. A conceptual object is a more abstract concept, such as an account or transaction. From a design perspective, an object packages both data and procedures that operate on the data. The procedures are usually called operations or methods. Some approaches, including the UML notation, refer to the operation as the specification of a function performed by an object and the method as the implementation of the function (Rumbaugh, Booch, and Jacobson 2005). In this book, we will use the term operation to refer to both the specification and the implementation, in common with Gamma et. al. (1995), Meyer (2000), and others.