CPS 510 Operating Systems
home calendar topics work resources
Quick links:

Thread Library

This lab is two one-week labs: p1t and p1s. You register once, for p1t "Thread Library", and then submit the same repo for two different deadlines. The AG tests are the same, so you will pass only a subset of the tests in your p1t submissions. The name "p1" is for historical reasons.

Code. Use your Linux docker. The code is in C++. It is wise to avoid new (C++11) features. AG support for these features is uncertain.

Spec. Read the Threads lab spec carefully, all the way through. You must follow the spec very closely to pass the AG tests. The spec describes all requirements for p1t, p1s, and your thread library test suite to be graded with p1s.

p1t. For p1t, you are expected to pass specific AG tests for creating and scheduling threads. The functionality is similar to the Week 3 activity on user-mode context switching with swapcontext. Some of that code may be useful.

p1s. For p1s, you add support for Mesa monitors to your thread library and complete your test suite.

Concurrent Deli

Heap manager

The heap manager lab is due Monday, August 31. You may see this lab called "p0". It asks you to write C code, maybe 200-300 lines.

JOS Project

This is the first project that will get you right into building an OS from scratch (with help).
  1. First setup docker desktop as described here
  2. Git clone this repo into a host folder shared with your container.
  3. The starting code is in the jos_student subdirectory. Follow the instructions in the README.md

Policies for the Labs

About the autograder (AG)

The autograder (AG) is a server that checks and grades your work and maintains the group database. You will hate the AG at first, but eventually your hatred will give way to grudging appreciation. The good news is that you can submit as many times as you want: the score you earn is your highest score before deadline. Here are some things to know:

Using other people's code

We all know that there are various fragments of code available on the web that are relevant to the assignments. You are not prohibited from looking at material on the web. We believe that we have provided you with enough to start with that it will not benefit you to import source code from anywhere else. The point of the lab is to learn, and we want to make it easy for you to learn!

When you hand in the lab, we expect that your code is your own. If you incorporate source code from some external source, you must add a comment indicating the imported code and the source of that code. You must note all sources of imported code in your submitted README file. You should be able to explain any part of your code in detail, and why you chose to do it that way and not some other way. If you encounter code from some external source that diminishes your opportunity to learn by doing the lab, please inform us (we may not be aware of it).

Academic dishonesty. Be sure that you are familiar with the policy on collaboration and other policies. In particular, sharing of code among groups is not allowable. Do not obtain code from previous semesters. Take care to acknowledge any sources of code or assistance in your README.


About C. The first labs ask you to program in the C programming language. We will discuss some aspects of C in lectures and recitations, and we will provide relevant examples, but we do not teach C. If C is unfamiliar to you, you will need to read up from some other sources, or spend more time with the sample programs. You should take the time to look through some of the supporting materials on the resources page. We find that the students who struggle most have not taken the time to read up, and as a result they have found themselves spending more time debugging.

About Unix. To do the labs you will need a suitable Unix development environment. If you are a CompSci or Engineering major then you have access to Unix systems in those departments (e.g., login.cs.duke.edu). We can create term accounts to get access to Unix systems in the CompSci department if you need it. Duke also runs a virtual machine service VCM that can give you a private Unix system for your use (select Ubuntu 18.04). You are welcome to use your own machine if it provides a suitable Unix development environment. Docker Desktop is a good way to get an Ubuntu Unix environment on MacOS or on Windows: see these instructions.

Once you have a command-line shell on a suitable system. You can compile C code with the gcc compiler, and/or build programs with the make utility. You can use the man command to learn about any C builtin library API and/or system call API or command. E.g., try man malloc or man strcpy.