EECI08: Embedded Systems Programming
|Prev: Autonomous Driving||Course home||Next: Trajectory Generation|
Early control systems used carefully synchronized control loops running on a single computer to insure that control processes ran at a fixed clock cycle and with predictable timing. Modern multi-threaded control environments use much looser timing models and provide non-deterministic execution, but provide advantages in terms of programming flexibility and processor utilization. In addition, networked communication allows multiple computers to run asynchronously, allowing a much richer set of behaviors but complicating the problem of debugging and verifying code. This lecture describes some of the software infractructure used to implement moder networked control systems. We first discuss "message transfer systems", which is responsible for managing network communications between computers and software modules with the control system. We focus on the use of spread as a specific example of a low-level message transfer subsystem and describe how it can be used in a NCS context. We then describe the Pthreads programming environment, which provides a standardized API for managing process threads and mutexes (to resolve data access conflicts).
- Lecture slides: Embedded Systems Programming
Time, clocks, and the ordering of events in a distributed system, L. Lamport. Communications of the ACM, 21(7):558-565, 1978. This is a classic paper on ordering of messages in distributed systems. A must read for distributed systems.
Exploiting virtual synchrony in distributed systems, K. Birman and T. Joseph. ACM Symposium on Operating Systems Principles, 1987. This paper gives a nice overview of some of the problems in group messaging systems and is one of the sets of papers that motivated the work that lead to Spread.
A Users Guide to Spread, J. Stanton. 2002. This is the documentation for the Spread Toolkit. The first and second chapters provide most of the information you need to understand the basic ideas, although the way in which Spread servers are configured, described in Chapter 3, is also useful.
The Spread Wide Area Group Communication System, Y. Amir and J. Stanton. Technical Report CNDS-98-4, The Center for Networking and Distributed Systems, The Johns Hopkins University, 1998. The paper provides a detailed technical description of how Spread works. It is mainly useful if you want to know more about what spread does. Requires some background in network protocols if you want to understand the details.
A Low Latency, Loss Tolerant Architecture and Protocol for Wide Area Group Communication, Yair Amir, Claudiu Danilov, and Jonathan Stanton. International Conference on Dependable Systems and Networks (DSN00), New York, New York, June 25-28, 2000. The paper is similar to the one above but with more technical details.
POSIX Threads Programming, Lawrence Livermore National Laboratory. 2006. This tutorial provides an introduction to Pthreads, the standard implementation of threads under linux. It's a pretty quick read, with examples of the code and pretty good descriptions of the basic pthreads functionality.
Monitors: An Operating System Structuring Concept, C. A. R. Hoare. Communciations of the ACM, 17(10):549--557, 1974. This paper describes the concept of a "monitor", which is basically a function that uses mutexes to access a shared resourse. This is one of the early papers on concurrent computing and is cited as one of the design patterns for using threads and mutexes.
Cooperating Sequential Processes, E. W. Dijkstra. In Structured Programming, Academic Press, 1972. This is one of the most widely cited papers in concurrent programming and is often labelled as the paper that started the field. I haven't been able to locate an online copy yet (and haven't read it either).