CSCI 333

Storage Systems

Home | Schedule | Labs | Williams CS | Piazza

Trimming the FAT

One reason we are reading about FAT in such detail (in addition to the fact that FAT is an important point in the historical design space that is still used in important contexts today) is because our second lab will be to implement a working FAT prototype as a FUSE filesystem. So please approach the readings today with the goal of understanding the on-disk-layout (e.g., what are the important FAT data structures and how are they related/organized?).

There aren't good academic texts that explain FAT in enough detail, so I've assigned two Wikipedia articles on FAT. The first, File Allocation Table", is a high-level overview (a non-technical introduction). The second, Design of the FAT file system, is much more technical (and therefore useful for our purposes). Annoted PDFs of both articles are linked from the schedule page.

When reading, I encourage you to focus on certain pieces of information that are important to our goals, while ignoring others (e.g., differences between different FAT versions). Another undergraduate storage course (taught by Geoff Keunning at HMC) has posted helpful guidelines, which I have summarized below.

As you read, think about the design choices that went into FAT, and how you would need to traverse the FAT data structures to implement important functions that comprise the filesystem API. What is the purpose of each data structure and how/why did the designers decide which information to store in each? Does the data structure design make some operations less efficient than others? How does the design fit into the time period that it originated (e.g., what hardware existed in 1977? What resources were abundant/scarce at that time? How were computers commonly used then vs. now?)