advcal20161215
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* FAT16を発展させてみる(改訂版)
-(by [[K]], 2016.12.15)
** (0)
-この記事は、「自作OS Advent Calendar 2016」の12/15が空欄...
--http://www.adventar.org/calendars/1666
-なんか最近アドベントカレンダばかり書いている気がする・・...
** (1)
-MS-DOSはFATと呼ばれるファイルシステムを採用していました...
-FAT16はディスクを(最大で)65536個のクラスタの集合と考え...
-ここでFAT16においてクラスタサイズ512バイトというのを考え...
-クラスタサイズ512バイトの場合、FAT16の限界では32MBまで管...
** (2)
-たったの32MBしか管理できないというのは使い物になりません...
-ということで、FAT16だけでどこまで頑張れるかを考えましょ...
-以下はFAT16におけるクラスタサイズと最大容量の対応表です。
|クラスタサイズ512バイト|最大容量32MB|
|クラスタサイズ128KB|最大容量8GB|
|クラスタサイズ32MB|最大容量2TB|
--註:本来のFAT16ではクラスタサイズの最大は64KBですが、こ...
-クラスタサイズ128KBはまだ許せるとして(いやでも許しがた...
-そこで1つのディスクを複数のFAT16で管理します。この領域は...
-どのファイルがどのFATに属するかはOSがファイルのサイズを...
-どのFAT16に入っていてもユーザは特に意識することもなく、...
-この仕組みはディスクをパーティションに分けるとは違います...
** (3)
-複数のファイルを開く場合、それぞれのファイルの所属FATが...
-これらのFAT16はディスク内で一覧があって管理されています...
-もし2TBの中をクラスタサイズ512バイトのFAT16だけで管理す...
-もっと具体的に考えます。
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.15)
** (0)
-この記事は、「自作OS Advent Calendar 2016」の12/15が空欄...
--http://www.adventar.org/calendars/1666
-なんか最近アドベントカレンダばかり書いている気がする・・...
** (1)
-MS-DOSはFATと呼ばれるファイルシステムを採用していました...
-FAT16はディスクを(最大で)65536個のクラスタの集合と考え...
-ここでFAT16においてクラスタサイズ512バイトというのを考え...
-クラスタサイズ512バイトの場合、FAT16の限界では32MBまで管...
** (2)
-たったの32MBしか管理できないというのは使い物になりません...
-ということで、FAT16だけでどこまで頑張れるかを考えましょ...
-以下はFAT16におけるクラスタサイズと最大容量の対応表です。
|クラスタサイズ512バイト|最大容量32MB|
|クラスタサイズ128KB|最大容量8GB|
|クラスタサイズ32MB|最大容量2TB|
--註:本来のFAT16ではクラスタサイズの最大は64KBですが、こ...
-クラスタサイズ128KBはまだ許せるとして(いやでも許しがた...
-そこで1つのディスクを複数のFAT16で管理します。この領域は...
-どのファイルがどのFATに属するかはOSがファイルのサイズを...
-どのFAT16に入っていてもユーザは特に意識することもなく、...
-この仕組みはディスクをパーティションに分けるとは違います...
** (3)
-複数のファイルを開く場合、それぞれのファイルの所属FATが...
-これらのFAT16はディスク内で一覧があって管理されています...
-もし2TBの中をクラスタサイズ512バイトのFAT16だけで管理す...
-もっと具体的に考えます。
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
ページ名: