こんばんは、川合です。現在オンライン会開催中です。
Hidemi KAWAI は 2003/09/13 15:53:13 の「[OSASK 6447] pcctol0b.」
で書きました:
> ええと、pcctol0bをベータリリースしました。今のところは、もっぱ
>ら、容量の小さいCFやその他のメモリカードをFAT16でフォーマットす
>ることくらいにしか使えません(もちろん、容量のおおきなメディアも
>ちゃんとフォーマットできますし、むしろpcctolでフォーマットするほ
>うがアクセスが高速化します)。
この辺の技術的なことを少し書いておくことにします。
普通にWindowsで32MBのCFをフォーマットすると、
・MBRが512バイト
その後にリザーブ領域が15.5KB
・ブートセクタが512バイト
・FATが30.5KBx2
・ルートディレクトリが16KB
・クラスタサイズ2KB
というふうになります(というかなりました)。
ご覧の通り、きっちり詰め込まれています。まあHDDだったらこんな
感じで全く問題はないのですが。
一方、pcctol f 20 sf16_40.eiiでフォーマットすると、
・MBRが512バイト
その後にリザーブ領域が63.5KB
・ブートセクタが512バイト
その後にリザーブ領域が31.5KB
・FATが128KBx2
・ルートディレクトリが32KB
・クラスタサイズ32KB
というふうになります。クラスタサイズが32KBで、しかもきれいにアラ
インされていることに注目してください。もちろん、パディングがむや
みに入っていたり、FATが過剰に大きいのもポイントです。
一般論として、SF16フォーマットだと使える容量は減ります。これは
FATが大きいこととパディングをたくさんやっているせいです。しかし
最近のフラッシュメモリの消去単位は32KBなので、32KBごとに書き換え
命令を発行すると、CFコントローラは一度だけメモリ消去命令を実行し
ます。・・・これがもし2KBの書き換え命令を16回出すとすると、最初
の2KBの書き換え命令を受け取ったときに、CF内部でその32KBブロック
を読み込み、PCから受け取ったデータを上書きして、32KBブロック全体
に消去を実行して、バッファ内の32KBを再転送します。これを16回やる
ことになります。
フラッシュメモリは消去回数で寿命が決まりますし、バッファに読ん
だりバッファから書いたりを必要以上に繰り返すので当然遅くなります
。これをさける意味もあって、SF16では極端にパディングを入れてアラ
インを揃えたり、クラスタサイズを32KBにしているわけです。
それでは。
--
川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/