M.I.T. DEPARTMENT OF EECS

6.033 Lab - Computer System Engineering Handout 1 - February 13, 1998

Administrivia


Introduction

The 6.033 lab is an elective 6-credit add-on to 6.033 designed to provide hands-on experience with building computer systems. Three projects, each progressively more challenging, comprise the lab. The first is coding a simple TCP proxy server. This project introduces the tools you will use for the later projects. The second project involves designing and implementing a multi-threaded, caching, web proxy server. The final project is in the area of file systems, though the design will be very open ended. The lab will run on Athena under UNIX and the programming will be done in C.

A word on terminology: we will refer to the unchanged 12-credit 6.033 subject as "6.033." The add-on lab will be called the "6.033 lab." We will use the word "system project" to refer to the projects in the 6.033 lab. The projects in 6.033 are called "design projects."


Who should take this lab?

To take the lab, you must be enrolled in 6.033 this term. We require fluency in C or C++; this is not the right place to learn C. However, UNIX experience is not required. In addition, you should have taken 6.170 so that you have a working knowledge of how to construct large programs. Unlike the programming assignments associated with 6.001 or 6.034, you are required to build the systems from scratch. We do not advise taking this lab concurrently with another lab such as 6.111 or 6.170.

If you have the extra six hours a week to design and code these systems and meet the prerequisites above, you should seriously consider enrolling. However, you do not need to take the lab to do well in or get a lot out of 6.033.


The system projects

If you don't understand all the terms in this section, don't worry! We will cover them in class and in special recitation sections for the lab. Subsequent handouts will cover the assignments in much greater detail.

To cut your teeth on UNIX programming and refresh your C skills, the first project is a simple TCP proxy server. We imagine this initial project will take about five hours, but we are giving you one week to complete it. There are no papers to write for this project, but you must hand in the code for a functional server.

In the second system project, you are to design and implement a multi-threaded, caching web proxy server. Although we will give a basic specification, you are free to choose an implementation and any additional methods you wish to support. Early on, we will ask you to give us a preliminary design document including rationale for the design as well as an anticipated schedule. Then, after the implementation is done, you will hand in a second paper, describing the final design and implementation. This paper can substitute for your design project 1 in 6.033.

The final system project is the creation of a file system. However, the design will be very much up to you. For example, the file system could include security, work across a network, or provide guarantees in case of sudden shutdown. You will may choose what functionality you wish to support within the constraint of basic file system functionality. The last system project is designed to take five weeks for a team of two or three students to complete: one week for writing the initial design document, and four weeks to implement the design, evaluate it, and document it. The final design document for this project can be used to satisfy design project 2 for 6.033.


6.033 and the lab

Every student enrolled in the lab should also be enrolled in 6.033. In addition to the 6.033 recitations, special recitations for the lab section will occasionally meet on Friday from 2 to 3PM.

6.033 has two design projects. For each design project you have to write up a paper. If you are enrolled in the lab, you can substitute the system project papers for papers on the design projects -- a sweet deal.


Due dates

We have made the due dates for the final design documents correspond to those for the 6.033 design projects. In addition, the final code for the second and third projects is due two days earlier to give you time to refine the design documents.

TCP Proxy Server        Code due               Friday, February 20
Web Proxy Server        Preliminary Design     Wednesday, February 25
                        Code due               Tuesday, March 17
                        Final Design Paper     Thursday, March 19
File System             Preliminary Design     Tuesday, April 7 
                        Code due               Tuesday, April 28 
                        Final Design Paper     Thursday, April 30 

Projects 2 and 3 are large, complicated projects, similar in scale to the fourth and final projects of 6.170. As such, you should start early on the coding (February 26th for the web proxy server and April 8th for the file system). If you start coding only one or two weeks before the due date, you will most probably be swamped with work. In addition, there are many aspects of the design which do not become clear until you begin to code. The earlier you begin to code, the more time you have to play with your design and come out with something truly excellent.


Grades, credits, and collaboration policy

Successful completion of the 6.033 lab will earn you 6 credits and 6 Engineering Design Points.

Your lab grade will be determined as follows: lab grade = 1/6 P1 + 1/3 P2 + 1/2 P3

The lab grades will reflect the correctness and creativity of the design as well as the correctness of the implementation. The clarity of your design documents will help us greatly in understanding your design. In addition, if you choose to substitute the system project papers for the design papers in 6.033, they will partially determine your 6.033 grade.

The first two projects must be done individually; the third project can be done in teams of two or three students. For the first two projects you are allowed to discuss the problem with other students, but we expect you to work out the project on your own (i.e., you should do the coding and writing of design documents on your own). Similarly, for the last system project, each team is responsible for its own code and documentation.


How do I officially sign up?

During our second recitation on February 20, we will hand out and sign Add forms.


Go to 6.033 Home Page Questions or Comments: 6.033-lab-tas@mit.edu