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
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
The basic policies are:
- Never share code or text on the project. That also means do not make your solutions public on the Internet, e.g., GitHub public repo.
- Never use someone else's code or text in your solutions.
- Never consult project code or text found on the Internet.
- You may read but not copy Linux or BSD source code. But you must cite any code that inspired your code. As long as you cite what you used, it's not cheating. In the worst case, we deduct points if it undermines the assignment.
On the other hand, we encourage collaboration in the following form:
- Share ideas (but do not give code to others).
- Explain your code to someone to see if they know why it does not work. But they're not allowed to write code for you. Just exchange ideas.
- Help someone else debug if they're stuck. But you're not allowed to write code for them. Just exchange ideas.
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.