OSDev

для всех
Текущее время: 22 ноя 2017, 13:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: 28 авг 2013, 17:13 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
Итак, первичная цель для которой затевался данный проект достигнута. Можно и анонсировать.

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

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

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


Последний раз редактировалось maisvendoo 29 авг 2013, 23:33, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 авг 2013, 11:22 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 938
Откуда: Дагоба
Поздравляю с почином!

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 авг 2013, 14:56 
Аватара пользователя

Зарегистрирован: 14 май 2012, 22:17
Сообщения: 96
Поздравляю! За ДВА месяца как я понимаю. Что дальше?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 авг 2013, 19:28 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
Yoda писал(а):
Поздравляю с почином!

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

Спасибо :)

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

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

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

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


Последний раз редактировалось maisvendoo 31 авг 2013, 00:43, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 20:54 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
В общем, отставил в сторону 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.: Исходники пока не показываю - доведу до ума шелл, тогда представлю сорцы :)


Последний раз редактировалось maisvendoo 19 сен 2013, 21:40, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 21:27 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
По Local APIC и Timer ещё есть дельная книженция "Программирование на ассемблере на платформе x86-64", её можно найти и скачать в электронном виде. Там в главе 6.1.8 даётся рабочий код.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 сен 2013, 21:46 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
Himik писал(а):
По Local APIC и Timer ещё есть дельная книженция "Программирование на ассемблере на платформе x86-64", её можно найти и скачать в электронном виде. Там в главе 6.1.8 даётся рабочий код.

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 сен 2013, 23:28 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
Итак, комманд шелл продвигатеся вперед.

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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 04 окт 2013, 08:00 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
Итак, я долго думал прежде чем написать этот пост, но всё же пишу и анонсирую версию PhantomEx 0.0.1

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

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

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

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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB