Assignment 3b: Files

CSCI 333 : Storage Systems

Spring 2021

Learning Objectives

This lab is an extesion of Lab 3a, and it shares the same learning objectives and logistics.

After completing this lab (parts A and B), you will:

Overview

In Lab 3b, you will:

  1. Finish the prototype filesystem you began in Lab 3a, and
  2. Add enough functionality to your prototype filesystem that it can be used to store actual data in mutable files.

Assignment Spec

Your finished filesystem should implement the following functionality:

Descriptions of each method can be found in the HMC documentation, and suggestions/clarifications will be provided below as they come up.

Note that you are not required to support:

Many of these optional operations would require additional filesystem design (e.g., chown() requires that you track ownership).

Important Notes

Testing ReFS

Many of your features can be tested using standard Unix utilities inside scripts like we did for Lab 1. The dd utility is especially useful (see man dd, or “Google” dd for example usage; looking up how to use this tool for testing is not considered an honor code violation.).

Unlike the Part A, I recommend that you write test code/scripts. I provide some test recommendations below, but I also encourage you to share any tests ideas or strategies that you have with the group on Slack.

A good strategy is, as soon as you add functionality, create a small test. Then run all of your existing tests to verify your new “feature” didn’t break anything!

Test Ideas

Here are some things that I expect to work, so you are strongly encouraged to create tests for (at least) these features:

Submission

Submit your code (it should be inside a single file named refs.c) to your git repository. If you implement any additional features, be sure to mention them (prominently?) in your README.md file so that I see them.

When you have completed your Lab 3b, please do two things:


This lab borrows from an assignment created by Geoff Kuenning.