CS372 Spring 2011 Project Information


There will be four projects for this class, each emphasizing a different set of important skills. First, you will learn how to write C programs. Second, you will learn how threads work by writing a user-level threads library. Third, you will learn how to write correct and robust multi-threaded code. Fourth, you will write a reliable or high performance storage system.
You will work on all but the first of these projects in teams of two. 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 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 observes, detects tactical coding defects, and thinks strategically about the overall design. These roles must be frequently swapped. You might also want to consider the XP strategy of designing your tests before you design your solutions. In general, studies [1, 2] suggest that pair programming works well: (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 this project, these advantages of pair programming over disjoint work are especially likely to apply: it is vital that both team members understand all aspects of the implementation. Also be aware that the exams will have questions that required intimate knowledge of the project.

The projects will be challenging. We hope they will be very satisfying. The instructor and TAs will work to help you succeed on these challenging projects. 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!
Note well:


Relative Weight
Project 1: 'C' basics
Become familiar with the 'C' language Jan 28 10
Project 2: User Level Threads
Implement a user-level threads package. Feb 11 25
Project 3: Synchronization
Practice writing correct and robust multi-threaded code
Feb 25
Project 4: Reliable file system Understand transactions and persistent storage
Phase 1: Apr 22 (tentative)
Phase 2: May 6