2011-11-13 17 views
0

私は現在、Javaでファイルシステムを作成する課題を持っています。私はそれをFATのように実装しようとしています。私の心配は、私が効率的に各FCBを保管したり、読んでいないことです。各ファイルのように、私が現在持っているFCBを、持っている:私はFCBを読みたいときにファイル制御ブロックを効率的に保存する

___________________ 
|     | 
| size of file name | 
|___________________| 
|     | 
| file name   | 
|___________________| 
|     | 
| # of data pointers| 
|___________________| 
| data pointer #1 | 
|-------------------| 
| bytes to read  | 
|-------------------| 
| data pointer #2 | 
|-------------------| 
| bytes to read  | 
|-------------------| 
| ...    | 
|-------------------| 
| data pointer n | 
|-------------------| 
| bytes to read  | 
|___________________| 

、私は次のようにします。最後に

1. Get the first four bytes 
2. Convert to int -> bytes in file name 
3. Read that many bytes for file name 
4. Read next four bytes 
5. Convert to int -> number of pointers 
6. Read 4 * number of pointers 
    6a. Read address from pointer #1 
    6b. Read number of bytes, starting from address 

、私のファイルシステムは

として保存されます
___________________ 
| number of pointers| 
|-------------------| 
| FCB#1    | 
|-------------------| 
| ...    | 
|-------------------| 
| FCB N    | 
|-------------------| 
| Data    | 
|     | 
|     | 
|___________________| 

FCBを保存するときにオーバーヘッドが高すぎることが懸念されます。 FATのために、私はそれをやるべきですか、それとも私はそれを完全に誤解していますか?

+1

「保管のオーバーヘッド」とは、具体的にはどういう意味ですか? FCBを維持するために必要なメモリは?それをディスクに書き込むコスト?それを解析するコスト(バイトを変換する[] - > intなど)?もう1つのこと - 6aと6bで読み込んだデータは何ですか - それはFCBデータか実際のファイルデータですか? –

答えて

1

私はいくつかのことを誤って理解しているかもしれないと思っています。私は、いくつかの異なる種類のデータを一緒に混在させて検出し、経験から混乱につながる可能性があります。そこが、ファイルシステムによっては

1. File data : the file's data. 
2. File meta-data : tells you about the file data (where it is found, permissions, ...) 
3. File system meta-data : tells you what's free to use and what is not 

私は私の時間にいくつかのファイルシステムを実装しました、と私はそれが非常に便利なデータの種類にできるだけ多くを分離することが分かってきましたいくつかの重複する。例えば、DosFSで使用されるようなFATベースのFSでは、ディスクは本質的に2つの部分、すなわちファイルアロケーションテーブル(FAT)とデータ空間とに分割される。 FATは、単にデータスペース内のどのクラスタ(ディスクブロック)が割り当てられているかを識別するエントリのテーブルです。しかし、...それはトリックのカップルを利用してメモリを節約

1. Each cluster in the data space maps to a unique entry in the FAT. 
2. The FAT entry contents identify the NEXT cluster that contains data (it's a linked list). 
3. Special FAT entry values are used to mark a free entry, and the end of the chain. 
4. Each cluster is the same size. 

ディレクトリを助けるために、特別なルールに従うような特別なファイルと考えることができます。 FSに応じて、ディレクトリエントリは固定サイズであっても可変サイズであってもよい。従来の8.3命名規則を使用したFATベースのDosFSの場合、各エントリは同じサイズです。ディレクトリー項目は、ファイル名を検出する手段、データの検索を開始する場所、プロパティー・データ(ファイル・サイズや許可など)の検索場所を提供する必要があります。一部の人はこの情報をすべてエントリーの一部として直接保管しますが、他のエントリーはどこから検索を開始するかを教えてくれます。

こちらがお役に立てば幸いです。

+0

それは多くの助けになりました!私はあなたができるならば、FATテーブルに関する質問があります。 fatテーブルを読んでから、各クラスタがどのファイルに属しているかをどのように知っていますか?これは、ファイルメタデータが各クラスタの一部でなければならないことを意味しますか? –

+0

クラスタが特定のファイルに属しているかどうかを確認するには、ファイル名を含むディレクトリエントリに格納されている開始クラスタ番号で始まるリンクリストに従う必要があります。リンクされたFATエントリのリストのどれも、別のファイルと相互リンクする必要はありません。 DosFSの場合、FATはファイルシステムメタデータとファイルデータの両方に使用されます。ただし、重要な点は、開始クラスタ(ファイルメタデータの一部)がディレクトリレコードに格納されていることです。再び、これが役立つことを願っています – Sparky