CompSci 143A: Principles of Operating System

Instructor: Ardalan Amiri Sani

Pintos Project Guide

The course project is based on Pintos. Pintos is a teaching operating system for 80x86. It is simple and small (compared to Linux). On the other hand, it is realistic enough to help you understand core OS concepts in depth. It supports kernel threads, virtual memory, user programs, and file system. But its original implementations are premature or incomplete. Through the projects, you will be strengthening some of these areas of Pintos to make it complete.

Since Pintos is designed for 80x86 architecture, you could run theoretically the OS that you build on a regular IBM-compatible PC! Of course, during development, running Pintos on bare metal machines each time could be time consuming. Instead, you will run the projects in an x86 emulator, in particular, Bochs or QEMU. Pintos has also been tested with VMWare Player.

We will start with a pre-project and then do one substantial project. Note that in addition to the pre-project, Pintos has 4 other substantial projects. However, in this class, you will only do one of those substantial projects as the project is only 10% of your grade. Pintos projects are known to be hard. They have a reputation of taking a lot of time. But they are also as rewarding as they are challenging. Moreover, since you are only required to do one of these substantial projects (in addition to the pre-project), we don't anticipate the project to be very challenging.

Project Weight Due
Lab 0: Getting Real (pre-project) 20/100 02/02/2024 11:59 PM
Lab 1: Threads 80/100 03/15/2024 11:59 PM

Groups

Lab 0 is an individual project. From Lab 1 and onwards, you can work in groups of 1-3 people. We will overlap Lab 0 with the stage of forming groups. So start talking with your classmates around once the course begins!


Getting Started

To get started, you can get a copy of the Pintos source code distribution.

git clone https://github.com/trusslab/pintos.git

or

wget https://www.ics.uci.edu/~ardalan/courses/os/pintos.tar.gz
Warning!
The Pintos source code above has some customizations in it compared to the official Pintos distribution. Therefore, you should be only getting the source code from the above channels. In other words, do not download from other websites.

Before you can compile and develop on Pintos, you will need to have a machine with the appropriate environment setup. We will be instructing you on how to set up the Pintos development environment on your school Openlab accounts. We will be test your code on these school machines. We have also included instructions for setting up the Pintos development environment on your own machine (e.g., Ubuntu, Fedora, Mac OS). You can find the instructions here: project setup guide


Documentation


Grading

We will grade your assignments based on test results (60% of your grade) as well as design quality (40% of your grade). Note that the testing grades are fully automated. So please turn in working code or there is no credit. The grading policy page lists detailed information about how grading is done.


Submission

We will be using Gradescope for collecting the assignment submissions. To submit, generate a tarball of your source tree and upload in the corresponding Gradescope assignment. We only need the source files. Therefore, do not include the binaries. You can create a tarball using this command:

 
$ tar -zcvf pintos.tar.gz pintos

Late Policies

Late submissions will receive penalties as follows: you lose 10% of the submission grade for every late hour.

Cheating and Collaboration

Warning!
This class has zero tolerance for cheating. We will run tools to check your submission against a comprehensive database of solutions including past and present submissions for potential cheating. The consequences are very high. Please read UCI's academic integrity information for students.

The basic policies are:

On the other hand, we encourage collaboration in the following form:

Credit

Most of the content of the project webpage has been borrowed from JHU's CS 318/418/618 course by Ryan Huang. The webpage also contains content from the Stanford's CS 140.