the file allocation table
/ fat /
Linked allocation hides each file's next-block pointer inside the data block itself, which makes random access slow and fragile. The file allocation table fixes this with one neat idea: take all those pointers out of the data blocks and gather them into a single table at a known place near the start of the disk. It is the design that powered MS-DOS and still lives on every USB stick and SD card.
The table has exactly one slot for every block (cluster) on the disk. Each slot holds the number of the NEXT block in whatever file that block belongs to — so the table itself is the chain of pointers, pulled out into one array. The directory entry for a file just records its first block number, say 9. To read the file you look at table slot 9, which tells you the next block is 16; you look at slot 16, which says 1; slot 1 says 25; slot 25 holds a special end-of-file marker. A free block's slot holds 0, so the same table also doubles as the free-space map. Because the whole table can be cached in memory, you can chase a chain without re-reading the data blocks, and you can find any block of the file by walking the table in RAM — far faster than the on-disk hops of plain linked allocation.
FAT's strengths are simplicity and near-universal support, which is why it is the standard format for removable media that must work on every device. Its weaknesses show at scale: the table grows with the disk and can become huge, the chain still must be walked to find a far-off block (no true random access), and there is no room for rich metadata, permissions, or crash-recovery journaling. Later versions (FAT12, FAT16, FAT32, and the related exFAT) mainly widen the slot size to address larger disks.
A photo starts at cluster 9. The in-memory FAT reads: slot[9]=16, slot[16]=1, slot[1]=25, slot[25]=EOF. The OS chases 9 -> 16 -> 1 -> 25 entirely inside the cached table, then reads exactly those four data clusters off the disk — the data blocks themselves carry no pointers at all.
FAT gathers every next-block pointer into one cacheable table; the data blocks stay pure data.
FAT is a tidied-up linked allocation, not a different family — caching the table speeds chain-walking, but finding a far block still means walking the chain, not a constant-time lookup.