Projects

Project 1 -- The Unix Shell
Project 2 -- Multi-Threaded Web Server
Project 3 -- A "Better" Malloc
Project 4 -- A "Slower" File System.

As part of the course, you will complete four intensive programming projects. You may perform these projects on the instructional machines running the Linux operating system.

Helpful Resources

You must use C on the system programming assignments in the class. The best C book in the world is Kernighan and Ritchie's beautifully sparse The C Programming Language. It is worth purchasing.

Also useful is Expert C Programming by Peter Van der Linden. Finally, if you are interested in mastering the Unix programming environment, the absolute bible is Advanced Programming in the UNIX Environment by the late, great W. Richard Stevens.

Here is a short, free, and incomplete overview of the C programming environment available for your viewing convenience in both Postscript and PDF.

It would also be useful to figure out how to use the debugger, gdb. Here is a link to a short tutorial -- there are others on the web too. Learning how to use such tools is a good idea.

New Unix users and novice Unix users new to the CSL Unix facilities are encouraged to attend an orientation session as early in the semester as possible. You may also purchase a copy of CS 1000 (An Introductory Manual to the Unix Operating System and the Computer Sciences Department's Instructional Computing Environment) at the DoIT Tech Store (first floor of the Computer Sciences and Statistics Building).

Generally Helpful Advice

The projects are a fundamental part of this course. Although the first assignment will be relatively easy, the remaining projects each require a significant amount of time, so do not procrastinate! It is likely things will take longer than you expect. Do not wait until the day before the assignment is due to start. These assignments should be started well over a week before they are due, ideally right when they are handed out. All information necessary to complete the assignments will be available from the class web page.

As stated above, all of the assignments will be in C and not Java. We assume that you have enough programming background that learning the basics of a new language (if it is indeed new to you) will not be difficult. C is actually quite similar to Java, as those who invented Java were C experts.

For the projects, you will be graded on how well your implementation works. We will test your program on a suite of input sets. Your grade will be based on how many of the tests your application passes and how well you are able to answer our questions about the program; we will only briefly examine your code to ensure that you followed the specifications of the assignment.

Grade Distribution

  • Project 1: Ave 81/100
    <=50 51-6061-7071-8081-9091-100
    3013311
  • Project 2: Ave 89/100
    <=75 80859095100
    2133111
  • Project 3: Ave 68/100
    <=75 80859095100
    800085