CS 416: Operating System Design
Fall 2001 Project Overview

We believe that the best way to learn about operating systems is to build one yourself.  Thus, you will be building most parts of a small operating system.  To ease your task, we will give you a bare-bones but functional operating system called Nachos.  Your task is to extend Nachos's functionality and improve its performance.

The project has three parts: synchronization and system calls, virtual memory and multiprogramming, and networking.  Unfortunately, because of time constraints, we will skip a major part of building an operating system: implementing a file system.

WARNING: the three parts of the project are largely inter-dependent.  Thus, if the early parts do not work, you will have a hard time completing the later parts.  So, it's critical to start early and work hard, particularly the early parts!

Nachos actually has two parts: (a) an emulator of a MIPS-like workstation, and (b) the operating system.  Thus, your operating system is not running directly on the machines that you will be using.  Rather, it's running on (and is managing) the emulator.  (Actually, this is not an entirely accurate description but it's good enough for now.)  You will be modifying the operating system but will NOT be allowed to modify the emulator.  After all, you can't change the hardware when you are writing an operating system for it.

The version of Nachos that you will be working on is written in Java so you won't have to learn a new language for the majority of the programming.  However, the user programs that you will write to test Nachos must be written in C.  So, you will have to learn a little bit about programming in C.

Start by reading this walkthrough carefully.  More information is available at the following places:

Hints for success with this project: