Introduction

We will be using C for projects, because that is the language used to implement operating systems. The first project will be done individually, and following projects will be done in groups.

There will be four projects. For each one, you will submit code and a make file for compiling the code. We will have a demo day where we will meet with all of you and test your code. In addition, you will be responsible for turning in a writeup a day after the coded is due.

Projects may be done on any machine you wish. However, we will test them on the machines in the labs, so you must make sure the execute correctly on those machines.

You will submit projects by coping them to a handin directory under the course directory. Projects will all be due at 11 pm on a Thursday, and we will disable write permissions to the directory at that time to prevent late submissions.

Project Summaries

Project 1: Process control in the Unix Shell
Project 2: Multi-threading and synchronization
Project 3: Page replacement and Scheduling
Project 4: File systems

Supplemental Resources

  • If you are interested in mastering the Unix programming environment, the absolute bible (or so I've heard) is Advanced Programming in the UNIX Environment by the late, great W. Richard Stevens.
  • Here is a short, free, and incomplete overview of the C programming environment by Andrea Arpaci-Dusseau as a PDF.
  • It would also be useful to figure out how to use the debugger, gdb. Here is a link to a short tutorial -- there are others on the web too. Learning how to use such tools is a good idea.