Building Parallel, Embedded, and Real-Time Applications with Ada
I recently had the pleasure of being one of the technical reviewers for the draft of a new book on embedded, real-time systems programming with Ada. The book is authored by John McCormick, Frank Singhoff, and Jérôme Hugues, three individuals well known to the Ada community in both academic and professional settings. Their extensive experience in those two contexts is reflected throughout. The book is easy to read yet contains pragmatic discussions and examples that are as realistic as an
... listic as an entry-level textbook can be. Indeed that is the stated purpose of the book -an entry level textbook for students and professionals alikebut do not be misled by that fact; the breadth and depth of selected material are significant nonetheless. As one can tell by the title, the scope of the book is wide, requiring a firm foundation. That foundation starts with the motivation for studying concurrency and real-time systems. It finishes with an overview of the sequential and low-level programming parts of Ada. Only those parts of the sequential language necessary for the book itself are covered. In contrast, more concepts and details are necessarily included in the low-level programming portion. The authors then move on to introduce the Ada tasking model, covering activation and termination issues as well as both the thread-oriented and data-oriented mechanisms for communication and synchronization. Specifically, the extremely important topic of protected types is examined, but also the extended rendezvous facility, which is directly applicable in some very specific situations, is described. Distributed systems continue to be important and are examined accordingly. Both the language-defined Distributed Systems Annex and the more typical language-independent middleware approach are considered. CORBA is examined in particular, as it is a middleware framework used in many deployed systems. The heart of the book consists of the two sections on real-time systems schedulability theory and application. Schedulability analysis enables the a priori analysis of a set of tasks with regard to whether deadlines mapped to those tasks will be met. This intricate topic is introduced in such a way that the student will have a good high-level, language-independent grasp of the theory underlying the analysis. The subsequent section then explores how Ada can be used with a run-time environment supporting schedulability analysis. The Ada language Real-Time Systems Annex is therefore explored along with the Ravenscar Profile. Note that a POSIX-based approach is also included for the sake of comparison. The book closes with some pragmatic examinations of run-time libraries and tools supporting both analyzing and executing real-time systems. For any book on this topic, a comparison with two existing, very well known books is appropriate (indeed, unavoidable). These other two books, Concurrent, Real-Time Programming with Ada and Real-Time Systems and Programming Languages, are considered "required reading for software engineers," to quote the Preface of the book under review. They are considered so highly because they not only cover the material completely, they also cover material beyond that of a purely introductory text. For example, other programming languages in addition to Ada are covered in the context of real-time and low-level programming, as well as such advanced topics as reliability and fault tolerance (to name only two). These two books can reasonably be considered the "industrial strength" treatment of the topic introduced so ably by this intentionally simpler text. In summary, this book by McCormick, Singhoff, and Hugues succeeds in introducing a very complicated and wide-ranging topic. It is well written and has extensive examples that are readily accessible but nonetheless reflect the complexities of the real world. I highly recommend the book.