CS 474 - Filesystems

The basic intent of a file system is to provide an abstraction for the data on a disk (or other media) so it's easier for users to refer to them than by sector number or something. Unix-derived filesystems also use the filesystem as an abstraction for access to devices and to some system information. It's hard to even express what an astoundingly successful abstraction this has been; most users tend to think in terms of files and directories to the point that they think they have a physical reality on the disk rather than just a set of data structures.

At one time, it was common to have file systems that were much more complex than what we see now. The text spends quite a while discussing some of these... the basic notion with these more complex file structures was that files would be divided into records, and it would make sense to read a record, or the n-th record, from a file. A file might have a key field, which could be used to efficiently get access to records in some particular order. The database functions in a Palm Pilot resemble these file structures.

OSes that support these more complex file structures would typically have file type attributes that were meaningful to the OS itself: if you had a text file, each record in the file might have a field specifying how long the record is, and a field giving the data for the record.

Complex file types like this make more sense when the OS vendor is also a software vendor: if you're going to sell a database application, it makes sense that the OS would supply data to the database in a format that makes sense to it (but if you need a different mechanism, you're out of luck).

Both Unix and Windows take the attitude that a file's only purpose to to store bits, and any higher structure is the responsibility of the programmer. Even so, we'll see that directories do have some structure in the sense we're talking about here.

Families of File Systems

I'm familiar with two general "families" of file systems: Microsoft FAT-derived file systems, and Unix Inode-derived file systems. I'm not familiar with (for instance) OS/2's HPFS, or the Mac file system, or the VMS file system...

FAT

FAT is an acronym for ``File Access Table,'' the basic data structure of the FAT file system. The original scheme was designed for 320K floppy disks; it has pretty much been "grown" as needed since then, with the initial design staying pretty much intact. The original FAT is frequently called FAT12; variants include FAT16, FAT32, and VFAT.

Unix

The other major family of file systems is the Unix file system. It was originally developed for an early version of Unix; members of the family include the Berkely Fast File System, Minix (file system), Ext2fs, and NTFS. Note that Ext3FS is actually the Ext2fs with journalling added for improved crash recovery.


Last modified: Mon Nov 14 10:38:22 MST 2005