* FAT16を発展させてみる -(by [[K]], 2016.12.10) ** (0) -この記事は、「自作OS Advent Calendar 2016」の12/10が空欄だったので急きょ書くことにした記事です。 --http://www.adventar.org/calendars/1666 -なんか最近アドベントカレンダばかり書いている気がする・・・。 ** (1) -MS-DOSはFATと呼ばれるファイルシステムを採用していました。ここでは特にFAT16について考えてみようと思います。 -FAT16はディスクを(最大で)65536個のクラスタの集合と考えて、「このクラスタを読み終わったら続きはここにあるよ」という情報を並べたものです。厳密には65536個ではないのですが、でも16ビットであるということを素直に活用すれば、最大は65536個程度にはなります。これがあるおかげでディスクの連続していない領域にもファイルを入れることができて、なかなかよくできた仕組みだと思います。 -ここでFAT16においてクラスタサイズ32バイトというのを考えましょう。え?512バイトじゃないの?と思うかもしれませんが、ええ、32バイトです。16バイトでもないです。 -そもそも512バイトなんていうのは過去の伝統の成り行きで決まったもので、あまり必然性がありません。だから没。・・・また16バイトなんていうのはビットに直したら128ビットで、これは中途半端です。256ビットのほうがきりがいいです。256というのは、((2^2)^2)^2です。 -いやもっと細かい単位で、1バイト単位にすべきだという意見もあるかと思いますが、そんな小さい単位で管理しても今度は管理コストばかりかかっていまいち得しないので、やっぱり32バイトくらいがちょうどよいと思います。 -さて、32バイトのクラスタを46080個集めると1440KBになります。FAT16で46080個のクラスタを管理しようとすると、90KBを要します。1440KBを管理するために90KBも管理領域だけで使ってしまうというのはなんかバランスが悪いように思いますが、それでも6.25%です。まあ許容範囲です。・・・特に、これによって512バイト未満のファイルについて無駄を少なく管理できるようになるので、結局は得かもしれません。 -32バイトのクラスタの場合、FAT16の限界では、2MBまで管理できることになります。 ** (2) -たったの2MBしか管理できないというのは使い物になりません。そこで世間ではFAT32とかに行くわけですが、FAT32はFAT領域のサイズが大きくなりすぎるという問題があります。最大で16GBになりえます。 -そこで、クラスタサイズを一気に256倍にして8KBにしてみます。これだとFAT16でも512MBまで管理できます。・・・それでも足りなければさらに256倍します。 |FAT16レベル0|クラスタサイズ32バイト|最大容量2MB| |FAT16レベル1|クラスタサイズ8KB|最大容量512MB| |FAT16レベル2|クラスタサイズ2MB|最大容量128GB| |FAT16レベル3|クラスタサイズ512MB|最大容量32TB| -クラスタサイズ8KBはまだ許せるとして、クラスタサイズ2MBはちょっとひどい気がします。10バイトのファイルでも2MBを消費してしまいます。かといって最大容量が2MBとか512MBで我慢するというのも苦しいです。 -そこで思いついたのですが、FAT16レベル1の中にはFAT16レベル0を内包することができる、というのはどうでしょうか。 (つづく) ** (6) おまけの余談 -http://www.adventar.org/calendars/1666 はご覧のとおり空きがいっぱいあります。だから全部埋めようという気持ちになりきれないのですが、でも埋まってきてあと少しになったら、頑張りたい気持ちになると思うんです。もし残り5マスとかになって、でも書き手が見つからなくて困ったら、私もまた何か書こうと思っています。 -ということで、協力者募集! * こめんと欄 #comment