|
|
Oперационная система
Miraculix OS
Введение
Цель
проекта. Написать многозадачную, многопользовательскую
операционную систему реального времени, которую можно будет
устанавливать на любой носитель (жесткий диск, дискета, CD-R,
CD-RW, Flash). Система сколько угодно расширяемая, но при этом
компактная. Основная часть ОС: первичный загрузчик, ядро,
scheduler, базовые драйвера и приложения без проблем влезут на
дискету. Поэтому основа - микроядро. Система предназначена для
компьютеров на базе ПК. На данный момент основной инструмент -
FASM, в будущем возможно для системы будут созданы компиляторы
C/C++, Basic, Pascal.
Архитектура системы.
Ядро.
По производительности микроядро операционной системы
Miraculix не уступает монолитным ядрам. В кольце 0 выполняется
только код микроядра. Исключение составляет модуль TRAP.SYS он
перехватывает все исключения, при возникновении ошибки в коде
ядра, если код выполняется в кольце 0 (SYSTEM FAILURE).
Базовым элементом API является обработчик прерывания 0x90.
Функции ядра: управление виртуальной памятью (в системе
используется страничная модель памяти), функции взаимодействия
процессов, управление процессами, и функции синхронизации.
Многозадачность. В системе используется программная
многозадачность. Для всех процессов и потоков выделен всего
один "физический" TSS. Его значение меняется каждый раз при
переключении на другую задачу. Значение карт I/O и INT (только
для V86-задач) не меняется. Это позволяет держать в системе
сколько угодно процессов и потоков, это было бы невозможно,
если каждому процессу и потоку выделялось по TSS, т.к.
количество системных дескрипторов ограничено: 8192. Функции
синхронизации: усыпить_процесс (число_квантов),
получить_или_продлить_выполнение (PID, число_квантов),
получить_состояние (PID).
Организация памяти. Все адресное пространство можно
разделить на две области: область аппликаций и системную (ядра,
драйверов/модулей). При запуске 32-битного приложения все
сегментные регистры (DS, ES, GS, FS, CS), описывают все 4Гб
памяти. Модель памяти - страничная, у каждого процесса своя
таблица страниц, её размер зависит от потребностей приложения.
Память выделяется динамически (в процессе выполнения) в
страницах. Поток наследует все адресное пространство процесса
которым он был создан. При создании V86-задачи, в память новой
задачи копируется таблица прерываний и BIOS также, в опциях
можно указать присутствие / отсутствие A20. Функции менеджера
памяти: выделить_память (число_страниц), освободить_память (число_страниц),
отобразить_память (физический_адрес, число_страниц). в
параметре физический_адрес можно указывать только адреса
0xA0000...0xFFFFF и адреса определенные с помощью PCI.
Загрузка. На данный момент реализована загрузка
системы с 3.5" дискеты. Этапы загрузки:
1) Boot-сектор загружает первичный загрузчик с дискеты.
2) Первичный загрузчик (AXE.COM) проверяет наличие ядра на
дискете, если он его не находит, то открывает окно-меню со
всеми файлами и папками на дискете, в этом режиме можно
запускать DOS-программы, 32-битные бинарники. Если файл "KERNEL.SYS"
присутствует на дискете, первичный загрузчик грузит весь
корневой каталог дискеты в память, создавая RAM-Disk. В ядре
отсутствуют функции для работы с дисками, файловыми системами.
Но, ядро должно запустить вторичный загрузчик, для этого
первичный загрузчик создает RAM-Disk по адресу 0x300000.
Примечание: первичный загрузчик после завершения своей работы
не удаляется из памяти, он остается резидентным. И получает
управление в случае возникновения фатальных ошибок.
3) Получив управление, ядро загружает вторичный загрузчик (он
же первый процесс в системе, в микроядре L4 он называется
sigma0), с RAM-Disk'a, и загружает регистр процессора TR.
4) Вторичный загрузчик загружает все драйвера и модули,
прописаные в файле "AUTOEXEC.INI". Строгая последовательность
не обязательна, загрузку драйверов и модулей можно выполнять в
любом порядке (т.к. система многозадачная) но нужно, что бы
драйвер FDC попал в первый мегабайт физической памяти.
Потому-что при работе с дискетами в драйвере FDC используется
16-битный контроллер DMA... На втором месте по важности
является модуль TRAP.SYS. (его можно поставить на последнее
место, но при возникновении ошибки в каком-нибудь из модулей
или драйверов загружаемых перед ним возникнет неопределенная
ситуация...). Ещё можно прописать загрузку GUI, альтернативной
консоли, или оболочку типа Norton Commander.
Поддержка DOS и 16-битных приложений. На данный
момент реализован запуск 16-битных приложений. Но, не налажена
система прерываний в V86. В нормальной ОС V86 поддержка должна
быть. Хотя бы для вызова 16-битного BIOS'a. Некоторые вещи не
стандартны, например: GFX, SMBus, DDC, APM.
Inside Miraculix [12.02.2005]
All right reserved. Copyright © 2003-2005
Kreoton
|

|