Это моя вторая операционная система, поэтому она называется Duo (это означает "два" с какого-то там языка).
Инструкция по запуску:
- Скачайте файл duo.iso из этого проекта
- Запишите этот образ на CD/DVD и загрузитесь с него либо загрузите виртуальную машину с этого образа
- Запустится программа по обращению матриц
- Вот и всё, что умеет моя ОС :)
Естественно, моя операционка может работать поверх голого железа.
Моё ядро Multiboot 2 совместимо (если для кого-то это имеет хоть какой-то смысл).
Лицензия: GPL3+.
Это не ОС и даже не ядро, так как настоящее ядро должно уметь запускать пользовательские программы. Это всего лишь программа, которая умеет запускаться поверх голого железа.
Duo может якобы запустить пользовательскую программу (а именно программу для обращения матрицы), но на самом деле программа попросту запускается в режиме ядра. Без всякой защиты памяти, без абстракции от оборудования и т. д. Естественно, запустить две программы одновременно невозможно.
В Duo нет элементарных вещей, например, файлов, работы с временем, процессов, не говоря уж об командном интерпретаторе, компиляторе и тем более графическом интерфейсе.
В Duo нет даже нормальной стандартной библиотеки языка C. Вместо этого есть предельно маленькая библиотека под названием FUS, которая поддерживает лишь некоторые функции. Например, в ней есть printf, но нет scanf o_O. FUS означает Fake User Space, что можно перевести как "ложный user space" или "шуточный user space", потому что это никакой не user space, а очень даже kernel space.
Вдобавок куча кода попросту стырена с bkerndev (это такое руководство для новичков по написанию ядер). Весь этот код лежит в специальной папочке и я его даже не понимаю.
Также, чтобы портировать нормальное, хорошое приложение (которое, как я уже говорил, обращает матрицы; оно было изначально, я его написал в виде домашнего задания по программированию), мне пришлось его сильно переделать, а именно:
- Оригинальный Makefile удалён (так как мы должны собрать не отдельное приложение, а вкомпилить прогу в ядро)
- Удалена возможность чтения из файла (так как в Duo файлов нет)
- Убран подсчёт времени (этого нет в моём ядре)
- По непонятным причинам мне пришлось удалить моё сверх-оптимизированное блочное умножение (кстати, кому надо, могу скинуть) и заменить его на обычное. То есть мало того, что в Duo ни фига нет, так в нём ещё есть какой-то неизвестный баг
- Весь русский вывод программы пришлось перевести, так как русский в Duo не работает
- argc и argv удалены, так как в Duo такого нет. Вместо этого программа всё читает с клавиатуры. Причём в Duo нет даже scanf! Поэтому чтение производится при помощи fgets/atoi
- Duo не умеет печатать вещественные числа, поэтому перед выводом мне пришлось преобразовать их к типу int. Более того, Duo не умеет печатать отрицательные числа, поэтому перед выводом я тупо делаю fabs. То есть весь вывод является не более чем враньём
Короче, Duo - дерьмо.
Если вам всё ещё что-то непонятно, прочитайте этот IRC лог:
xxx: как то забавно ты пишешь. одна программа без защиты памяти, без диспетчеризации, какая то библиотека, что это вообще такое ?
xxx: стэнд алоне какой то чтоли, дос программа, в реал моде или что ?
safinaskar: это я начал писать ос
safinaskar: пока начал писать ядро (kernel space)
safinaskar: в user space не вышел
safinaskar: поэтому нет нормальных процессов
safinaskar: и нет защиты памяти
xxx: кернел и юзер это термины оси?
safinaskar: да
safinaskar: а ещё это термины процессора
xxx: тоесть это реал моде процессора ?
safinaskar: да
xxx: язык как называется ?)
safinaskar: на котором duo? c++
xxx: ясно
safinaskar: и работает она не из доса, а на реальном железе
Зачем я написал свою ось? Дык я только начал. Я её допишу и это будет нормальная, хорошая ось. Естественно, даже тогда она никому не будет нужна. Я её пишу просто чтобы научиться это делать.