143A teaches the fundamentals of operating systems. You will study, in detail, virtual memory, kernel and user mode, system calls, threads, context switches, interrupts, interprocess communication, coordination of concurrent activities, and the interface between software and hardware. Most importantly, you will study the interactions between these concepts, and how to manage the complexity introduced by the interactions.

To master the concepts, 143A is organized in as a series of lectures, and homeworks. The lectures (and the book readings) familiarize you with the main concepts. The homrworks force you to understand the concepts at a deep level.

The lectures are based on xv6 (x86 version 6), which is a modern re-implementation of one of the early UNIX operating systems, specifically Unix Version 6 which was developed in the 1970s, on the modern hardware. xv6 is only 9,000 lines of C code, but it can run real processes, and perform many functions of a traditional operating system, e.g., Windows, Linux, and Mac OS. Due to its small size, it is possible to read the source code and understand the entire operating system. Moreover, xv6 is accompanied by a book describing its architecture (and a printout of its source code). Homework assignments will help you to deepen the understanding of the principles and internal organization of a simple, but real operating system.

You may wonder why we are studying an operating system that resembles Unix v6 instead of the latest and greatest version of Linux, Windows, or BSD Unix. xv6 is big enough to illustrate the basic design and implementation ideas in operating systems. On the other hand, xv6 is far smaller than any modern production operating systems, and correspondingly easier to understand. xv6 has a structure similar to many modern operating systems; once you've explored xv6 you will find that much is familiar inside kernels such as Linux.

Xv6 is implemented in C, so you're expected to be familiar with the C programming language.

Xv6 runs in the QEMU simulator and on bare-metal. You're expected to be familiar with the basics of Linux environment.

The class is based on two books that are freely available from the authors:

Intel 64 and IA-32 Architectures Software Developer's Manual (Combined volumes)

The C Programming Language by Brian Kernighan and Dennis Ritchie (the first edition is freely available, the second edition is available from all major bookstores).

PC Assembly Language, Paul A. Carter, November 2003.

All documents used in this class.

Updated: September, 2021