効率的なファイル制御ブロックの格納

私は現在、Javaでファイルシステムを作成する課題を持っています。私はそれをFATのように実装しようとしています。私の心配は、私が効率的に各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     |
|___________________|

私がFCBを読んでみたいと思ったら、私は次のことをします:

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. 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の場合、各エントリは同じサイズです。ディレクトリー項目は、ファイル名を検出する手段、データの検索を開始する場所、プロパティー・データ(ファイル・サイズや許可など)の検索場所を提供する必要があります。一部の人はこの情報をすべてエントリーの一部として直接保管しますが、他のエントリーはどこから検索を開始するかを教えてくれます。

私はこれが役立つことを願っています

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です