Эффективное хранение блоков управления файлами - PullRequest
0 голосов
/ 13 ноября 2011

В настоящее время у меня есть задание для создания файловой системы на 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 Ответ

1 голос
/ 13 ноября 2011

Я подозреваю, что вы, возможно, немного неправильно поняли пару вещей, или просто нуждаетесь в небольшом руководстве о том, как лучше структурировать ваши данные.Я обнаружил несколько разных типов данных, смешанных вместе, и по опыту это может привести к путанице.

В свое время я реализовал несколько файловых систем, и мне было очень удобно разделять столькоВозможные типы данных:

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

В зависимости от файловой системы возможны некоторые совпадения.Например, в FS, основанной на FAT, такой как используемая DosFS, диск по существу делится на две части - таблицу размещения файлов (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 записи каталога могут иметь фиксированный размер или переменный размер.В случае DosFS на основе FAT, использующей классическое соглашение об именах 8.3, каждая запись имеет одинаковый размер.Запись в каталоге должна предоставить вам средства для определения имени файла, с чего начать поиск его данных, а также где найти данные о его свойствах (например, размер файла и разрешения).Некоторые будут хранить всю эту информацию непосредственно как часть записи, другие скажут вам, с чего начать ее искать.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...