exFAT の改良点を見て、FAT32 の欠点を見る

SDカードのメディアの大容量化が進む中、FAT32 は仕様上はもっと大容量でも使えるはず。
でも、なぜ、exFAT が出て来たのでしょうか?
exFAT が FAT32 から改良された点を考えることで、FAT32 の欠点が見えて来るかも。

FAT(ファイルシステム)は、クラスタというブロックに区切られ、これを単位に管理されます。
File Allocation Table を持ち、ファイルのつながりを今のクラスタから次のクラスタ、もしくは、終端を管理しています。
1つのクラスタを管理するために
FAT12 は 12ビット、FAT16 は 16ビット、FAT32 は 32ビットの領域を使います。
exFAT は FAT32 と同じ 32ビットの領域を使います。

ファイルを書き込もうとしたとき、ファイルシステムはどこにデータを書くのか、空き領域を探さなければなりません。
FAT32 は、空き領域の管理も、File Allocation Table で行っているのです。
1つのクラスタを管理するのに、32ビット(=4バイト)がクラスタの数だけ必要になってきます。
クラスタの数は、ざっくり、メディアの容量÷クラスタサイズ(アロケーションユニットサイズ)になります。

ファイルシステムがこの File Allocation Table のために使えるメモリが File Allocation Table よりも少ない場合、
File Allocation Table を部分的に読んで、空き領域を探し、無かったら別の部分を読んで、また空き領域を探します。
File Allocation Table の大きさに対し、使えるメモリが少ないほど、読んでは捨てる、読んでは捨てるの繰り返しが顕著になってきます。

exFATではアロケーション ビットマップが新たに採用されました。
これは、使っている領域/空き領域の管理を1クラスタ当たり1ビットで行います。
FAT32より1/32のデータ量で管理しているので
読んでは捨てる、読んでは捨てるの繰り返しもそれだけ少なくて済むのです。

ファイルの中身を読む場合でも、実施にどこに書いてあるかは、
File Allocation Table を読んで、FAT チェーンをたどっていかなければなりません。
1つのファイルが連続領域に書かれている場合、
先頭位置(クラスタ位置)とサイズが分かれば読めるので、File Allocation Table を読む必要さえなくなります。
exFAT の場合、ファイルごとにフラグを持っていて、そのファイルの配置が、File Allocation Table で管理されているか、それとも連続領域になっていて、File Allocation Table を見なくて良いかが分かるようになっています。

つまり、exFAT は、FAT32 から、いかに File Allocation Table を読まなくて済むかの工夫をして作られているのです。
大容量になると File Allocation Table が肥大化しOSなどの重荷になってしまいます。
そして、メディア(SDカード)の容量がいくつだからFAT32ではダメというより、扱う機器(ホスト)に負荷を掛けないようにexFATが推奨されているのです。