advcal20161210
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* FAT16を発展させてみる
-(by [[K]], 2016.12.10)
** (0)
-この記事は、「自作OS Advent Calendar 2016」の12/10が空欄...
--http://www.adventar.org/calendars/1666
-なんか最近アドベントカレンダばかり書いている気がする・・...
-正直なところネタ切れなので、ちょっとした思い付きを書きま...
-お、12/10が埋まった!じゃあ、12/15の候補にします。
** (1)
-MS-DOSはFATと呼ばれるファイルシステムを採用していました...
-FAT16はディスクを(最大で)65536個のクラスタの集合と考え...
-ここでFAT16においてクラスタサイズ512バイトというのを考え...
-クラスタサイズ512バイトの場合、FAT16の限界では32MBまで管...
//-ここでFAT16においてクラスタサイズ32バイトというのを考...
//-そもそも512バイトなんていうのは過去の伝統の成り行きで...
//-いやもっと細かい単位で、1バイト単位にすべきだという意...
//-さて、32バイトのクラスタを46080個集めると1440KBになり...
//--仮に1バイト単位で管理した場合、FAT16では64KBまでしか...
//-32バイトのクラスタの場合、FAT16の限界では、2MBまで管理...
** (2)
-たったの32MBしか管理できないというのは使い物になりません...
-そこで、クラスタサイズを一気に256倍にして128KBにしてみま...
|FAT16レベル0|クラスタサイズ512バイト|最大容量32MB|
|FAT16レベル1|クラスタサイズ128KB|最大容量8GB|
|FAT16レベル2|クラスタサイズ32MB|最大容量2TB|
-クラスタサイズ128KBはまだ許せるとして(いやでも許しがた...
-そこで思いついたのですが、FAT16レベル1の中にはFAT16レベ...
-どのレベルのFAT16に入っていてもユーザは特に意識すること...
-それぞれのファイルがどこに入れられるのかは、ファイルサイ...
-仮にちょうど32MBよりも1バイトだけ大きなファイルがあった...
-もしFAT16レベル2しかないときに1234バイトのファイルを保存...
//-たったの2MBしか管理できないというのは使い物になりませ...
//-そこで、クラスタサイズを一気に256倍にして8KBにしてみま...
//|FAT16レベル0|クラスタサイズ32バイト|最大容量2MB|
//|FAT16レベル1|クラスタサイズ8KB|最大容量512MB|
//|FAT16レベル2|クラスタサイズ2MB|最大容量128GB|
//|FAT16レベル3|クラスタサイズ512MB|最大容量32TB|
//-クラスタサイズ8KBはまだ許せるとして、クラスタサイズ2MB...
//-そこで思いついたのですが、FAT16レベル1の中にはFAT16レ...
//-どのレベルのFAT16に入っていてもユーザは特に意識するこ...
//-それぞれのファイルがどこに入れられるのかは、ファイルサ...
//-仮にちょうど512MBよりも1バイトだけ大きなファイルがあっ...
** (3)
-こんなことしなくても、FAT32でいいじゃないかと思うかもし...
-ポイントは、FATを小さく保つことです。FATを全部オンメモリ...
-複数のファイルを開く場合、もしかしたら所属FATが異なるか...
-この階層FAT16にも問題があります。それは空き領域を速く探...
-少し考えました。ディスクのどこかにFAT16の一覧があればよ...
-もし2TBの中をレベル0のFAT16だけで管理するとすると、FAT16...
** (4)
-デジタルカメラはたいてい1MBくらいのファイルを生成すると...
-いつか機会があったらもっときちんと設計してみようと思いま...
** (5)
-もっと具体的に考えます。
struct Fat16Table { // 32バイト.
unsigned char signature[2];
unsigned char crusterSize; // 3:1バイト, 12:512バイ...
unsigned char reserved[9]; // とりあえずオールゼロ.
unsigned short sizeAll, sizeFree; // クラスタの個数...
unsigned char lbaFat[8], lbaCruster[8];
};
-これが連続で並んでいれば、空いているFATは十分に高速に探...
--64バイトで1ファイルにして、以下のようにしたらどうでしょ...
struct Entry {
unsigned int name[40];
unsigned int yy, mmddhhmmss; // 8バイト.
unsigned short cruster0, flags; unsigned int fatId; ...
unsigned int64 size; // 8バイト.
};
** (9) おまけの余談
-http://www.adventar.org/calendars/1666 の空きマスはだい...
* こめんと欄
#comment
終了行:
* FAT16を発展させてみる
-(by [[K]], 2016.12.10)
** (0)
-この記事は、「自作OS Advent Calendar 2016」の12/10が空欄...
--http://www.adventar.org/calendars/1666
-なんか最近アドベントカレンダばかり書いている気がする・・...
-正直なところネタ切れなので、ちょっとした思い付きを書きま...
-お、12/10が埋まった!じゃあ、12/15の候補にします。
** (1)
-MS-DOSはFATと呼ばれるファイルシステムを採用していました...
-FAT16はディスクを(最大で)65536個のクラスタの集合と考え...
-ここでFAT16においてクラスタサイズ512バイトというのを考え...
-クラスタサイズ512バイトの場合、FAT16の限界では32MBまで管...
//-ここでFAT16においてクラスタサイズ32バイトというのを考...
//-そもそも512バイトなんていうのは過去の伝統の成り行きで...
//-いやもっと細かい単位で、1バイト単位にすべきだという意...
//-さて、32バイトのクラスタを46080個集めると1440KBになり...
//--仮に1バイト単位で管理した場合、FAT16では64KBまでしか...
//-32バイトのクラスタの場合、FAT16の限界では、2MBまで管理...
** (2)
-たったの32MBしか管理できないというのは使い物になりません...
-そこで、クラスタサイズを一気に256倍にして128KBにしてみま...
|FAT16レベル0|クラスタサイズ512バイト|最大容量32MB|
|FAT16レベル1|クラスタサイズ128KB|最大容量8GB|
|FAT16レベル2|クラスタサイズ32MB|最大容量2TB|
-クラスタサイズ128KBはまだ許せるとして(いやでも許しがた...
-そこで思いついたのですが、FAT16レベル1の中にはFAT16レベ...
-どのレベルのFAT16に入っていてもユーザは特に意識すること...
-それぞれのファイルがどこに入れられるのかは、ファイルサイ...
-仮にちょうど32MBよりも1バイトだけ大きなファイルがあった...
-もしFAT16レベル2しかないときに1234バイトのファイルを保存...
//-たったの2MBしか管理できないというのは使い物になりませ...
//-そこで、クラスタサイズを一気に256倍にして8KBにしてみま...
//|FAT16レベル0|クラスタサイズ32バイト|最大容量2MB|
//|FAT16レベル1|クラスタサイズ8KB|最大容量512MB|
//|FAT16レベル2|クラスタサイズ2MB|最大容量128GB|
//|FAT16レベル3|クラスタサイズ512MB|最大容量32TB|
//-クラスタサイズ8KBはまだ許せるとして、クラスタサイズ2MB...
//-そこで思いついたのですが、FAT16レベル1の中にはFAT16レ...
//-どのレベルのFAT16に入っていてもユーザは特に意識するこ...
//-それぞれのファイルがどこに入れられるのかは、ファイルサ...
//-仮にちょうど512MBよりも1バイトだけ大きなファイルがあっ...
** (3)
-こんなことしなくても、FAT32でいいじゃないかと思うかもし...
-ポイントは、FATを小さく保つことです。FATを全部オンメモリ...
-複数のファイルを開く場合、もしかしたら所属FATが異なるか...
-この階層FAT16にも問題があります。それは空き領域を速く探...
-少し考えました。ディスクのどこかにFAT16の一覧があればよ...
-もし2TBの中をレベル0のFAT16だけで管理するとすると、FAT16...
** (4)
-デジタルカメラはたいてい1MBくらいのファイルを生成すると...
-いつか機会があったらもっときちんと設計してみようと思いま...
** (5)
-もっと具体的に考えます。
struct Fat16Table { // 32バイト.
unsigned char signature[2];
unsigned char crusterSize; // 3:1バイト, 12:512バイ...
unsigned char reserved[9]; // とりあえずオールゼロ.
unsigned short sizeAll, sizeFree; // クラスタの個数...
unsigned char lbaFat[8], lbaCruster[8];
};
-これが連続で並んでいれば、空いているFATは十分に高速に探...
--64バイトで1ファイルにして、以下のようにしたらどうでしょ...
struct Entry {
unsigned int name[40];
unsigned int yy, mmddhhmmss; // 8バイト.
unsigned short cruster0, flags; unsigned int fatId; ...
unsigned int64 size; // 8バイト.
};
** (9) おまけの余談
-http://www.adventar.org/calendars/1666 の空きマスはだい...
* こめんと欄
#comment
ページ名: