COS 318 : Operating system
Fall 2002, Princeton University
Project 3: Filesystem

In Project 1, you grabbed data from the standard Unix filesystem when generating pages for your web server. Now, you get to build the backing filesystem yourself and (slightly) modify your server to interact with it. This project is not conceptually difficult, but will probably be a fair amount of coding.


High-Level Details



Submitting Programming Assignments

Submit your final solution electronically using the following command:

/u/cs318/bin/318submit 3 README Makefile (list of files)

The submit command copies your files to the directory /u/cs318/submit/UserLogin/number and lists all the files that you have submitted for assignment number. UserLogin is your user account name. If you execute submit after the project deadline, your files are placed in directory number_late. You can run submit more than once, and you can submit partial lists of files.

Each group needs to submit only one copy.  This means that only one of you needs to submit.


Hints

Break this project into two components - expansion of the main server itself, and implementation of the underlying disk. This approach will allow you to test the modified server against a known-good operating system while also working on the othe half of the project. This way, you'll be able to determine if a bug exists in your server or your filesystem. Note that these two components can be developed in parallel.

Within the filesystem, start with the creation of files and try to get that working properly. Then build directories on  top of that mechanism, and finally work on directory listing support.  Not only is this a logical way of approaching the project, but in the event that something doesn't work, hopefully you'll get as much partial credit as possible.

Secondly, don't make the mistake of trying to change the high level interfaces too much. Assume you have a working server or can get a good reference server from Project 1, and then just introduce wrappers for the relevant system calls. By having wrappers that can either call the real call or your replacement, you'll be able to do testing quickly and efficiently. If you change the high-level interfaces, you won't have this luxury.

Finally, if you're feeling brave and want to allow your partner access to files, you should be able to play around with the unreadable directory tricks we discussed in class. You can create a strangely-named intermediate directory which leads to the real, readable directory. You can make the files in this directory world-writeable, so unless someone else got hold of your strange intermediate directory name, it's unlikely that anyone else will be able to modify them.


CS318 Staff