
Навыки проектирования ОС помогают разрабатывать и выбирать эффективные решения для распределённого хранения данных, управления сетью, виртуализации. Но подойти к вопросу проектирования операционной системы непросто. Однако по теме накопилось множество открытых материалов. Сегодня говорим о руководстве для разработки на Rust, гайде по ОС для мини-компьютера и учебном пособии на C и ассемблере.
К слову, Rust набирает обороты: первое место в категории любимых языков программирования по версии Stack Overflow.
ОС на Rust: пошаговая разработка
Разработчик-фрилансер Филипп Опперманн посвятил большую часть своей профессиональной деятельности работе с Rust. Время от времени он даже проводит публичные выступления, посвящённые различным методам и инструментам этого языка, и является автором новостной рассылки «This Month in Rust OSDev».
А еще он ведет блог Writing an OS in Rust, который написан в формате пошагового руководства: как спроектировать компактную операционку на Rust.
Руководство имеет четыре тематических блока:
основы разработки ОС;
прерывания;
управление памятью;
многозадачность.
Так, в одной из первых глав автор описывает процесс разработки ядра под 64-битную архитектуру. Еще он рассказывает, как создать загрузочный образ, способный при запуске ОС выводить на экран знаменитое Hello, world!
А в главе «Аппаратные прерывания» детально описана настройка контроллера PIC. Автор использует схему с различными устройствами, чтобы наглядно отобразить передачу прерываний от PIC к процессору. Опытным образцом для этого выступает довольно старый и редко используемый в современных системах Intel 8259. Однако Опперманн уверен, что за счёт несложной настройки этот контроллер лучше всего подойдёт для ознакомления с принципами работы прерываний.
Последняя готовая на данный момент глава посвящена кооперативной многозадачности и тому, как реализовать параллельное выполнение задач, используя синтаксис async/await. С полным исходным кодом этого и других подразделов можно ознакомиться в официальном репозитории проекта на GitHub.
Хотя блог изначально и пишется на английском, тем не менее у него есть переводы на другие языки. Например, на русском доступны первые две главы.
Кстати, нынешний блог появился не так уж спонтанно — у него было первое издание. Например, в нем автор использовал GRUB и компоновщик GNU linker, но уже в новой версии решил применить собственный загрузчик — bootloader. Опперманн утверждает, что издания серьёзно отличаются друг от друга и по содержанию.
Операционка для «малинки»
Это — руководство по разработке операционных систем на Rust под Raspberry Pi 3 и 4. Проект вышел из-под крыла команды Rust Embedded, известной курированием профильной awesome-подборки.
Руководство представлено в виде набора из двадцати уроков, размещенных в репозитории. Также авторы предлагают краткую документацию, описывающую структуру кода и принципы технического подхода.
Каждый урок расположен в отдельной папке проекта, например: «Постоянное ожидание» или «Аппаратная отладка через JTAG». Стоит заметить, что руководство ожидает от читателя определенный уровень познаний в Rust и принципах проектирования операционных систем. Дело в том, что не во всех главах встречаются какие-либо подробные пояснения. Иногда авторы просто в формате TL;DR отмечают, какие изменения они внесли в код и почему (и приводят этот самый код).
Хотя есть и разделы, например, «Уровень привилегий», где авторы дают уже более подробные разъяснения. Здесь рассказывают о переходе между уровнями привилегий в архитектуре AArch64. При разработке ОС на Raspberry Pi это достаточно важный нюанс, ведь эти мини-компьютеры по умолчанию запускаются с уровнем EL2 (Hypervisor), а классические ядра операционных систем работают на EL1 (Kernel).
В целом этот набор уроков часто рекомендуют на профильных ресурсах, хотя и отмечают, что для него нужно выделить время. Судя по отзывам, в него предпочитают погружаться программисты, имеющие опыт в проектировании собственных ОС.
Малая книга операционных систем
Цифровая книга «The Little Book About OS Development» описывает, как спроектировать собственную ОС на архитектуре x86. Она полагается в большей степени на практическую сторону вопроса, нежели на углубленное изучение теории.
Книга и тестовая ОС для неё были написаны авторским дуэтом Эрика Хелина и Адама Ренберга в течение шести недель. Изначально Хелин и Ренберг занимались продвинутым индивидуальным курсом по теории операционных систем, в ходе которого и решились на разработку этого практического руководства. Они пересобрали и резюмировали знания из практикумов по проектированию ОС, а затем оформили их в одну не слишком объёмную электронную книгу. В 2012 году на GitHub появилась первая версия руководства, а последнее обновление для неё датируется 2015 годом.
Курс поделён на четырнадцать глав, они предполагают, что читатель будет работать с ними последовательно. Ожидается, что выбравший этот курс человек знаком с UNIX/Linux, а также языком программирования C.
В первых главах авторы разбирают простые вещи: установку инструментов типа GCC и NASM или работу с GRUB. Предполагается, что к началу седьмой главы курса у читателя на руках будет работоспособное ядро ОС. В этом плане практический подход позволяет лучше понимать принципы разработки ОС и учиться на своих же ошибках.
После этого начинаются более продвинутые задачи. Например, реализация виртуальной памяти и разработка систем запуска пользовательских приложений. Наконец, авторы показывают, как работать с вызовами функций ядра и мультизадачностью (контекст задачи, планировщик, система прерываний).
Материал сопровождается оригинальным кодом авторов и пояснениями. Если какая-то из тем особенно заинтересует пользователя, разработчики подготовили список для дополнительного чтения в конце каждой главы. Это могут быть как небольшие вики-страницы, так и ссылки на профессиональные статьи и документацию.
Jijiki
спасибо, в целом как я понял, когда углублялся в какие-то тесты, но не крутые, а по изучению, надо определиться с загрузкой, потом библиотека базовая потомучто начало берется от вызовов тоесть как будет организован вызов по общению с устройствами и тут перетекаемо к ядру и наверно вот такими маленькими шагами приходим к ОС, но как загрузить нужный режим я конечно не знаю, но вот связка либа - ядро - обвязка всего этого наверно оно так на простом языке ) ну и плюс планировщик, прерывания да)
ну и на расте уже есть ОС) на ютубе есть еще реал тайм с комментариями действий как спроектировать минимальную ОС на расте, там будут обьясняться базовые принципы почему делаем так и примерный скетч дизайн
я бы еще посоветовал какие-то книги от создателей фрибсд и может быть чуть опыт сан если он гдето есть вообще в книгах