Приступая к разработке операционной системы, я ставил перед собой задачу ознакомиться с принципами написания больших программ на языке ассемблера, а также подробно изучить архитектуру микропроцессора Intel 8086. Эти две цели я считаю достигнутыми. Я рассчитывал написать систему, сходную по функциональности с CP-M, или немного более совершенную. Вот список функций и свойств системы, которые я хотел реализовать:
При разработке системы руководствовался принципами минимализма, простоты и функциональности. Я поверхностно изучил устройство систем CP-M, MS-DOS, MINIX и других. Я сделал следующие выводы:
Система состоит из трех модулей: загрузчика, ядра и командного интерпретатора (shell).
Загрузчик загружает (как это ни странно ;-) ядро в память, настраивает таблицу векторов прерываний, запускает процедуру инициализации ядра, затем загружает командный интерпретатор и передает ему управление. Навсегда.
Ядро находится в памяти на протяжении всей работы системы и занимается обработкой прерываний, вызванных программами пользователя.
Командный интерпретатор представляет собой обычную программу уровня пользователя. При желании он может быть заменен на любой другой по усмотрению пользователя.
Функции для включения в ядро я выбирал следующим образом: из списка функций MS-DOS я исключил лишние, неподходящие и легко реализуемые средствами BIOS функции. Я рассчитывал получить интерфейс из 10-20 функций.
Выбирая файловую систему, я сомневался между FAT и своей собственной системой, сделанной по аналогии с FAT, но более простой. Выбор был сделан в пользу собственной системы, в связи с некоторыми техническими неудобствами реализации FAT и некоторыми неясными деталями в ее устройстве. Моя файловая система не поддерживает каталоги, поскольку система создана исключительно для работы с диска 3.5'', и усложнение кода в данных условиях не оправдано. Было решено реализовывать следующие функции API для работы с файловой системой:
Реализацию каких-либо других операций для работы с файловой системой я считаю неоправданной в данном случае. Подробнее о функциях VictoriaAPI для работы с файловой системой см. Руководство программиста.
Для исполняемых файлов был выбран формат, аналогичный DOS COM (COM — Copy Of Memory). Для программ пользователя используется модель памяти TINY, то есть код и данные любой программы располагаются в одном сегменте размером в 64 килобайта. Такая модель памяти ограничивает размер исполняемого файла, но для данной операционной системы эта проблема не существенна. Исполняемый файл представляет собой последовательность инструкций и данных, которая целиком и без каких-либо изменений загружается в память. Управление передается в начало блока. Подобное устройство исполняемых файлов позволяет без особого труда переносить под мою операционную систему программы, написанные для MS-DOS. При этом достаточно заменить системные вызовы DOS на аналогичные вызовы Victoria с учетом ограничений, накладываемых системой.
Было запланировано написать программу для Windows и/или UNIX, обеспечивающую доступ к файловой системе Victoria (VictoriaFS). Под Windows такая программа может быть написана в виде плагина к FAR Manager (коим я активно пользуюсь). Однако, на деле оказалось, что особой нужды в такой программе нет: VictoriaFS настолько проста, что можно без труда работать с её файлами "вручную".