CSE 120: Principles of Computer Operating Systems

Summer Session I, 2009


A significant element of this class are three programming projects using the (Java version of the) Nachos instructional operating system. Although Java may seem an odd choice, both the (outdated) C version of Nachos and the Java version focus on OS concepts; they are rather equivalent at a high-level.

The Linux machines located in EBU3B B230 or B250 are the recommended platform for your projects.


You may work alone or with a partner. When you have chosen your group, one member should email the instructor and TA (fuyeda@cs, mtelgars@cs) with the names and logins of the members. See the subversion info for more information.

Obtaining Nachos

This Link is to the summer session 2009 distribution of Nachos. Within that archive you will find the various java classes nevessary to run Nachos. Some brief usage instructions:

  • The simplest approach is to run on the B230+ machines as above on on ieng6 (ssh). It is recommended you try this at least once to see the environment the TA (that's me!) does. Each project has a slightly different configuration, so to build for a certain project, enter projN (where N in {1,2,3}) directory and type make. This essentially runs javac to build your classes. After this (without changing directories!), running ../bin/nachos (which is basically a shell wrapper invoking the jvm) will execute nachos.
  • Alternatively, you can mimic this development environment on some reasonably POSIX-y machine. =)
  • The base nachos distribution is just java files, so you can import these into your fancy IDE; note that you may need to go through some extra work to make the project-specific configuration files functional. See below for information on using Eclipse with subversion.

Projects 2+3 additionally need a MIPS cross-compiler to run userspace programs. Those instructions are in the project 2 description.


All projects will be handed in via subversion! What this means is we will create a repository for you, and it will be your responsibility to check in your code at some point before the due date. Here are general instructions for all projects. Most importantly, you must create project groups IMMEDIATELY.


As promised, there are three projects. Project 3 will be available soon! You are advised to start early and get ahead if possible! Each project is weighted equally; each is 10% of your final grade.

milestone Friday 7/10 @ 11:59pm
due Monday 7/13 @ 11:59pm
milestone Wednesday 7/22 @ 11:59pm
due Friday 7/24 @ 11:59pm
milestone 'm' Wednesday 7/29 @ 11:59pm
milestone 'h' Friday 7/31 @ 11:59pm
due Monday 8/3 @ 11:59pm

Additional Resources

Gnomic Bromides

  • Lib.assertTrue() is your new best friend:
    • For entry from code which you DID write, it helps you keep track of invariants you established.
    • For entry from code which you DID NOT write, it helps you verify that you understand the nachos environment.
    Note that these can be compiled out so there is essentially no performance hit.
  • Look at the javadoc for the functions you use, and related functions. It has lots of nachos invariants and secret tips. Reading other nachos code is useful too, to see what tools are provided to you (lots!).
  • When hacking fails, try pencil and paper.
  • Prefer parsimony.