Project 5 - File Systems

Administrivia: For this project, you may work with the same partner you had in project 4. However, if you'd like to work with someone new, you are welcome switch partners, but you need to let Valentin know by Friday, May 30 in an email. 
Out: Wednesday, May 28
Due: Friday, June 6, 11:59pm

Assignment Goals

Overview

The starting point for this assignment is a simplified file system, cse451fs, the design of which imposes strict limits on both the number of files that can be stored and the maximum size of any one file.  In particular, no matter how big a disk you might have, this file system can hold only about 8,000 distinct files, no file can be larger than 13KB, and file names cannot be longer than 30 characters.  These restrictions result from the choice of on-disk data structures used to find files and the data blocks of a given file, that is, the superblock and inode representations. 

Here are the major steps involved in this assignment:

  1. Make sure that you, individually, understand the mechanical aspects of the "development environment" you'll be working in.  These include how to build the file system code, how to configure the raw disk device provided by VMware to host your file system, and how to run and test your file system.  A description of these mechanical aspects is here.  
  2. Of the three limitations cited above you will need to improve the following two:
    Design how you want to implement these file system modifications on disk: how you will represent your directories on disk, how file data is indexed, etc.  There can still be a limit on any of these properties, but your improvement needs to be more than simply altering a program constant.

  3. Alter the skeleton code (/cse451/doug/Proj5FS-V1.0.0.tar.gz) to implement your file system.  There are two major components to this.  One is that the user level program mkfs.cse451fs must be changed to initialize the raw disk device with a valid, empty file system using your new on-disk data structures.  The other is to change the file system source (fsSource/) itself.

Details

Hints/Starting Points

Schedule and What to Hand In

By Friday, June 6 at 11:59 PM, please turn in a file that includes the following.

  1. Describe the design for your file system modifications.  This might include a discussion of other approaches you considered but rejected.
  2. What concurrency-related issues did you encounter? How did you deal with them?
  3. What methodology did you follow in order to test your file system (for functionality)?
  4. Does your implementation work? If not, what parts work and what parts don't? How would you fix it if you had more time?
  5. What do you like best about your design?  What do you like least about it?  How would you improve your design?

The report should be no more than 2 pages long. The acceptable file format is plain (ASCII) text. Include the usernames of both partners in the filename, e.g., writeup-doug-valentin.txt.

You will be graded primarily on your write-up. We will be looking at the clarity and viability of your ideas, depth of your implementation, and completeness of your testing, based on your report. However, please do turn in a copy of your code as well, in case we need to refer to it. 

Turnin

You will be turning in 4 files:  a tar.gz file containing all of your modified sources, your compiled mkfs.cse451fs and cse451fs.o files, and a single write-up file for both partners.

To create the source archive file, use the following command: tar -cvzf sources.tar.gz Proj5FS/

Use the turnin(1L) program under project name proj5 by 11:59pm on the day it is due. Note: turnin will not work on coredump/spinlock, so you'll need to use one of the general-purpose machines (sumatra, fiji, ceylon, or tahiti).