FoolFS

Материал из Прулепедии
Перейти к: навигация, поиск

Fool file system для OS Proolix

Описание

Статус: реализовано и протестировано в операционной системе Proolix (github коммит от 1 августа 2017 года и соответственно, все следующие коммиты. При разночтении между данным описанием и исходниками верить надо исходникам, они рабочие и протестированы!)

Носитель состоит из 512 байтных блоков, нумерующихся от 0 до FFFF

соответственно можно нумеровать FFFF = 65535 блоков по 512 байт или 32М пространства

мало, но мне хватит (а в расширенной спецификации extended fool fs блоки будут нумероваться от 0 до FFFFFFFF)

0 блок - MSDOS подобный бутсектор (для совместимости, загрузки и такого прочего)
далее 128 блоков (64К) зарезервированы под ядро (блоки с номерами 1-128)
129-й блок - суперблок fool fs

в суперблоке хранится (для унификации ВСЕ поля двухбайтовые!)

Magick - 0xBEBE
descr - тип файловой системы (пока не используется, это на будущее, если появятся несколько типов FoolFS)
StartRoot - блок начала корневого каталога (корневой каталог будет у нас обычным файлом)
EndBl - номер последнего блока на устройстве
EndFormatBl - номер последнего отформатированного блока
 (так надо, чтобы при начальном форматировании диска не было нужды очищать все блоки)

(остальное пространство суперблока не используется, но его мы оставим для будущих версий)

В корневом каталоге находятся записи о файлах

У каждого блока файла (и корневого каталога тоже, это тоже файл!) первые три байта служебные: 1 байтовый дескриптор и 2 байтовый номер следующего блока в цепочке

дескрипторы:
0 - блок свободен
1 - блок несвободен (занят)

остальные значения зарезервированы для будущих версий

номер следующего блока равен нулю, если блок последний


Каталожная запись про файл

имя файла - N байт
первый блок файла - 2 байта
длина (размер) файла - 4 байт
байт флагов файла - 1 байт
дата создания файла - 4 байт
дата изменения файла - 4 байт

Жирным шрифтом выделены атрибуты файла, которые будут реализованы в коде в первой версии (это тот минимум, без которого файловая система вообще не может существовать)

Общая длина N+15

Для N=15 Общ длина записи 30 байт На блок будет (512-3)/30=16 записей и 29 байт свободно

Для N=16 Общ длина записи 31 байт На блок будет (512-3)/31=16 записей и 13 байт свободно


Файловую систему можно расширить до многоуровневых каталогов, как в UNIX

и до 4 байтной нумерации блоков

и до длинных имен файлов (как в VFAT, а именно, если имя длинее, чем N, то после записи про файл будет идти псевдозапись (или несколько псевдозаписей) с остатками длинного имени

ИДЕЯ: может сделать псевдозаписи после записи о файле с коментами о файле (типа дескрипшин длиной не более 30 байт, а первый байт псевдозаписи - ее тип, например 01 - длинное имя a-la VFAT, 02 - дескрипшн, 03 - DRM info (TROLLFACE) )

еще можно расширить до использования не 512-байтных блоков, а кластеров по N блоков (число N будет указано в суперблоке, где ж еще)

и до использования не всего жесткого диска, а одного раздела (чтобы можно было держать несколько ОС на компьютере)

ну и что, что это будет тормозить, и пространство используется неэффективно, но зато программируется легко, идите в жопу

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


Примечание для знатоков. Вначале я вообще хотел сделать как в RT-11. Там файлы могли занимать только непрерывный экстент на диске. И поэтому при открытии файла ему выделялась половина самого большого свободного экстента. А для второго файла - половина оставшейся половины. Идея ясна? Такая дихотомия до добра не доведет. И программы, открывающие на запись 2-3 файла будут страдать (например, компилятор пишет в объектный файл, пишет листинг, и еще что-нибудь. Со степенями двойки лучше не шутить)

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты