These notes are provided for those individuals who need to gain a more complete understanding
of operating systems than is provided by a typical undergraduate course. The notes are currently
a “work in progress” and suggestions to the author are welcome.
Background and Prerequisites
All undergraduate computer science curriculum recommendations include a course on operating
systems. This required course is not one in which the user is taught how to enter commands,
create and list directories, and install and maintain the operating system. These are certainly
appropriate skills, but don’t provide the understanding of operating systems expected by the
designers of computer science curricula.
Instead, the undergraduate operating systems course that is an appropriate prerequisite for this
material covers the purposes of an operating system, the variety of designs possible, and the
traditional algorithms used in an operating system implementation. Two topics covered in some
depth in that course are concurrency and mutual exclusion. These topics are not exclusively part
of the operating system domain, but the undergraduate operating systems course is usually the
first one in which students are exposed to these topics.
There is a wealth of information to be covered in the undergraduate course, and it is rare that
students have many opportunities to engage in significant implementation tasks (except for
small “toy” projects). Indeed, it is usually the case that there is insufficient time in the course to
cover all of the background material.
There are two parts to the material in these notes. Although they are presented sequentially, the
material in the first part will prove beneficial later.
Design and Implementation of the Tempo Operating System
We will first examine in detail the design and implementation of an operating system called
Tempo. This is not a “toy” operating system of the kind that is usually provided for use with
undergraduate operating system textbooks (with some exceptions). Instead, it is a complete
system that can boot and run on most typical x86-based personal computers.
There are numerous goals we hope to achieve by studying this system:
Better understanding of the purpose of system calls: By examining the detail of how
system resources and services are provided to application programs, we can better
appreciate the facilities provided by those operating systems we typically use (e.g.
Microsoft Windows and UNIX varieties).
Advanced Operating Systems — Design, Implementation, and Real Time