Princeton University
Computer Science Department

Computer Science 318
Operating Systems

Jaswinder Pal Singh

Fall 2015


Directory
General Information | Schedule | Projects | Policies

Projects

We believe that the only way to master the knowledge of operating systems is to build a real operating system kernel. The six projects in this course are designed to do exactly that. At the end of the class, you will have a small, real operating system kernel. This set of projects were co-developed with colleagues at University of Tromsø in Norway and have been used in other institutions such as Yale.

Students will be paired as working groups for the first five projects. You will be regrouped after three projects in order to give you a chance to work with another person for the next two projects. You will be working alone on the last project.

Each project has two grading phases: design review and final submission. The goal of design review is to help you start early and our TAs can point out potential mistakes as early as possible. We want to make sure that you can finish the project before it's due so you have time to catch and resolve design errors and avoid frustrating last minute debugging. We don't mind mistakes at this stage; we encourage them. For design review, you should have seriously thought about all aspects of the project so you have a clear idea of what you are going to do. It is a good idea to have started some coding at this stage and for you to have investigated what tools will be necessary and have them working. When you meet with one of us TAs, please have prepared some pseudocode, a flowchart, or whatever else you think appropriate in order to demonstrate your plans. Depending on the project, we might also want you to provide running code, or answer questions. Your design review will be graded from 0 to 5 points. To conduct a graded design review, each working group or student will meet with a TA for 10 minutes no later than five days before the project is due.

The final submission will be done online, following the specific instructions in each project description. You should include a small README file with your project submission. You should concisely describe your design and implementation. Also, you need to describe what parts work and what parts don't; and how to compile and run your program (if you are not using the Makefile we provided). You don't have to repeat anything you presented in the design review. The TA who is in charge of the project will grade the project without correcting your code. It is your responsibility to figure out how to correct your code by comparing your implementations with the released solutions.

Normally, we will give the same grade to both students in a working group. If one of the students feel that the other student did more work and deserve more credits, please inform the TA who is in charge of the project by e-mail.

You will be using the Linux PCs in the 010 lab in Friend Center (so called Fishbowl). All the projects will be done on a USB flash memory stick or using Bochs, so please do not write your kernel to the hard disk. The lab in Friend 010 is reserved for COS 318 students during the whole semester. When working on the projects, it is helpful to test your implementation using a simulator such as Bochs or Qemu during the development phase. After your projects run successfully on a simulator, you should test it on a real PC. Please share test machines if the lab is full.

Project 1: Bootloader

Monday, 9/21 - 7:30pm--8:20pm Precept 1 in CS 105
Monday, 9/28 - 1:30pm--evening Design review, Friend 010
Sunday, 10/04 at 11:55pm Project due

Project 2: Non-preemptive kernel

Monday, 10/05 - 7:30pm--8:20pm Precept 2 in CS 105
Monday, 10/12 - 1:30pm--evening Design review
Tuesday, 10/20 at 11:55pm Project due

Project 3: Preemptive Scheduler

Wednesday, 10/21 - 7:30pm--8:20pm Precept 3a in CS 105
Monday, 10/26 - 7:30pm--8:20pm Precept 3b in CS 105
Thursday, 10/29 - 9:30am--5:00pm Design review
Tuesday, 11/10 Project due

Project 4: Inter-Process Communication and Process Management

Wednesday, 11/11 - 7:30pm--8:20pm Precept 4a in CS 104 (Large Auditorium)
Monday, 11/16 - 7:30pm--8:20pm Precept 4b in CS 105
Thursday, 11/19 - 9:30am--5:00pm Design review
Tuesday, 11/24 Project due

Project 5: Virtual Memory

Monday, 11/30 - 7:30pm--8:20pm Precept 5 in CS 105
Monday, 12/07 - 1:30pm--7:00pm Design review
Wednesday, 12/16 Project due

Project 6: File System

Monday, 12/14 - 7:30pm--8:20pm Precept in CS 105
Tuesday, 1/12 (Dean's date) - 5pm Project due

Project Development Environments

You can either develop your projects in our lab or on your personal computers or laptops.

PCs in 010 Friend Center

You can use the Linux PCs in the 010 lab in Friend Center (so called Fishbowl). All the projects in this course should be placed on a USB flash memory stick and perform final tests on the PCs in the Fishbowl lab (rooms 011 and 012). The lab in Friend 010 is reserved for COS 318 students during the whole semester. When working on the projects, it is helpful to test your implementation using Bochs simulator during the development phase. After your projects run successfully on a simulator, you should test it on a PC in this lab before submitting to the dropbox.

The lab may be crowded at times. You can always use ssh to remotely access these machines. Please share these machines for final tests.

VirtualBox on Windows or Mac PCs

If you have a PC or a laptop that uses x86 CPU and your machine runs either Microsoft Windows and Mac OS, you can use the VirtualBox environment to develop your projects with the Bochs simulator and debugger.

We have created a VirtualBox virtual machine image of the Linux OS in the fishbowl lab for you. The file is a bit smaller than 2GB. You may want to connect your machine to a good access point on the campus network to reduce the download time. You also want to make sure your machine has enough storage space before downloading it. You also need some disk storage extra space to run VirtualBox. You must test the final results of your projects on a PC in the Fishbowl lab, by booting from your USB memory stick.

Instructions:
  1. Download VirtualBox. VirtualBox works for both Windows and Mac OS.
  2. Download the provided virtual machine image, and unzip it.
  3. Import the new virtual machine by going to File->Import Appliance (on a Mac, ⌘I). You may want to change the configuration of some of the features before running the VM, such as setting the quota for memory and video memory. If your PC runs a 32-bit OS, you may need to enable Intel VT-x and/or AMD-V virtualization hardware extensions in BIOS.
  4. Log in to the system by username: "student", password: "cos318".
  5. Get the start code to work. You can use bochs and bochsdbg the same as in the fishbowl machines.
    [student@labpc-virtual your_code_directory] $ bochs
    [student@labpc-virtual your_code_directory] $ ~/318/bin/bochsdbg