Home | CS439 |
The projects will be challenging, and 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.
Please note that while we hope you are able to get 100% of the given
test cases working, that is not the largest goal of the projects in this course.
We hope that you will learn how to properly design code, how to communicate
about code, how to debug systems code, resilience, tenacity, and confidence
in your skills, in addtion to an ability to implement abstract concepts into
concrete designs in code.
For most projects, you will be welcome to form your own group with someone(s) with whom you will work well. Your group must follow a pair programming methodology. In particular, all members of the team should work together to understand the problem, design the solution, enter code, and test the 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.
We follow this methodology because studies [1,
2]
suggest that pair programming works well. For instance:
To facilitate group programming, you will be asked to submit a group reflection document at the end of each week a project is assigned, and a individual reflection document at the end of each project. These documents will help you evaluate the process of project creation, including what your group is doing well and what it is not. We hope that your group will be able to successfully navigate group dynamics even under deadline pressure. However, when problems arise, we encourage you to first try to reach a resolution through a group discussion, but we are here to assist should that fail.
For more information about pair and group programming in this class, please see
the Pair and Group Programming Standards and
Requirements page of this website.
The grade for project grade reflects the design of that project, the documentation and formatting of the code, whether the project successfully runs our test cases, and whether your group is able to clearly and succinctly communicate about the design of the project.
We will evaluate your project on two equally-weighted categories:
Once the grades are released, if you believe there is a discrepancy between the rubric and your grade, you should fill out the grade discrepancy form. You must do so within 48 hours of the grades being released. Exact deadlines will be posted to the class discussion board.
For more detailed information about the grading criteria, please visit the Grading Criteria page of this website. For more detailed information about formatting expectations, please see the C Style Guide page of this website.
For additional project resources, including C, Linux, remote collaboration, and debugging guides, please see our resources page.
Projects |
Objectives |
Weight |
Required Group Size |
Group Registration Deadline |
Due |
Grades Released (Estimate) |
Project 0: UTCS Shell |
Become familiar with shells, fork(),
exec(), and other systems concepts Detailed Rubric |
1 | 2* | N/A | Sep 13 | Sep 25 |
Project 1: Threads |
Understanding interrupts,
thread state, and thread scheduling Detailed Rubric |
1 | 2-3 | Sep 16 | Sep 27 | Oct 10 |
Project 2: User Programs |
Understanding how user programs
interact with the OS Detailed Rubric |
1.5 | 2-4 | Sep 30 | Oct 7 (stack)/Oct 18 (code)/Oct 21 (code reviews begin) | Oct 9 (stack)/Oct 28 (project) |
Project 3: Virtual Memory |
Understanding paging, page replacement,
and other virtual memory concepts Detailed Rubric |
2 | 2-4 | Oct 21 | Oct 25 (data structures + design)/Nov 8 (project) | Dec 4 Oct 29 (data structures + design)/ (project) |
Project 4: File Systems |
Understanding file systems, including directory structure, file growth, and multithreading Detailed Rubric |
2 | 2-4 | Nov 11 | Dec 6 Note that slip days are not allowed on this project. |
Dec 17 |