Отправляет email-рассылки с помощью сервиса Sendsay

Операционная система Proolix

За 2005-10-26

Берем помощь клуба

Написание собственных микрооперационных систем - одно из любимых
времяпровождений программистов. Оно помогает изучить архитектуру
процессора и прочие тонкости, да и вообще, ОС - это opus magnum и каждый
geek мечтает написать свою ОС.

Вот я, например, иногда пописываю ОС Proolix. Иногда ко мне на огонек
прибиваются другие гики.

Вот например, пришло письмо от Николая Шатохина:

начало цитаты

Посмотрите на мою систему http://whitecross.narod.ru/os_21_10_2005.zip

Загрузчик bootsect загружает код находящийся после него (image.bin образ
для записи на дискету). sb.bin с прилинкованным (по incbin) к нему
kernel.bin собственно само ядро. Если грузить его с помощью bootsect то
все нормально, на дискете тогда нет файловой системы. А если грузить с
помощью загрузчика boot.bin то система перезагружается при загрузке. В
чем проблема?

конец цитаты

Хакеры и хэккеры, желающие занять время и мозги могут поковырятся в этой
проблеме

   "Serge Pustovoitoff (Prool)" 2005-10-26 17:07:48 (#463120)

Q & A

Hi, All!

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

Вот еще свежее:

> Перерыл исходники пруликса, но не нашел там модулей файловой системы.
> Не подскажите, как они называются?
> З.Ы. Если на дискете нет файловой системы, то сможет ли ось читать и
> записывать на нее

> файлы (если в ней реализована fat12)

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

   2005-10-26 12:20:15 (#462975)