Operating Systems
Operating Systems for Single-Threaded Computers. First draft of
a free, open booklet about
OS technology application domains where the software does not depend
on the presence of interrupts or the CPU mode bit.
This booklet is part of an
open textbook experiment. I welcome coauthors who want to
enhance and/or modifiy this manuscript.
Operating Systems for Multi-threaded Computers.
A free, open booklet about
OS technology for machines that use interrupts,
but not the CPU mode bit. Examples of such operating systems
might be TinyOS and the Mantis OS. The materials here are under
development:
Please read the material published here, use it,
give me feedback about its weak and strong points.
This booklet is part of an
open textbook experiment. I welcome coauthors who want to
enhance and/or modifiy this manuscript.
Kernel Projects for Linux
Operating System
Distributed Virtual Machines: Inside the Rotor CLI
Today there is a wide spectrum of types of computers: some machines are tiny machines that are part of a larger system, such as sensor nodes in a sensor network, or and embedded system in a missile guidance system. Others machines provide as much storage or as many processing cycles as possible so that the machine can solve very large problems such as decoding DNA sequences or predicting the weather. Naturally the software environments for such a broad spectrum of machines varies widely. Some machines execute a single program written in assembly language or "high level assembly language" (that is, C). Other machines are designed to execute C, C++, or Java programs, and yet others are intended to execute programs written in High Performance Fortran on a collection of concurrent abstract machines.
Even a decade ago, it was possible to describe the mainstream of operating system technology and in so doing, to provide the essential material and perspective for a person to understand any OS. At that time I wrote the first edition of my general OS textbook that focused on mainstream technologies that appear in operating systems. That book is now in its third edition, and certainly reflects the critical issues and technologies for uniprocessor systems such as notebooks, desktops, workstations, and small servers (although many of these now employ transparent multicore hardware). Today, the gap between the system software that controls a sprinkler system and the OS software that controls a large multiprocessor is just too large to describe both of them in a cogent thread of explanation in a single textbook.
Over time I found that some people wanted to look more carefully at kernel and runtime internals. The pute textbooks in this collection focus on concepts, while some of the supplementary books ( Kernel Projects for Linux, Operating System Projects Using Windows NT, and Distributed Virtual Machines: Inside the Rotor CLI) focus on detailed design and implementation of particular systems.
In the past few years I have experimented with alternative ways to describe system software for small, communicating computers. The approach that I like best uses a hierarchy to characterize "very small," "small," and "moderate sized" operating systems.
I used this hierarchical description as the basis of a manuscript about operating systems for small, communicating computers. The book was tested in a couple of classes at the University of Colorado between 2004 and 2007. Some students liked this organization of material very much, and in the process they learned a great deal about the role and importance of interrupt and CPU mode bit hardware. Others complained that the manuscript was written so that it had 3 different chapters for scheduling, for memory management, and so on; they did not like the fact that all the information about a particularly technology (like scheduling) was distributed across multiple chapters. The manuscript was also reviewed by a prospective publisher, but was ultimately rejected because it did not fit within the existing curriculum in an EE or Computer Science department.
The open textbooks in the collection are freely available for anyone to read and use. Please read the material published here, use it, and give me feedback about its weak and strong points. These books are the main aspect of an experimental way of disseminating educational information into markets that are too small for commercial publication.
There are many practical barriers that work against innovation in textbooks in today's undergraduate curriculum [ Nutt, 2006]. Perhaps the most pervasive problem is related to the cost of publishing in small markets. Today it is difficult for a publisher to produce a technical book for an undergraduate computer science course (a relatively small market and high production cost) for less than $100. These costs essentially eliminate the possibility of publication for emerging and evolving materials.
As a result, I have started experimenting with alternative models for making
leading edge, small market instructional materials available to students.
As a means of modest compensation to the author (me, in this case), I have launched a
commercial site that has
lecture notes, examples, short explanations of key concepts, traditional exercises, and
lab exercises. Currently, this site is also experimental (and free), although at some
time in the future I plan to charge a small fee for its use. While the
site focuses on supplementary materials for the free books, most of the
supplementary materials can also be used with any OS course.
I also encourage others to modify and enhance the free books using an open textbook authoring model. If you would like to contribute to these books, please contact me.
Thanks,
Gary Nutt