0. Introduction

This readme contains some build instrucions and some notes on the layout
of this directory structure.

1. Build Process

The build process for this project is somewhat complicated but
it should be easy for you to get it to do things you're supposed
to get it to do.

In the top-level directory there is a file called config.mk.

  UPDATE_METHOD should be left as "afs" if possible.

  THREAD_OBJS and SYSCALL_OBJS are the names of object (.o) files
  in the user/lib/{thread,syscall} directories, respectively, which
  you wish to be built into libthread.a and libsyscall.a.

  410PROGS and STUDENTPROGS specify which programs (not .o files)
  from {410user/progs,user/progs}, respectively, will be stored
  into the RAM-disk file system so they can be launched by the
  shell when your floppy image is booted.  If you want to write
  a test program called "test", put test.c into user/progs and
  put "test" into STUDENTPROGS.

When we grade your submission we will depend on THREAD_OBJS and
SYSCALL_OBJS being correct and we will override the values of
410PROGS and STUDENTPROGS.

If you feel you need to edit one or more Makefiles, you should
probably stop and consult the course staff.  Before building
and grading your submission, we will wipe out any Makefile
changes which haven't been cleared...

2. Directory Structure

./
  The only files you should ever even think about editing in the 
  top-level directory are config.mk and update.sh and the
  latter only if you are working from a non-Andrew machine and
  need to use the ./update.sh "web" mechanism.

./410kern
  You don't need to touch this direcory or its subdirectories.

./user
  This is where the fun happens.  You should not have to edit the Makefile
  here but should have to edit config.mk to get your libraries to build.

./user/inc
  You can but include files here or in ./user/lib/inc.  This is the prefered
  place for header files that only have to do with your test cases.

./user/lib
  You will find even more fun in here, but shouldn't have to edit any of the
  files that are directly in this tree.

./user/lib/inc
  This is the prefered place to drop header files for your libraries.
  Skeletons for most of what you should need are provided.

./user/lib/syscall
  This is where you should drop the files for your syscall wrappers.
  You should not have to edit this Makefile.

./user/lib/thread
  This is where you should drop the file for your thread library, including
  mutexes, condition variables, r/w locks, semaphores, and your thread safe
  malloc wrapper.  You should not have to edit this Makefile.

./410user/progs
  This is where we will stick our tests.  Don't touch this directory.

./user/progs
  This is where you should put the source files for your tests.  You should
  not have to edit the Makefile. You should add your tests to config.mk.

./temp
  This is a directory where some temp files will go during the build process
  that makes the ram disk.  You should not have to touch this directory.
