CS439 Spring 2013 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
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
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
your tests before you design your solutions. In general, studies [1,
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, TAs, and proctor 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!
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/2, at 5p.
2013-02-26: 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!
- 2013-2-03: 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.
- 2013-1-23: I have written the first project, but details of the
others are still being worked out. The relative weights of all
projects and the due dates may change, perhaps
significantly. I will try to work out the details and finalize
things soon. However, even after I have finalized the projects, I
reserve the right to adjust due dates and project weights as the
Projects will be graded according to the grading criteria
found here. All code must
follow the C Style Guide.
Group Member Evaluations: Please
use this template to evalute each of your
group members from this semester. Evaluations must be turned in by
5/6/2013 at 8a. Participation is mandatory.
Project 0: A Mini Shell
|Become familiar with shells, fork(), exec(), and signals
Project 1: Threads
thread state, and thread scheduling
Project 2: User Programs
|Understanding how user programs
interact with the OS
Project 3: Virtual Memory
|Understanding paging, page replacement,
swapping, and other virtual memory concepts.
Project 4: File Systems
|Understanding file systems, including directory structure, file growth, and multithreading