System Programming
4 May 2011

Продолжаем написание операционок. Шаг за шагом

From Sandbox
На написание этого поста меня подтолкнуло то, что посты iley прекратились, а хабралюди всё же хотели посты по осьдеву. Оговорюсь сразу, я сам изучаю и пишу небольшую ось, но изучаю, так что продвигаться будем вместе. Я собираюсь рассмотреть написание систем под защищённый режим для IA-32, рассказать о:
1) Проектировании;
2) Отладке;
3) Работе с графикой;
4) Работе с дисками;
5) Memory management;
6) Task management;
Возможно о чём-нибудь ещё, если это будет востребовано.

I) Проектирование.
Но чтобы не быть голословным, давайте я начну с рассказа про проектирование.

1) Итак, начнём с идеи написания своей оси — зачем же это? Наверное, вы уже знаете ответ — изучение архитектуры, понимание работы процессоров и периферийных устройств. Сие правильно.

2) Следующее — какой тип ядра использовать?
Давайте перечислю виды и особенности ядер:

1) Монолитные.
Название говорит само за себя: огромный кусок кода работает в одном, общем адресном пространстве, трудно расширяем, при падении одной части (функции, не знаю как лучше обозвать) падает всё ядро.

2) Модульные.
Этот тип появился вследствие эволюционирования архитектур систем. Здесь функционал разбит на модули, каждый из которых ответственен за свою, особую функцию. Однако все эти модули работают опять же в едином адресном пространстве, что сказывается на безопасности всей системы. В принципе модульное ядро – подвид монолитного.

3) Микроядро или µ-ядро.
Здесь всё примерно как и в модульном ядре, только сервисы (модули) исполняются в разных адресных пространствах.

Честно говоря, начинать лучше с модульного ядра т.к оно наиболее приземлено и примитивно.

Далее разработчик волен сам придумывать свои концепции, реализовывать их.

Далее решаем, каковой же будет наша система: монотасковой или мульти. На мой взгляд лучше начать с монотасковой, а потом её уже развивать дальше.

Теперь о загрузчике: некоторые используют известные GRUB или LILO, но по-моему лучше писать самому. Примером для разбора лично для меня послужил загрузчик от KOLIBRI, благо проект opensource; берём лучший дебаггер для начинающих кодеров – блокнот и карандаш, и разбираем бутлоадер по полочкам.

Файловая система: вообще лучше начинать с FAT’a, потом переходить уже к другим. Некоторые решают написать свою собственную, и это хорошо – очень хорошо проясняется архитектура и работа с дисковыми накопителями.

Теперь поговорим про сервисы (раз уж принялись за модульное ядро).

Неплохо реализовать следующие:

1) Video service: печать, стандартные функции работы с экраном.

2) Disk service: на него возлагаем все операции с дисками – от перевода THS в LBA до операций с флешками.

3) Memory management service: тут по названию понятно. Хотя это – самая сложная в реализации и теории часть.

4)Task management service: это тоже нелёгкая задача, но мы к ней ещё подойдём.
Вот, в принципе, и первый, общий обзор. До следующего выпуска!

+54
6.8k 75
Comments 56
Top of the day