CSE 120 Nachos Project 1: Install

Fall 2001

Due: Nothing to turn in, but most useful if you do this before Thursday, 10/4.

  1. [0 pts] Download or copy the nachos distribution, and unpack it using gunzip and tar (see Distributions in the class project guide):
    % gunzip -c -d cse120-nachos.tar.gz | tar xvf -

    Build a nachos executable using the gmake command in the code directory:

    % cd nachos-3.4/code
    % gmake

    This will create versions of the nachos executable in various subdirectories. We will be using the threads directory for the upcoming project 1, so let's use that nachos exectuable. Run it without any arguments -- it should produce output similar to the following:

    [cs120f@sdcc7]$ cd threads
    [cs120f@sdcc7]$ ./nachos
    *** thread 0 looped 0 times
    *** thread 1 looped 0 times
    *** thread 0 looped 1 times
    *** thread 1 looped 1 times
    *** thread 0 looped 2 times
    *** thread 1 looped 2 times
    *** thread 0 looped 3 times
    *** thread 1 looped 3 times
    *** thread 0 looped 4 times
    *** thread 1 looped 4 times
    No threads ready or runnable, and no pending interrupts.
    Assuming the program completed.
    Machine halting!
    Ticks: total 130, idle 0, system 130, user 0
    Disk I/O: reads 0, writes 0
    Console I/O: reads 0, writes 0
    Paging: faults 0
    Network I/O: packets received 0, sent 0
    Cleaning up...

    See Installing and Building Nachos from the Duke equivalent of this course for notes on building nachos executables (ignore the first two paragraphs and the references to the different projects in the third paragraph).

  2. Nachos is like any other program in that it starts by running the main() procedure. In Nachos, main() is in threads/main.cc. If you examine threads/main.cc, you will see that you are executing the ThreadTest function (in threadtest.cc). It is the printf in the SimpleTest class that produced the initial output when you ran the nachos executable. ThreadTest is a simple example of a concurrent program. In this case there are two independent threads of control executing "at the same time" and accessing the same data. Your first goal is to understand the thread primitives used by this program, and to do some experiments to help you understand what really happens with multiple threads at runtime. To understand the execution path, trace through the code for the simple test case. See the notes in Tracing and Debugging Nachos Programs from the Duke equivalent of this course for some tips on how to do this.

  3. ThreadTest in threadtest.cc is an example of a test case for exercising the Nachos system. When you work on project 1, you will need to extend threadtest.cc to test your changes to the Nachos system.

    Submitting The Project

    You do not have to turn anything in for project 0.