CS439 Spring 2017 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 (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
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. In general, studies [1,
suggest that pair programming works well:
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.
- (counter-intuitively two
programmers working together at one keyboard produce about as much
functionality as two programmers working apart at two keyboards,
the code produced in this manner is of higher quality than
individually programmed code, and
setting both team members learn more than they would separately.
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
Interview signup page is available---groups should sign up for one time slot
together. Please be certain to signup according to the posted instructions, and
you must signup for a time by Sunday, 3/26, at noon.
Check signup page is available. Please be certain to signup
according to the posted instructions, and you must signup for a time
by Sunday, 3/6, by noon.
2017-02-27: 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!
2017-02-07: The distributed project had an error in mshref: when an unrecognized command
was entered, "Command not found" was not printed. Get an
updated version here.
Please review the Grading Criteria. All
code must follow the C Style Guide.
Turning in your code? Please look over
the Turnin Checklist!
|Required Group Size
|Group Registration Deadline
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
||Mar 6/Mar 24
Project 3: Virtual Memory
|Understanding paging, page replacement,
and other virtual memory concepts
Project 4: File Systems
|Understanding file systems, including directory structure, file growth, and multithreading
||May 5 (No slip days!)