D-Term 2006 CS 4513 Prof. D. Finkel
Assignment 1
Due Date: Thursday, April 6 at 9:50
AM
Goal: The overall goal of this
assignment is to implement several data structures to simulate keeping track of
free blocks on disk and which blocks belong to which file, in the style of a
Unix file system. Your program must be
written in C++ or Java, and must run on the
Your program will use a bitmap to keep track of
which blocks on the disk are free.
Assume that there are 128 blocks, numbered 0 – 127; the bitmap should
have one bit per block. Make the number
of blocks a constant you define, so it will be easy to change the number of
blocks later.
In addition, you will need an array of i-nodes. Your system will have a maximum of 20
i-nodes. Again, make this quantity a
constant, so it can be changed later. For
this assignment, the i-node will only contain up to 10 direct block
numbers. It will not include any of the
header stuff that real i-nodes contain and it will not include indirect block
numbers.
All the files will reside in a single
directory. A directory entry for a file
will consist of the file name and the i-node number for that file.
Your program will support the following operations:
C – create a file with the indicated number of
blocks. Example: C myfile.txt 3 When a create command is encountered, the
required number of blocks should be allocated from the free list bitmap, a free
i-node should be allocated, the block numbers should be entered into the
i-node, and a directory entry created.
The create command should fail if a file with that filename already
exists, or if the required number of free blocks are not available, or if a
free i-node is not available.
E – extend the specified file by the indicated
number of blocks. Example: E myfile.txt
2 This command should fail if the
specified file does not exist, or if the required number of free blocks is not
available.
D – delete a specified file. Example D myfile.txt When a delete command is encounted, all the
resources allocated for the file should be deallocated. The delete command should fail if the
specified file does not exist.
R – reset the file system. This command should restore your file system
to its initial state, with no files in the directory, no i-nodes in use, and
all blocks free.
P – print all file system information. For each file in the file system, print the
name of the file and a list of all the blocks currently allocated to this file.
Your program should start with all the blocks free,
and read in commands from a file or from standard input. There will be a carriage return following
each command. After processing each
operation, print a confirmation message of the following form to the screen:
created myfile.txt 3 blocks:
13 14 17
extended myfile.txt 2
blocks: 22 26
create yourfile.txt failed 4
blocks not available
delete yourfile.txt failed. file
does not exist
To keep everyone's results the same, your program
must always allocate the lowest number block available from the bitmap.
Your program should recognize the following command
line switches:
-s run silently (no printed output). You should use this switch when you are timing your program. If –s is selected and a “P” command is issued,
the “P” command should be ignored.
-f filename read
the commands in the file filename. If
the –f switch is absent, read the commands from standard input.
Timing your
program: Use /usr/bin/time to time your program. To use this program, type
/usr/bin/time
command
where command is some system command or the name of
an executable you want to run. This will
run your command, and afterwards report three times in seconds: real, user and
sys. The real time is the amount of
elapsed time to run your program, including any time spent running other
people's programs; the user time is the time spent executing your code; and the
sys time is the time spent on operating system services to run your
program. You want to record the user
time for your program. It's important to
run all your timed test programs on the same machine.
If you run /bin/time on your own programs, you might
very likely get times of 0 unless you make the command file very large. To try out /bin/time, try compiling something
under /bin/time. Don't confuse /bin/time with time,
which works differently. If you wish to
use some other method to time your program, please consult with the TA, SA or
me beforehand.
A file of commands to time will be made available
shortly before the program is due. The
test file will end with the command "C", so if timing your program
gives a result of 0, run the test file through your program several times. (This will require a modification to your
program.)
Submitting
your program: Use the turnin program to submit your assignment. Turn in your program files, but do not turn
in any executable files. Include a file
named build.sh to compile your
program. If you have a makefile, build.sh could simply call make.
Include a README file explaining what level of the
assignment you have completed, and a list of all the implemented features, and
explain how to run your program. Be sure
to include the documentation files as specified in the CS Department
Documentation Standard, located at
http://www.cs.wpi.edu/Help/documentation-standard.html You do not need to include a program listing
or sample runs in your documentation.
C-Level
Assignment: To receive a “C” on this assignment, implement
only the bimap for keeping track of free blocks and a directory
structure.. For the C level of the
assignment, the directory should story the file name and the numbers of the
block used by this file; the directory will not include an i-node number. Time the performance of your program.
B-Level
Assignment: To
receive the grade of “B” on this assignment, implement the bitmap, the i-nodes,
and the directory, and imlplement all of the functions described above.
A-Level
Assignment:
To receive the grade of “A” for this assignment, you must implement the
functionality of the B-level assignment, and add the ability to do contiguous
allocation (allocating consecutive free blocks only). If the requested number of contiguous free
blocks is not available, then no blocks should be allocated. Add a command line switch, -c, to run your
program using contiguous allocation; if –c is not present, run the original
non-contiguous allocation. Time the
contiguous allocation implementation as well as the original, non-contiguous
implementation.
Extra credit
(for the A-Level Assignment only): For extra
credit, compare the performance of the contiguous allocation method with the
corresponding non-contiguous method. The
(possible) savings from using contiguous allocation come from reducing the
amount of disk head movement in writing and reading files. Thus your performance analysis of contiguous
allocation cannot depend only on the results of timing the running of your
program, since your program does not simulate reading and writing. You will need to do some analysis beyond
timing your program.; you will have to decide how to do this analysis. The TA, SA and I will be happy to discuss
your plans for the analysis with you.