OSDev
http://osdev.su/

Учебная операционная система PhantomEx
http://osdev.su/viewtopic.php?f=4&t=787
Страница 1 из 1

Автор:  maisvendoo [ 28 авг 2013, 17:13 ]
Заголовок сообщения:  Учебная операционная система PhantomEx

Итак, первичная цель для которой затевался данный проект достигнута. Можно и анонсировать.

PhantomEx - 32-разрядная многозадачная операционная система, предназначенная для изучения принципов организации операционной системы для архитектуры x86.

Цель - написание руководства для начинающих "осеписателей", преследующее задачу раскрыть ряд основных вопросов:
1. С чего начать и какими инструментами можно воспользоваться
2. Работа процессора архитектуры x86 в защищенном режиме: сегментация и прерывания
3. Реализация управления памятью в операционной системе
4. Реализация многозадачности
5. Реализация механизмов взаимодействия пользовательских приложений и ядра ОС.

Этот проект частично обсуждался здесь на форуме, в частности моя борьба с многозадачностью выкатилась в здоровенную ветку, теперь представляю всё сделанное на сегодня. Все аспекты реализации описаны вот тут. Хоть я и приводил уже ссылки на свой блог, но на сегодня он принял удобоваримый вид. Представлено 30 статей по тематике разработки "игрушечной" ОС, а так же выложены исходные коды данной системы, распространяемые по лицензии GPL v3. Все исходники выверены и отлажены, так что проблем с их использованием быть не должно.

Автор:  Yoda [ 29 авг 2013, 11:22 ]
Заголовок сообщения:  Re: Учебная операционная система PhantomEx

Поздравляю с почином!

Автор:  D-S [ 29 авг 2013, 14:56 ]
Заголовок сообщения:  Re: Учебная операционная система PhantomEx

Поздравляю! За ДВА месяца как я понимаю. Что дальше?

Автор:  maisvendoo [ 29 авг 2013, 19:28 ]
Заголовок сообщения:  Re: Учебная операционная система PhantomEx

Yoda писал(а):
Поздравляю с почином!

D-S писал(а):
Поздравляю! За ДВА месяца как я понимаю. Что дальше?

Спасибо :)

Надо разбираться с процессами, ибо многозадачность - это пока что потоки, порождаемые процессом ядра. А для этого нужно уметь грузить исполняемый код в память, поэтому сейчас делаю VFS и рамдиск, чтобы не заморачиваться на данном этапе с программированием драйверов HDD.

Add: Ну, вот, впервые выполнил программу, запускаемую из исполняемого файла формата ELF32
Изображение
Правда из виртуальных машин работает только на VMware, а вот на QUEMU и bochs - сообщение программы на экран не выводится.
На реальном железе работает без всяких проблем
Изображение

Разобрался с проблемой запуска процессов на разных VM. Виноват оказался я, грузил сегменты ELF руководствуясь таблицей секций а не программным заголовком. В итоге работает на всех VM
QEMU
Изображение
Bochs
Изображение
Ну на VMware тоже работает.
Исполняются 2 процесса. Счетчик только у одного, так-как у моих процессов закономерно не работает синхронизация при выделении памяти на виртуальные экраны - она работает для потоков, так что у меня не мьютексы, а критические секции... К тому же у каждого процесса получается свой менеджер памяти, который я статически компоную с программной при сборке - другого способа для тестирования не придумал, кроме как слинковать с приложением объектные модули ядра, потребные для работы, поэтому виртуальные экраны выделяются в одном и том же месте. В общем, полный бардак, но радует что я приручил таки "эльфов" :)

Add:Проблему разделения виртуальных экранов удалось конечно решить статическим выделением памяти под них
Изображение
Теперь это две независимых программы, каждая в своем адресном пространстве, у каждой свой счетчик и загружены они с RAM-диска из ELF-файлов. Это демонстрация, но стоит задуматься о библиотеке ядра, с которой динамически компонуются все приложения. А то в каждой программе всё равно половина ядра прикомпилена

Автор:  maisvendoo [ 19 сен 2013, 20:54 ]
Заголовок сообщения:  Re: Учебная операционная система PhantomEx

В общем, отставил в сторону APIC, пока есть масса незавершенки в других направлениях.
Система обретает человеческий вид, приближающийся к годной версии 0.0.1

Реализовано:

1. Виртуальная файловая система, работающая с RAM-диском собственного вырвиглазного формата (взят пример из мануала JM с собственными доработками и доделками), но работающая (пока нет драйвера HDD, нет и много другого)
2. Многозадачность на уровне процессов: загрузка исполняемых файлов формата ELF32 с RAM-диска в оперативную память, запуск на выполнение, корректное завершение. Естественно это подразумевает работу кода в различных ВАП и прочее.
3. Реализованы системные вызовы для создания, завершения процессов и потоков, а так же постановка потоков на паузу (suspend)
4. Реализован механизм управления динамической памятью на прикладном уровне (память типа "куча", своя для каждого процесса)
5. Создан простейший механизм IPC - посылка сообщений от одного процесса к другому
6. Написан драйвер клавиатуры, взаимодействующий с приложениями через механизм обмена сообщениями. Все драйвера планируется исполнять в ring 3
7. Реализован модуль работы с виртуальными консолями - пока что доступна только одна консоль, однако скоро можно будет переключатся
8. Подала первые признаки жизни и разрабатывается дальше командная оболочка - PhantomEx Shell (pexsh). Командная оболочка уже необходима, а портировать какую-либо готовую оболочку в свою систему я наверное долго не смогу ещё

На скриншоте - запуск программы из PhantomEx Shell (часики в правом верхнем углу - да, они тикают)
Изображение

P.S.: Исходники пока не показываю - доведу до ума шелл, тогда представлю сорцы :)

Автор:  Himik [ 19 сен 2013, 21:27 ]
Заголовок сообщения:  Re: Учебная операционная система PhantomEx

По Local APIC и Timer ещё есть дельная книженция "Программирование на ассемблере на платформе x86-64", её можно найти и скачать в электронном виде. Там в главе 6.1.8 даётся рабочий код.

Автор:  maisvendoo [ 19 сен 2013, 21:46 ]
Заголовок сообщения:  Re: Учебная операционная система PhantomEx

Himik писал(а):
По Local APIC и Timer ещё есть дельная книженция "Программирование на ассемблере на платформе x86-64", её можно найти и скачать в электронном виде. Там в главе 6.1.8 даётся рабочий код.

Оно?
Цитата:
Аблязов Р. 3. Программирование на ассемблере на платформе х86-64. - М.: ДМ К Пресс, 2011. - 304 с.: ил.

Ооо, вот это книжища!!! ОГРОМНОЕ спасибо!

P.S.: Давно хотел что-то, актуальнее Зубкова...

Автор:  maisvendoo [ 20 сен 2013, 23:28 ]
Заголовок сообщения:  Re: Учебная операционная система PhantomEx

Итак, комманд шелл продвигатеся вперед.

Реализованы:

1. Передача строки с параметрами внутрь программы
2. Фоновый запуск программы с параметром &, как в юниксах.

При запуске без амперсанда шелл автоматически ставит сам себя на паузу (останавливается работа процесса с помощью suspend). При исполнении системного вызова exit() при завершении запущенного процесса, проверяется, был ли поставлен на паузу родитель, и если был, то он возобновляется. Родителем канеш является шелл.
С амперсандом шелл просто продолжаетс свою работу параллельно с запущенным процессом. Вот так мне представляется механизм работы командной оболочки

На скрине - сеанс тестирования данного функционала (hello выводит текст и циферки в область видеопамяти, не перекрываемую буфером виртуальной консоли с фиксированной позиции)
Изображение

Автор:  maisvendoo [ 04 окт 2013, 08:00 ]
Заголовок сообщения:  Re: Учебная операционная система PhantomEx

Итак, я долго думал прежде чем написать этот пост, но всё же пишу и анонсирую версию PhantomEx 0.0.1

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

1. Исходный код ядра, приложений и утилиты генерации RAM-диска
2. Образ RAM-диска, с установленными приложениями
3. Образ HDD с установленной системой в формате *.vmdk
4. Образ HDD с установленной системой в формате *.vdi

Скриншот экрана после загрузки
Изображение

Реализован простейший пользовательский интерфейс в виде самописной командной оболочки pexsh (PhantomEx Shell). Теоретически система готова к тому чтобы под неё можно было вести разработку приложений. Формат исполняемых файлов - ELF32.

Пока что работы над проектом приостанавливаю, есть дела по важнее. Однако при первой же возможности к нему вернусь.
Реализованные на данном этапе вещи уже довольно серьезная разработка, не поделится всем наработанным кодом с сообществом OSDev'а было бы черной неблагодарностью. Представленный исходный код и бинарные файлы можно использовать как угодно, в рамках лицензии GPL v. 3

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/