To prepare for this section, read reading #11 (Engler et al., "Exokernel: an operating system architecture for application-level resource management"). This paper is very dense, so no other reading is assigned. You might want to read this paper from two perspectives: (1) This paper proposes a new operating system architecture; how does it compare to monolithic and microkernel systems? (2) It discusses how particular low-level operating system abstractions can be implemented in application space; given the information in the last lectures, try to understand the implementation of one of these abstractions in detail (e.g., virtual memory). Note that this paper is brand new and reports on an experimental implementation; do you think that this radical approach will work for a fully functional system? (It is perfectly acceptable to say "no," even though you might know some of the authors personally; remember it is 6.033: you should be able to hold your own on either side of any argument.)
The quality of the copy in the packet is low, so you may want to print out another copy. The paper is available in PostScript format at http://www.pdos.lcs.mit.edu/papers/exokernel-sosp95.ps.
Don't be confused if the paper uses slightly different language than we have in lecture; this is one of the unpleasant features of studying computer systems. Since this field is moving fast, there is not a standard set of definitions. For example, the words "thread", "process", and "task" are totally overloaded (in the 6.035 sense). Sometimes a thread is the same thing as a task, but other times a task is the same thing as a process; it is a mess. You have to figure it out from the context. Ambiguity is an unfortunate but inescapable property of computer systems.
This is the last lecture on infrastructure and deals with abstractions and primitives for concurrency control, which is a complicated and important topic. Many of the hard-to-find bugs in programs are concurrency bugs, since often they are hard to reproduce. Jim Gray calls these bugs Heisenbugs, in contrast to Bohrbugs, which have a deterministic behavior. To prepare for lecture, read Tanenbaum sections 2.2 (interprocess communication), 2.3 (classical IPC problems), and 12.1 (threads).
The last reading on the topic of computer system organization is #12 (Scheifler and Gettys, "The X window system"). The X window system was developed at MIT and is used all over the world (including at Athena). X is an excellent example of a well-designed system and demonstrates many topics we've discussed in 6.033 (e.g., client/server, asynchronous client/server computing, complexity). The question for the reading assignment is:
How did the designers of X use modularity, abstraction, hierarchy, and layering to manage the complexity of their graphics system? Did they ever violate these principles or practices? (If so, why?)
This lecture is the first lecture of four covering networking. In preparation read Tanenbaum section 10.1 (layered protocols) and reading #13 (part I of Halstead's 6.033 networking notes).
System aphorism of the week
A complex system that
works is invariably found to have evolved from a simple system that
works. (J. Gall, Systemantics)
6.033 Handout 5, issued 2/20/96