Home CS439



CS439 Spring 2014 Project Information

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.
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. 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 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 project.

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!


Notes:
  • 2014-05-03: Group Member Evaluations: Please use this template to evaluate each of your group members from this semester. Evaluations must be turned in by 5/6/2014 at 11:59a. Participation is mandatory.

  • 2014-3-20: Replace your Makefile found in the src/ directory with this Makefile. Until further notice, email ans@cs.utexas.edu and ccoleman@cs.utexas.edu when you turnin your files. Also, be certain to use turnin --verify

  • 2014-2-26: The Stack Check signup page is available. Please be certain to signup according to the posted instructions, and you must signup for a time by Saturday, 3/1, at 5p.

  • 2014-2-25: I annotated the directions for hex_dump() and took a picture. Each item on the stack is color-coded to match the corresponding item in the directions. I hope it helps!

  • 2014-2-13: Di's presentation on the Pintos threads project is now available.

  • 2014-2-9: We use a script to expand and compile your turned in archive. You may check to see if your archive will compile by first using turnin --verify to retrieve your archive from turnin and then using this script to expand and compile your code. Please note that this script will only work for the threads project. (You are welcome to modify it to test other projects.)

Projects will be graded according to the grading criteria found here. All code must follow the C Style Guide.


Schedule

Projects
Objectives
Due
Relative Weight
Project 0: A Mini Shell
Become familiar with shells, fork(), exec(), and signals Feb 7 10
Project 1: Threads
Understanding interrupts, thread state, and thread scheduling Feb 21 20
Project 2: User Programs
Understanding how user programs interact with the OS Mar 3/Mar 21 20
Project 3: Virtual Memory
Understanding paging, page replacement, and other virtual memory concepts. Apr 11 25
Project 4: File Systems
Understanding file systems, including directory structure, file growth, and multithreading May 2 (No Slip Days) 25