Напишем ОС с нуля!
Я всегда хотел узнать как создать операционную систему с нуля. В колледже меня учили как включать продвинутые возможности (сегментация, семафоры, управление памятью и т.д.) но:
- Я никогда не начинал со своего собственного загрузочного сектора
- В колледже большая нагрузка, поэтому я не помню большую часть из того, что преподавали.
- Я сыт по горло людьми, которые думают что чтение уже существующего ядра, даже если оно маленькое, хорошая идея для изучения операционных систем.
Вдохновленный статьей "Написание простой операционной системы с нуля" Ника Блюндела и проектом OSDev wiki я буду пытаться создать короткие пошаговые README и примеры кода для любого последователя. Честно говоря, этот учебник простой документ, разбитый на маленькие кусочки и без теории.
Также можно обратиться к ресурсу "Маленькая книга по разработке ОС" и к руководству Джеймса Моллоя "Руководство по разработке ядра."
- Этот курс является руководством по коду, ориентированном на людей, которым нравится заниматься компьютером на низком
уровне. Например, программистам, интересующимся тем, как работает ядро, но не имеющим достаточно времени или сил
изучать ядро линукса с начала до конца. - Совсем немного теории. Да, это особенность. Google ваш лектор. Однажды вы закончите колледж, чрезмерно теории хуже, чем совсем без теории, потому что она делает вещи более сложными, чем они есть на самом деле.
- Уроки очень маленькие, на них требуется от 5 до 15 минут. Верьте мне и поверьте в себя. Вы можете это сделать.
-
Начинайте с первой папки и двигайтесь вниз по порядку. Порядок очень важен, и если вы перейдете сразу к 5 папке, то не сможете понять почему здесь
mov ah, 0x0e
, так как пропустили 2 папку. -
Откройте README и прочитайте первые строки. Там расположены детали концепции, которые надо знать перед прочтением кода. Google поможет изучить незнакомые вам понятия. На следующих строках находятся цели каждого урока. Прочитайте их! Они объяснят почему мы делаем то, что делаем. "Почему" и "как" два самых важных слова.
-
Прочитайте оставшуюся часть README. Там все написано достаточно кратко.
-
(Опционально) Попытайтесь написать код самостоятельно после прочтения README.
-
Изучите примеры кода. Они максимально комментированы.
-
(Опционально) Экспериментируйте с ними, пытайтесь их сломать. Единственный способ убедиться, что вы что-то поняли, это пытаясь сломать его или воспроизвести с помощью других команд.
А теперь кратко. Читайте README прежде файлов с кодом и, если чувствуете в себе смелось, пробуйте написать самостоятельно.
Я хотел бы сделать многое с нашей ОС:
- Загрузка с нуля без GRUB - Готово
- Подключение 32-битного режима - Готово
- Переход с ассемблера на си - Готово
- Обработка прерываний - Готово
- Вывод на экран и ввод с клавиатуры - Готово
- Базовая библиотека
libc
, которая будет расти при росте потребностей - Готово - Управление памятью
- Написание файловой системы для хранения файлов
- Созданиеочень простой командной оболочки
- Пользовательский режим
- Может быть мы напишем простой текстовый редактор
- Несколько процессов и планирование
Вероятно, мы пройдем их в таком порядке, однако скоро это увидим.
Если почувствуем себя достаточно смелыми, то:
- Интерпретатор языка Бейсик, как в 70-х годах
- Графический интерфейс
- Работа с сетью
Это персональный учебный проект и, хотя он давно не обновлялся, у меня есть надежда вернуться к нему.
Благодарю всех тех, кто указал на ошибки и отправил пулл реквесты. Мне нужно некоторое время для просмотра и я не гарантирую, что это будет сейчас
Свободно форкайте этот репозиторий. Если многие из вас заинтересуются в продолжении проекта, дайте мне знать и я оставлю ссылку на ваш репозиторий, как на главный форк.