Harvard University

Syrah Home

Meeting Schedule

Internal Pages

Contact Us


OS/161 is a simplified operating system we use for teaching the undergraduate operating systems class. It includes a standalone kernel and a simple userland, all written in C. It runs on a machine simulator, System/161, that offers simplified but still realistic hardware devices. (Neither OS/161 nor System/161 is in any way affiliated with IBM.)

Before OS/161 was written, we used Nachos in our class. As a result, the assignments we give are rather similar, and OS/161 can probably be used in similar class structures to Nachos. However, OS/161 itself has no relationship to Nachos; it was written from scratch with a different set of goals in mind.

Current version of OS/161: 1.11. (released September 13, 2005)
Current version of System/161: 1.14. (released June 27, 2008)

OS/161 Features

Architectural features:
  • BSD-like source tree and kernel build environment
  • Portable kernel split into machine-dependent and machine-independent portions
  • Extensible device framework akin to that found in NetBSD
  • VFS layer to allow multiple file system types
Code supplied:
  • MIPS port (other ports under development)
  • Device driver set for System/161
  • Pass-through file system device to access host system's files
  • Absolutely minimal virtual memory system
  • Simple skeleton file system
  • One sample system call implementation
  • Simple round-robin scheduler
  • In-kernel threads package
  • Semaphore implementation
Code left for students:
  • Lock and condition-variable implementation
  • Process support and system call layer
  • More interesting schedulers
  • Virtual memory system
  • Full-featured file system
  • Network stack and any/all network-related code
  • Other more advanced features (see our Assignment 5 for some examples/suggestions).

System/161 features

  • MIPS r2000/r3000 simulator, complete (including MMU) except for cache effects
  • Debugging support via remote gdb into the simulator
  • Transparent kernel profiling
  • Event tracing, as far down as the level of individual machine instructions
  • Performance monitoring via an arbitrary external process
  • Network interconnection of multiple simulators via hub161
  • Simple but reasonably realistic bus and devices, with up to 31 configurable "expansion slots"

Read the paper from SIGCSE 2002.

Download the code.

Mailing lists

There are now three mailing lists for users of OS/161 and System/161:

  • os161-announce, a read-only list for announcements of new versions and significant bugs;
  • os161-users, an open list for discussion of the OS/161 base system, System/161, and related issues, but not solutions to the programming assignments;
  • and os161-instructors, a closed list for people teaching using OS/161 to discuss assignments, solutions, grading, and other related issues.


OS/161 (and System/161) were written by David A. Holland, with contributions from

  • Amos Blackman
  • Alexandra Fedorova
  • Ada T. Lim
  • Georgi Matev
  • Jay Moorthi
  • Geoffrey Werner-Allen