Home CS439



CS439 Project Information

Fall 2024

Overview

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.

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.

Group Programming Requirements

You will work on all of these projects in groups of two or more---the number of group members will be specified per project.

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:

  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 group programming over disjoint work are especially likely to apply: the largest difficulty is in designing a solution. Please note that 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.

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.

Project Evaluation

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:

Projects will be evaluated on our 5-point scale and then grades will be scaled by the appropriate weight for the proejct. Exact rubrics for each project will be posted with the project. Grades will be reported in two columns on Canvas: 1) Test Cases and 2) Design and Documentation. Test Cases 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 meet 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 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.

Quick Links

Pages that describe what you >must do for full credit: Pages that have resources to help you:

Have fun!

Announcements:

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

Schedule

Dec 4
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) 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
*For Project 0, we will assign partners. Please watch for further details about that process.