Q & A
Hi, All!
Как я уже говорил, иногда свои ответы на вопросы, касающиеся Пруликса,
полученные по е-мейлу или в icq я дублирую сюда, для всеобщего сведения.
Учитывая то, что у Пруликса документация и комментарии в исходниках
очень скудные, эти ответы, я думаю, будут полезны.
Вот еще свежее:
Начну со второго вопроса. Если на диске нет файловой системы, то писать
на диск (дискету) файлы невозможно в принципе, так как файлы вне
файловой системы не существуют. Если на диске нет файловой системы, то
адресуемой единицей информации, из которых состоит диск, будет
физический блок - сектор (размер сектора 512 байт). Для дискет еще можно
писать читать целыми дорожками.
А если на диске есть файловая система, то появляется понятие логического
блока. Для FAT-12/FAT-16/FAT-32 это кластер, размер кластера может быть
разным от 1 сектора и больше. Размер кластера в секторах указан
бут-секторе в переменной ClustSiz (файл src/boot/boots.asm Proolix-d)
Теперь о работе с файловой системой. Эта работа реализована в системе
Proolix-d. Там реализована работа с FAT-12 и FAT-16. Это все реализовано
в ядре, см. каталог src/kernel:
Файл io.c. Функции:
open() - открыть файл
read() - читать из файла
write() - писать в файл
close() - закрыть файл
absread.c и abswrite.c - чтение и запись физического блока (сектора) на диск
cluread.c - чтение кластера
sec4clu.c - вычисление номера первого сектора кластера
dir.c - работа с каталогами
Файл k2.c:
Функции
LinkClu() - определение по номеру кластера номера следующего кластера в
цепочке, составляющей файл
GetFreeClu() - получить номер свободного кластера
AppendClu() - формирование цепочки кластеров (цепляем к цепочке еще один
кластер)
NextClu() - вычисление следующего кластера и загрузка его в кеш
В упрощенном виде работа с FAT реализована в загрузочном секторе.
Загрузочный сектор Пруликса умеет найти корневой каталог, в нем файл по
имени BOOT, загрузить его и передать ему управление
Prool