0% found this document useful (0 votes)
29 views

File Systems

In this project, you will design and implement a simplifies UNIX like file system in C or C++. This project does not use MIPS or SPIM, so it is completely independent of your other homework assignments. This will count as midterm exam for this course.

Uploaded by

RVMPZ
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views

File Systems

In this project, you will design and implement a simplifies UNIX like file system in C or C++. This project does not use MIPS or SPIM, so it is completely independent of your other homework assignments. This will count as midterm exam for this course.

Uploaded by

RVMPZ
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Gebze Technical University

Department of Computer Engineering


CSE 312 /CSE 504
Operating Systems
Spring 2020

Midterm Exam Project


Due Date: May31st
2020
File Systems
In this project, you will design and implement a simplifies UNIX like file system in C or C++. This project does not
use MIPS or SPIM, so it is completely independent of your other homework assignments. This will count as midterm
exam for this course.

Part 1
Design a file system that uses i-nodes blocks and data blocks to keep your files. Your file system will use, a i-node
structure like Fig 4.33 of your textbook (single link, double link and triple link i-nodes). Your directory, i-node block
, data block structure will be similar to Fig 4.34 of the textbook. Your file attributes will include size, last
modification date and time, and name of the file. No permissions or owner attributes will be kept. Write a design
report that specifies the following

• Define yourdirectory structure and directory entries;


• Define how you keep the free blocks and free i-nodes;
• Define your i-node structure
• Define your superblock that contains crucial information about the file system such as the block size, i-node
positions, block positions, etc.

Your report should include the function names of your source code that handles the file system operations listed in
the table of Part 3.

Part 2
Write a C/C++ program that creates an empty file system as a 1 MB Linux file. This file will include all the
information about your file system including the i-nodes, data blocks, free blocks and i-nodes, directories, data, etc.
The sample run of the program will be like

makeFileSystem 4 400 mySystem.dat

where 4 is the block size of the file system in KB for both data blocks and i-node blocks, and 400 is the number of
free i-nodes for an empty file system. mySystem.dat is the Linux file that contains all the file system. When you
work on the file system, this file contains all the information for the file system. Note that the size of
mySystem.dat will be exactly 1 MB all the time whether it contains any information or not.

Part 3
You will write a program that performs file system operation on the file system. The program will work like
following

fileSystemOper fileSystem.data operation parameters

where fileSystemOper is your program, fileSystem.data is the file system data file that you have created in
Part 2. You will keep modifying the same fileSystem.data file for all your operations. Allowable operations and
parameters for these operations are given below in the following table.
I
Operation Parameters Explanation Example

list Path Lists the fileSystemOper fileSystem.data list“/”


contents of the
directory shown lists the contents of the root directory. The output will be
by path on the similar to ls –l
screen.

mkdir Path and dir Makes or fileSystemOper fileSystem.data mkdir“/usr/ysa”


name removes a
rmdir directory makes a new directory under the directory “ysa” if possible.
These two works exactly like mkdir and rmdir commands of
Linux shell

dumpe2fs None Gives fileSystemOper fileSystem.data dumpe2fs


information
about the file works like simplified and modified Linux dumpe2fs command.
system. It will list block count, i-node count, free block and i-nodes,
number of files and directories, and block size. Different from
regular dumpe2fs, this command lists all the occupied i-nodes,
blocks and the file names for each of them.

fileSystemOper fileSystem.data write“/usr/ysa/file”linuxFile


write Path and file Creates and
name writes data to
the file Creates a file named file under “/usr/ysa” in your file
system, then copies the contents of the Linux file into the new
file. This works very similar to Linux copy command.

fileSystemOper fileSystem.data read “/usr/ysa/file”linuxFile


read Path and file Reads data
name from the file
Readsthe file named file under “/usr/ysa” in your file system,
then writes this data to the Linux file. This again works very
similar to Linux copy command.

del Path and file Deletes file fileSystemOper fileSystem.data del “/usr/ysa/file”
name from the path
Deletes the file named file under “/usr/ysa” in your file
system. This again works very similar to Linux del command.

Operations below are bonus (20 points)

fileSystemOper fileSystem.data ln“/usr/ysa/file1” “/usr/ysa/file2”


ln Source and Hard linking
destination between 2 files
path and file Allows more than one filename to refer to the same file
names
Linux ln command

fileSystemOper fileSystem.data lnsym “/usr/ysa/file1” “/usr/ysa/file2”


lnsym Source and Symbolic
destination linking between
path and file 2 files Linux ln-s command
names

fsck none Simplified File fileSystemOper fileSystem.data fsck


system check
Just print the two table of Fig 4.27 of your text book for both i-
nodes and blocks

Here is a sequence file system operation commands that you can use to test your file system. Suppose you have a file
named linuxFile.data in your Linux current directory.
makeFileSystem 4 400 mySystem.data
II
fileSystemOper fileSystem.data mkdir“/usr”
fileSystemOper fileSystem.data mkdir“/usr/ysa”
fileSystemOper fileSystem.data mkdir“/bin/ysa” ; Should print error!
fileSystemOper fileSystem.data write “/usr/ysa/file1” linuxFile.data
fileSystemOper fileSystem.data write “/usr/file2” linuxFile.data
fileSystemOper fileSystem.data write “/file3” linuxFile.data
fileSystemOper fileSystem.data list “/” ; Should list 1 dir, 1 file
fileSystemOper fileSystem.datadel “/usr/ysa/file1”
fileSystemOper fileSystem.data dumpe2fs
fileSystemOper fileSystem.data read “/usr/file2” linuxFile2.data
cmp linuxFile2.data linuxFile.data ; Should not print any difference
fileSystemOper fileSystem.data ln “/usr/file2” “/usr/linkedfile2”
fileSystemOper fileSystem.data list “/usr"
fileSystemOper fileSystem.data write “/usr/linkedfile2” linuxFile.data
fileSystemOper fileSystem.data dumpe2fs
fileSystemOper fileSystem.data lnsym “/usr/file2” “/usr/symlinkedfile2”
fileSystemOper fileSystem.data list “/usr"
fileSystemOper fileSystem.data del “/usr/file2”
fileSystemOper fileSystem.data list “/usr" ; Should see likedfile2 is there, symlinkedFile2 is
there but..
fileSystemOper fileSystem.data write “/usr/symlinkedfile2” linuxFile.data ; Should print error!
fileSystemOper fileSystem.data dumpe2fs

Notes
1. Always be careful about the errors, such as bad block sizes, bad file names, non-existent files or directories,
etc.
2. Run experiments that uses up all of your i-nodes and data blocks.
3. Try to get fragmentation and show your fragmented file system using the dumpe2fs command.
4. Do not use any code from any other source even a single line!

III

You might also like