Project 6: File System

Overview

For the final project, you will implement a hierarchical Unix-like file system to work on top of the block-based disk interface provided in MP4.

General guidelines for file system design

Disk organization:
Block Structure
Fig1. - Disk organization in ufsdisk.

Use the first block from the disk as the superblock followed by the inodeblocks that contain the inodes followed by freebitmap blocks, and the rest for free blocks, datablocks, and indirect blocks.

Superblock:

The superblock contains global information about the file system. Number of inodeblocks and number of freebitmap blocks are preserved in the superblock. Also in the first 4 bytes, it keeps a predefined number (called magic number) that helps you determine if you have a legitimate file system on a disk or not.

Inodes:

To avoid wasting space, ufsdisk packs as many inodes as will fit into an inodeblock. Ufsdisk inodes contain information about the number of blocks in the virtual block store, and is filled with REFS_PER_INODE block pointers:

Block Structure
Fig2. - Inode organization in ufsdisk for REFS_PER_INODE = 15

You can find more information about direct and indirect pointers in your textbook.

Freebitmap blocks:

A freebitmap block is a block of bits that is used to keep track of free blocks in the file system. Each bit in a freebitmap block corresponds to a block in the "remaining blocks" section of the layout. A value of 0 indicates that the block is not used, and a value of 1 indicates that the block is in use. Freebitmap blocks do not keep bits to track the status of superblock, inodes, or the other freebitmap blocks.

File system checker

While not required (optional) for submission, it is highly recommended that you also develop a "file system check (fsck)" utility. The purpose of "fsck" is to check the integrity of your file system. A good "fsck" utility should, at minimum, check the references on all inodes, as well as verify that there are no orphaned blocks or inodes.

Getting Started

The release code on CMS contains the skeleton code for the entire project.

Submissions

Use CMS to submit your project. You should include a "README" file with your name, your partner's name, and anything you think we should know. This includes documenting any broken functionality.

Prepare and submit a submission.zip file with the following files:

*Make sure to include all modified files.

Final Word

If you need help with any part of the assignment, come for office hours and post in Piazza. Start early and have fun!