- Статьи для начинающих -

   
- Назад на оглавление -
Дизайн ОС (по мотивам alt.os.development)

Ian Nottingham:
> Дарова...Я уже долго пытаюсь начать писать свое ядро, но все примеры,
> которые я видел, уже зашли так далеко, что я нихрена не могу понять,
> с чего начинать и все такое. У кого нибудь есть примеры ранних этапов
> разработки? Или какой-нибудь списочек - что имеено должно быть сделано

Alistair J. R. Young:
Первое, что я скажу - это то, что стандартного пути разработки ядра ОС - *нет*. Одна из прикольных вещей, - каждый кусочек ОС хоть немного, но зависит от другого, поэтому приходится разрабатывать все одновременно (ну по крайней мере полуработающие заглушки).

Если ты начинаешь с самого нуля, то вероятно первое, что нужно сделать - это написать пакет функций и макросов, которые облегчат программирование архитектуры x86, и следовательно - жизнь разработчику ОС. Ну а человек с большими амбициями может даже попытаться сделать эти функции портабельными :)

(Если ты не заинтересован в написании низкоуровнего, взаимодействующего с аппаратурой кода, то я посоветую Utah Oskit, где много чего было на эту тему сделано) Так же тебе понадобится разработать пакет стандартных библиотечных функций, которые бы могло использовать ядро: strcmp(), strcpy().. плюс отладочные функции вроде assert() и panic().

В это же время придется принять архитектурные решения, от которых будет зависеть дальнейшая разработка "высокоуровневой" части ОС. Чем раньше ты сделаешь выбор, тем лучше, т.к. переписывать уже написанный код - не самое приятное занятие.

Первая головная боль - модель памяти. Сегментация И/ИЛИ страничная адресация? Похоже, что в наше время большинство людей предпочитают страничную адресацию без сегментации, потому что модель памяти 'flat' более приятна для разработчика, кроме того сегментация непортабельна в отличие от страничной адресации

Где в памяти будет находится ядро? Будет ли у процессов отдельные адресные пространства, или все будут находиться в одном? Как насчет виртуальной памяти?

Теперь многозадачность/многопоточность. Если конечно ты решишь их использовать. Возможно ли, что когда-нибудь эта система будет работать на многопроцессорной машине? Если да, то лучше делать всю синхронизационную фигню в самом начале, ибо вставлять ее потом - хуже ночных кошмаров.

Какая будет модель процессов? Обычная двухуровневая (процессы и потоки), или нечто более другое? (Я использую трехуровневую (ИнтерактивнаяСессия владеет процессами, а те - потоками). Собираешься ли ты использовать TSS при переключении задач, или используешь программное переключение?

Системные вызовы. Как ты их сделаешь? Здесь есть несколько вариантов: Linux использует программные прерывания, другие варианты - шлюзы вызова. Можно сделать только один шлюз вызова, для вызова функции межпроцессного взаимодействия, и реализовать все остальное внутри IPC (даже при взаимодействии внутри ядра).

Кстати, об IPC - Порты сообщений? Pipes? Очереди? Локальные сокеты? Все вышеперечисленное? Лучше подумать об этом сейчас, потому что выбор модели IPC очень сильно повлияет на ядро. Еще следует подумать о сетевом взаимодействии.

Драйвера устройств - что ты думаешь о них? И о файловой системе. Можно использовать UNIX-модель - где все является файлами.

Безопасность! Если в твоей системе она будет, то опять же нужно подумать о ней в самом начале. Вставлять безопасность потом еще хуже чем SMP, если ты конечно не хочешь, чтобы твоя система напоминала дуршлаг. Есть множество способов реализовать секьюрность, например использовать ACL (листы контроля доступа).

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

Перейдем к практике. Как только ты начнешь кодить ОС, не забудь о примитивном драйвере консоли (только для того, чтобы выводить информацию на экран). Пытаться отладить ядро ОС без printf() - безумство.

Первое что тебе понадобится - это загрузчик. Можно написать свой, а можно заюзать что-нибудь вроде GRUB. (свой написать ты всегда успеешь).

Затем напиши что-нибудь, что выведет надпись на экран. Как только ты *увидишь*, что твоя ОС делает что-то, сразу почувствуешь прилив сил!

Следующее над чем хорошо бы поработать - обработка исключений. Это здорово поможет в отладке

Ну а все остальное очень сильно зависит от принятых решений по поводу дизайна...

Хостинг от uCoz