Спасибо вам за статью. Я тоже пишу туториал по разработке ОС, но на modern C++. И мне как раз не хватало информации, а вы наверное сами знаете как выглядят хардкорно туториалы в интернете. Ещё раз спасибо, очень много подчерпнул ценной информации.
Это первый этап. Самое начало. Ядро же выводит информацию, что значит как относится? Самым прямым образом.
Вас смущает что я назвал эту сотню строк кода ядром ОС? Ну так и есть, это начало разработки ядра ОС. В следующих статьях будет, работа с прерываниями, памятью, первые системные вызовы, потом первые драйвера.
Я знаю С++ и люблю его использовать. И как раз его уровень абстракция/оптимизация позволяет его использовать в ядре. Это больше мой личный выбор.
Монолитное ядро проще и его вполне хватит что бы понять основы, концепции, возможность пощупать железо. Практическая целесообразность и простота.
Это первая статья, в следующих статьях буду раскрывать архитектуру, прерывания, память, физическую, страничную, виртуальную, напишем алокатор. В самом ядре перегрузим глобально new и delete. И буду использовать STL контейнеры.
Я только в самом начале, информации много, она не простая. Двигаюсь к цели небольшими шагами, потому, что мне так проще понимать и обучаться. Посмотрел информацию, применил, реализовал, протестировал, работает и для закрепления материала написал статью продолжение.
Я не преподаватель или гуру писатель операционноек, энтузиаст с большим желанием, разбираться, вчитываться и делиться информацией.
Вы правы, думаю следует добавить функции для создания, которые уже возвращают инициализированный объект. В конструкторе nullptr, в методе Initialize уже проверяем и вызываем _console = Hal::CreateConsole();
Тогда в приват части простото бъявленпе указателя. Вы в частности и об этом говорили?
С тем же успехом можно назвать и первые уроки, по написанию загрузчика и проверки загрузки ОС с одной функцией start. Что все это не относится к разработке ОС.
Это первая статья, упор был на абстракцию, для примера выбрал самый наглядный вариант вывод в консоль.
Вот и вы и сами говорите один из способов вывода, вот в статье показано как абстрагировать один из способов вывода.
Я не спорю что стандартные статьи на эту тему больше, полно кода, я же двигаюсь небольшими шагами. У меня есть работа и статьи пишу в свободное время. Узнал, реализовал, написал статью.
Сам Линус говорил, что его первая ос была 11 строк кода:))
Все так я уже думал, насчет следующей статьи, что кратко опишу рефакторинг кода, constexpr, nonoexcept добавлю и перейду к реализации прерываний. Спасибо, что обратили внимание.
Пока 32 бит, но со временем добавлю и 64 бит. Просто сейчас я пока не знаю как сделать. Но обязательно добавлю.
В том числе, вы правы. Возможно даже в первую очередь меня интересует не функционал, а как сделать код простым, понятным, элегантным и современным в контексте С++.
Вы не понимаете, это другое:)))
На данный момент есть упрощения в коде. В каждой следующей статье буду потихоньку улучшать код ядра.
Спасибо вам за статью. Я тоже пишу туториал по разработке ОС, но на modern C++. И мне как раз не хватало информации, а вы наверное сами знаете как выглядят хардкорно туториалы в интернете. Ещё раз спасибо, очень много подчерпнул ценной информации.
Лайк подписка.
Переход в планах. Уже переводил хост версию.
https://github.com/JordanCpp/SimpleOS/tree/Step_03_InterruptsAndModules
Думаю, нет. Так как моя позиция, это максимальное использование доступных стандартных механизмов библиотеки и фич языка.
Я это описал во второй статье. Создал pmm + аллокатор, перегрузил глобально для ядра new и delete. Все память есть.
Вы не понимаете, это другое:)
Поддержка модулей ещё хромает от компилятора к компилятору. Как только начнется массовое использование обязательно на них перейду.
Бинарник занимает 11 КБ. Сейчас компиляторы умные, но шаблоны в любом случае дадут распухание.
Да все верно. Я добавлю эти моменты в статью. Но более сложные аллокаторы оставлю на следующие статьи.
О bump allocator я упомянул, что он реализован как показать быстрый результат.
Это первый этап. Самое начало. Ядро же выводит информацию, что значит как относится? Самым прямым образом.
Вас смущает что я назвал эту сотню строк кода ядром ОС? Ну так и есть, это начало разработки ядра ОС. В следующих статьях будет, работа с прерываниями, памятью, первые системные вызовы, потом первые драйвера.
Нет, названия для хоста и x86 одинаковы, я подменяю только пути инклюдов и исходных файлов при сборке. И оно собирается без горы ifdef
Задача абстрагироваться от железа, простым слоем. Максимально не меняя ядро, обеспечить перенос на другие архитектуры, изменяя только HAL уровень.
По мере разработки я уверен, придет понимание как правильно абстрагироваться, где применить абстрактный класс, а где нужен шаблон и т.д
Я знаю С++ и люблю его использовать. И как раз его уровень абстракция/оптимизация позволяет его использовать в ядре. Это больше мой личный выбор.
Монолитное ядро проще и его вполне хватит что бы понять основы, концепции, возможность пощупать железо. Практическая целесообразность и простота.
Это первая статья, в следующих статьях буду раскрывать архитектуру, прерывания, память, физическую, страничную, виртуальную, напишем алокатор. В самом ядре перегрузим глобально new и delete. И буду использовать STL контейнеры.
Я только в самом начале, информации много, она не простая. Двигаюсь к цели небольшими шагами, потому, что мне так проще понимать и обучаться. Посмотрел информацию, применил, реализовал, протестировал, работает и для закрепления материала написал статью продолжение.
Я не преподаватель или гуру писатель операционноек, энтузиаст с большим желанием, разбираться, вчитываться и делиться информацией.
Вы правы, думаю следует добавить функции для создания, которые уже возвращают инициализированный объект. В конструкторе nullptr, в методе Initialize уже проверяем и вызываем _console = Hal::CreateConsole();
Тогда в приват части простото бъявленпе указателя. Вы в частности и об этом говорили?
С тем же успехом можно назвать и первые уроки, по написанию загрузчика и проверки загрузки ОС с одной функцией start. Что все это не относится к разработке ОС.
Это первая статья, упор был на абстракцию, для примера выбрал самый наглядный вариант вывод в консоль.
Вот и вы и сами говорите один из способов вывода, вот в статье показано как абстрагировать один из способов вывода.
Я не спорю что стандартные статьи на эту тему больше, полно кода, я же двигаюсь небольшими шагами. У меня есть работа и статьи пишу в свободное время. Узнал, реализовал, написал статью.
Сам Линус говорил, что его первая ос была 11 строк кода:))
Все так я уже думал, насчет следующей статьи, что кратко опишу рефакторинг кода, constexpr, nonoexcept добавлю и перейду к реализации прерываний. Спасибо, что обратили внимание.
Пока 32 бит, но со временем добавлю и 64 бит. Просто сейчас я пока не знаю как сделать. Но обязательно добавлю.
Старт на С++ 17. Но всегда можно будет повысить версию.
Сорри, я вас нечайно минуснул, пальцем промахнулся. Отвечал с телефона.
В том числе, вы правы. Возможно даже в первую очередь меня интересует не функционал, а как сделать код простым, понятным, элегантным и современным в контексте С++.
Спасибо.