Assignment 2: Filesystem
CS23000/33000 - Operating Systems (Winter 2004).
MWF 10:30pm Ry251
Due : Friday, January 23, 11:59 p.m.
Overview
Now that you've got disk devices working, your next challenge is to
implement a simple file system. A file system merely organizes the
disk in way that allows us to deal with files and directories instead
of low-level disk blocks.
There are two parts to this assignment. First, you're going to implement the
file system interface. That is, you're going to write a collection of generic
functions that will be used to interact with the filesystem. Next, you are going to
implement a simple file system.
Most of this assignment involves reading source code and implementing code
of your own. The instructions will be brief. All of this work must be done in the yfs directory you
already created for assignment 1.
Implement the file interface
In the file /yfs/include/yfile.h, you will find the interface that
is required to be supported by open files. That is, if you open a file, there are all sorts of things
you can do to it---reading, writing, etc. Create a file 'yfile.c' in your directory
that implements all of the functions in yfile.h. Note: this file will be almost identical to
the ydisk.c file from earlier.
Note: Your implementation should not use any Unix system calls or have any code that
pertains to specific devices. The code is meant to be generic.
Implement the file system interface
In the file /yfs/include/yfs.h, you will find the interface that is supported by
all file systems. Create a file 'yfs.c' that implements all of the functions in yfs.h.
Note: This file will be almost identical to yfile.c.
Implement a file system
In the file /yfs/include/minifs.h, you will find a description of a very simple
file system. Create a file minifs.c and implement this file system. To do this, you'll need
to implement about 10 functions---corresponding to all of the methods in yfile.h and yfs.h.
Follow the instructions contained in the minifs.h for more information.
Note: The implementation will almost be identical (in technique) to what you did in the
ramdisk and diskimage devices.
Building and Testing
Copy the file /yfs/Makefile to your own directory. Modify it so that it includes your
files (if necessary).
This updated Makefile creates a program called 'ydisk' that can be used to perform various
operations on the disk.
Handin Procedure
The filsystem project will be automatically collected from CVS at 11:59 p.m.
on the due date. Your project must be checked into a CVS project named
'yfs'.
Your final solution to the first assignment should be a directory of files
that look like this:
yfs/
Makefile
README
diskimage.c
minifs.c
ramdisk.c
ydisk_impl.h
ydisk.c
yfile.c
yfs.c
To grade your solution, we will run various tests on your program using
a testing program that we will supply.
Make sure you verify your handin:
unix % cvs checkout yfs
unix % cd yfs
unix % make
If your solution fails to check out of CVS, does not build using make,
or fails to run, you will receive no credit!
Make sure you test your solution by typing the above commands in some kind
of junk directory---do not assume that your solution works until you have
tested it yourself!
Grading
Your code will primarily be graded for correctness and style.
Your solution should not deviate from the specifications described in this handout
(i.e., don't change the name of the files, add additional files, or change the
specification of the assignment).
Your grade will consist of the following:
-
Correctness. 60%
-
Programming style and efficiency. 40%.
No late handins are accepted!