Course mailing List
The first thing you should do before attempting any of the lab
assignments is to add yourself to the course mailing list, firstname.lastname@example.org. Any
information regarding updates, clarifications, or modifications to the
lab assignments will be distributed using this mailing list, so please
make sure you're on it. You can add yourself to the mailing list at
the following URL:
Many of you will find it most convenient to work on one (or more) of
the many (virtual) machines in
the (virtual) cluster allocated for this class. The machines are:
Note that these IP addresses are only routable from campus machines,
meaning you'll have to first log into some UCSD machine before you can
SSH to the class machines; you cannot log directly into them
from off campus. While you are free to complete your assignments on
any platform you'd like, the labs are developed assuming you'll be
using one of these machines runing Linux. There should be no
difficulty using machines running FreeBSD or other version of UNIX,
but any complications that arise from using machines other than those
in the class cluster are your responsibility.
Everyone enrolled in class has been issued an account for the class
machines. Your account name is your normal UCSD email address, and your
initial password is your student ID (including leading A). Please
change your password using usher_passwd after logging in. If,
for some reason, you did not recieve an account or have any questions about how to use your account, please contact me
For the term project portion of the course, some of you may find it
useful to deploy and test your code on PlanetLab, a set of over 100 PCs
distributed across the globe. Details on obtaining a Planet Lab
account will be provided after you've submitted your project proposal.
It is assumed you're already comfortable programming in C/C++. If
not, I suggest you keep a copy of the classic "C Programming Language"
by Kernighan and Ritchie by your side at all times. We will not devote
much time in lecture to the lab assignments. Instead, you may find
some of the resources below to be helpful.
If, after consulting the resources above, you are still having
difficulty with the lab assignments, please feel free to stop by
during office hours or send email to email@example.com. Any
particularly relevant questions and their answers will be broadcast to
the class mailing list for everyone's benefit.
- UNIX man pages. Every system call you'll be using (e.g.,
read, write, select) is documented by the UNIX manual system. You can
access the man page for a particular program or system call by typing
"man foo", where foo is the name of the thing you're interested in.
Type "man man" for further information.
- The GDB debugger. gdb can be used to conduct a post-mortem
analysis of your program to deduce what caused it to crash. More
sophisticated users of gdb can use it to monitor the progress of a
program as it executes. There are many excellent tutorials
on GDB available on line, as is the manual.
- Stevens. The late W. Richard Stevens wrote several books
that should be on every systems programmer's bookshelf. "Unix Network
Programming," "Advanced Programming in the UNIX Environment," and
"TCP/IP Illustrated, Volume 1" are likely to be especially useful for