CS439 Spring 2014 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. 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
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
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.
Replace your Makefile found in the src/ directory with
this Makefile. Until further notice, email
firstname.lastname@example.org and email@example.com when you turnin your
files. Also, be certain to use turnin --verify
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 will be graded according to the grading criteria
found here. All code must
follow the C Style Guide.
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 3/Mar 21
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 2 (No Slip Days)