Project 0: Jump Start

Fall 2024

Due: Friday, October 4, at 11:59pm

Note: This is an individual assignment. Each student must submit a copy of their session's output.

Nachos is a Java application written to perform the functions of a real operating system. The details of how the operating system implements concepts such as threading, virtual memory, and processes are exposed to you. All of the source code implementing the Nachos operating system is included with the distribution. However, this baseline implementation does not implement some very useful features. During the quarter, your job will be to complete the missing portions of the operating system and use the functionality in your projects.

In this pre-project you will familiarize yourself with compiling and running Nachos. The tutorial below should not take that much time; if you seem to be having serious problems, check Piazza to see if others have reported the same problem and post a note if not.

Every student will do project 0 individually. When we start project 1, you will be working in groups and we will provide each group with a github repo initialized with a fresh nachos source distribution. As a result, you can discard the nachos source you used for project 0 once we start project 1. It also means that you can experiment with the project 0 source however you like — no changes you make to the source in project 0 will propage to the later projects.

Tasks

  1. Whether you are working on a desktop in the lab or your laptop, login to ieng6 using an ssh client. Login using your normal UCSD student account, and be sure to prep cs120fa24 when you login. (Some students, such as concurrent enrollment students, may have a cs120**** course-specific account, which should automatically prep.) If you run into any issues running any of these commands, or if your enrollment is still pending, see the troubleshooting issues page.
    $ ssh account@ieng6.ucsd.edu
    $ prep cs120fa24
    

  2. Download the Nachos distribution into your home directory on ieng6, and then unpack it:
    $ wget 'https://cseweb.ucsd.edu/classes/fa24/cse120-a/projects/nachos-cse120-fa24.tar.gz'
    $ tar xvfz nachos-cse120-fa24.tar.gz
    
    Also take some time to read the instructions for all projects on the main projects page.

  3. The Nachos distribution is organized into different directories. Some directories store the Java source code files (e.g., machine, threads, userprog, etc.). Other directories are build directories and do not have any source code files in them. As the next step, go into the proj0 build directory and compile Nachos for this project:
    $ cd nachos/proj0
    $ make
    
    You can safely ignore any compiler warnings. Then run the nachos program:
    $ nachos
    
    The nachos command is a script that invokes the Java VM to run Nachos. It should already be in your path, and you can also find the script in bin/nachos. Running the program causes the methods of nachos.threads.ThreadedKernel to be called in the order listed in threads/ThreadedKernel.java:

    1. The ThreadedKernel constructor is invoked to create the Nachos kernel.
    2. This kernel is initialized with initialize().
    3. This kernel is tested with selfTest().
    4. This kernel is finally "run" with run(). For now, run() does nothing, since our kernel is not yet able to run user programs.

    Your session should resemble the following (but does not have be exactly the same):

    $ cd nachos/proj0
    $ make
    $ nachos (equivalent to ../bin/nachos)
    nachos 5.0j initializing...
     config
     interrupt
     timer
     user-check
     grader
    
    *** 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
    Machine halting!
    
    Ticks: total 2130, kernel 2130, user 0
    Disk I/O: reads 0, writes 0
    Console I/O: reads 0, writes 0
    Paging: page faults 0, TLB misses 0
    Swap: COFF reads 0, swap reads 0, swap writes 0, swap skips 0
    Network I/O: received 0, sent 0
    
  4. Now go into the source directories and trace the execution path by hand to find where the output is coming from (i.e., which classes are generating those output statements). Your job will be simple for this initial project, simply modifying a print statement. Specifically, change the Nachos print statement:

    *** thread n looped m times
    
    to
    *** awesome thread n looped m times
    

    And that's it. There are no tricks or edge cases, you just need to follow the instructions.

Code Submission

For this project, each student must submit their project using a script we provide. Go to your top-level nachos directory (not the nachos/proj0/nachos subdirectory) and run the submit-proj0 script:

$ cd ..  [assuming still in nachos/proj0 dir, cd up to the nachos/ dir]
$ pwd    [make sure we're in the nachos/ dir]
/home/linux/ieng6/<account>/.../nachos
$ ls     [doubly make sure we're in the nachos/ dir]
Makefile  ag   machine  proj0  proj2  security  threads   vm
README    bin  network  proj1  proj3  test      userprog
$ submit-proj0
$ ls -l proj0.tar.gz
-rw-r----- 1 account group NNN Wed Oct  * 10:23:51 202* proj0.tar.gz    

If you get a "command not found" error when running submit-proj0, make sure you have run prep and also see the troubleshooting issues page.

The output of submit-proj0 should resemble the following. The output will not be exactly the same (e.g., file sizes will differ), and that's ok!

Source file information:
   source file name:   proj0.tar.gz
   source file date:   Wed Oct  * 10:23:51 202*
   source file size:   NNN bytes 
Copying to /home/linux/ieng6/cs120*/turnin.dest/account 
............................................
Done.
Total bytes written: NNN
Please check to be sure that's reasonable.

The "check to be sure that's reasonable" comment just means to verify that the number of bytes copied (bytes written) NNN is the same as the size of your proj0.tar.gz file (source file size). If it is, then everything worked and you have successfully turned in project 0. There are no tricks or edge cases to test for, you just need to follow the instructions.

You will have until the posted due date to submit the project. You can submit as many times as you like. The last version submitted before the due date will be the one accepted. We will grade all submissions after the deadline, and will post grades to canvas when we grade them.

Troubleshooting Account Issues

If you encounter problems with your account (command not found, disk quota exceeded, ssh fails, etc.), see these troubleshooting tips.