Home CS439

CS439 Fall 2018 Project Information


There will be five projects for this class, each emphasizing a different set of important skills. You will begin by writing a shell. Your other projects will exercise your knowledge of threads, user programs, virtual memory, and file systems.

You will work on all of these projects in teams of two or more (as specified in each project). You are responsible for forming a team with someone with whom you will work well and resolving any problems that arise during the partnership is your responsibility. If you are unable to resolve a serious problem, the instructor will arbitrate.

Your team must follow a pair programming methodology. In particular, both members (or, for the later projects, all members) of the team must work together to understand the problem, design your solution, enter code, and test your solution. For code entry, one member should type while the other(s) observes, detects tactical coding defects, and thinks strategically about the overall design. These roles must be frequently swapped. In general, studies [1, 2] suggest that pair programming works well. For instance:
  1. counter-intuitively two programmers working together at one keyboard produce about as much functionality as two programmers working apart at two keyboards,
  2. the code produced in this manner is of higher quality than individually programmed code, and
  3. in an educational setting both team members learn more than they would separately.
Note that for these projects, these advantages of pair (or group) programming over disjoint work are especially likely to apply: it is vital that all team members understand all aspects of the implementation. Also be aware that the exams will have questions that required intimate knowledge of the projects.

The projects will be challenging. We hope they will also be very satisfying. The instructor and TAs will work to help you succeed. Although the scope of the projects is ambitious, we will provide a framework to guide your efforts and to ensure that you don't have to spend a lot of time building uninteresting "glue" code. Our hope and expectation is that everyone that works hard on these projects will succeed. If you have other ideas for improving the project, please let us know. Good luck!

  • 2018-09-22: We've created a debugging guide to help you better help yourselves with problems in your code and help us better help you. Please use it and, in particular, answer the first five questions as best you can before coming to office hours!

Please review the Grading Criteria. All code must follow the C Style Guide.

Turning in your code? Please look over the Turnin Checklist!


Required Group Size
Group Registration Deadline
Due (Code at 5:59p, Design at 11:59p)
Relative Weight
Grades Released (Estimate)
Project 0: A Mini Shell
Become familiar with shells, fork(), exec(), and signals 2 Sep 12 Sep 21 10
Oct 3
Project 1: Threads
Understanding interrupts, thread state, and thread scheduling 2-3 Sep 26 Oct 5 20
Oct 24
Project 2: User Programs
Understanding how user programs interact with the OS 2-4 Oct 10 Oct 15/26 20
Oct 17/Nov 16
Project 3: Virtual Memory
Understanding paging, page replacement, and other virtual memory concepts 2-4 Oct 31 Nov 2/Nov 16 25
Nov 7/Dec 5
Project 4: File Systems
Understanding file systems, including directory structure, file growth, and multithreading 2-4 Nov 19 Dec 7 (No slip days!) 25
Dec 17

A note about grading:

Project grades are reported in two columns on Canvas: Correctness and Design. Please add the two grades together to find your total grade for the project. Correctness grades are calculated by script and will often be released during the week following the project. Your design, however, is graded painstakingly by hand, as we work to evaluate your design and understand both your design document answers and how your answers reflect your code. Grading each group's design and the related documents takes approximately an hour and so, given the size of the class, design grades are released later. On this page, I've included an estimated date for us to have released your complete project grade. We will do everything we can to hit that time line, but unexpected situations do occur. We ask for your patience as we do our best to grade your projects fairly and accurately the first time.

Once the grades are released, if you have questions about your grade, you should consult the Piazza post for instructions about which of us to contact. If you would like to request a regrade, you must do so within one week of the grades being released.