Как я могу построить небольшую операционную систему на старом настольном компьютере? [закрыто]

111

Это могло быть напрасно, поскольку я знаю, что написать операционную систему невыносимо сложно (особенно самому).

  • Я не собираюсь создавать следующий Linux или Windows.

  • Я знаю, что это будет ужасно, с ошибками и не будет работать, но это нормально.

Я хочу писать все сам, на Ассемблере , C и (немного) C ++ .

Это будущий проект, так как в данный момент я занят другими делами и у меня нет времени, но я решил, что спрошу его сейчас, так что, возможно, я смогу получить много ответов на этот вопрос, и это могло бы создавать и быть полезным ресурсом для такого подхода (все остальное, что я видел, включало создание minix, использование существующего загрузчика, создание его в программе виртуальной загрузки и т. д.).

Я хочу настроить один из моих старых настольных компьютеров с монитором, клавиатурой и мышью и начать работу с пустым жестким диском.

Я хочу узнать, как написать свой собственный загрузчик (я нашел много ресурсов по этому поводу, но для полноты, пожалуйста, все же добавьте несколько хороших), мой собственный драйвер USB (если это необходимо), драйвер компакт-диска (если это необходимо ) и т. д. Все, с нуля.

  • Как мне поместить код в компьютер? Лучше всего это делать с дискеты? Может ли большинство компьютеров сделать это с USB-накопителя?

  • Какие драйверы мне нужны, и можете ли вы предложить какие-либо рекомендации по их созданию?

  • После загрузки - что дальше? Как перейти в защищенный режим и т. Д.

  • Как управлять памятью без помощи операционной системы? Я просто использую те адреса, которые хочу? Инициализация не требуется?

  • Что, несомненно, меня запутает?

  • Как сделать как командную строку O / S, так и графическую?

  • На чем построена графическая операционная система? Например, как мне сделать что-то вроде командной строки со шрифтом и изображением вверху?

  • Где я могу прочитать о настройке многозадачной среды? (т. е. наличие двух графических командных строк, работающих рядом).

  • Как мне настроить своего рода оконную систему? Как отображать графику на экране после настройки простой многозадачности?

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

Я не упомянул еще множество других вещей, и если вы думаете о них, можете добавить их тоже.

Пожалуйста, укажите одну «тему» ​​для каждого ответа - например, драйверы USB, а затем, возможно, список ресурсов, на что следует обратить внимание и т. Д.

Также, пожалуйста, не предлагайте строить другой O / S или уже существующий код. Я знаю, что буду читать много уже существующего кода (например, ядра Linux или примеров ресурсов, существующих драйверов и т.д.), но в конечном итоге я хочу писать все самостоятельно. Я знаю, что должен опираться на что-то еще, и есть много других вопросов по этому поводу, которые я могу прочитать, если передумаю и пойду по этому пути. Но это все о том, чтобы сделать все с нуля.

Есть предложения, как сделать это графическим? Разные видеорежимы и как с ними работать и тд?

Карсон Майерс
источник
14
Это моя самая большая цель. Я так сильно хочу написать операционную систему, просто для удовольствия и изучения ... Я просто не мог уделить времени последние несколько лет. Если вы когда-нибудь ищете кого-то, чтобы помочь или просто поговорить с вами о чем-то, вы можете написать мне по адресу schmeling88 на gmail.com
Макс Шмелинг
2
@Max и @Tom, у меня тоже есть ошибка. Я на самом деле готовлюсь к старту в этот раз :)
Джованни Гальбо
2
Только не думайте сейчас о графике. Unix никогда не поддерживал графику напрямую, и это не так уж и плохо. :-) Но в принципе нет простого и портативного способа выйти за рамки 800x600 IIRC.
Bastien Léonard
2
Голосование за закрытие слишком широкое. Подобно: stackoverflow.com/questions/254149/… || stackoverflow.com/questions/2800741/…
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
1
Зачем? Это древний вопрос, который больше не вызывает никакой активности. Какая разница?
Carson Myers

Ответы:

51

Перво-наперво. Читайте, читайте, читайте, читайте, читайте. Вы должны иметь твердое представление о том, как работает ОС, прежде чем вы сможете надеяться реализовать свою собственную.

Возьмите одну из книг Эндрю Таненбаума об операционных системах. Это тот, который мы использовали на моем уроке ОС в колледже:

Современные операционные системы PDF

Современные операционные системы на Amazon

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

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

Прочтите сборку x86 (при условии, что вы разрабатываете ее для машины x86). Это должно ответить на многие ваши вопросы относительно перехода между режимами работы процессора.

Если у вас есть какие-либо знания в области электроники, возможно, будет проще начать с написания операционной системы для встраиваемого устройства, имеющего обширную документацию, потому что, как правило, это будет проще, чем ПК x86. Я всегда хотел написать свою собственную ОС, и я начинаю с написания ОС со встроенным микроядром для This Development Board от Digilent. Он может запускать процессор MicroBlaze с программным ядром от Xilinx, который имеет очень подробную документацию. У него также есть оперативная память, флэш-память, светодиоды, переключатели, кнопки, выход VGA и т. Д. Множество вещей, для которых можно поиграть с написанием простых драйверов.

Одним из преимуществ встроенного устройства также является то, что вы можете избежать написания драйвера VGA в течение длительного времени. В моем случае плата разработки Digilent имеет встроенный UART, поэтому я могу эффективно использовать последовательный выход в качестве консоли, чтобы все это запустить и загрузить из командной строки с минимальными усилиями.

Просто убедитесь, что для того, что вы выберете, есть готовый и хорошо протестированный компилятор. Вы же не хотите писать ОС и компилятор одновременно.

Боб Сомерс
источник
2
+1, но я предпочитаю книгу Таненбаума Minix (которая больше нацелена на реализацию), и на самом деле нет необходимости сначала сосредотачиваться только на теории. В любом случае, он не станет писать ОС с первого раза. Сначала он напишет загрузчик, затем переключится в защищенный режим, затем обработает ввод-вывод и так далее.
Бастьен Леонар
2
+1 за написание ОС для встроенного чипа. В конце концов, вы почувствуете, что сделали что-то уникальное, и это намного проще, чем написать его (скажем) для x86, сохранив при этом те же основные концепции. Посмотрите, например, на TinyOS (хотя технически это не ОС, для нее есть такие вещи, как планировщик и модули задач ..)
Кристофер Мичински
29

http://www.osdev.org/ и http://www.osdever.net/

добро пожаловать в мир разработки ОС.

См. Также другие ссылки на документацию x86 в SO tag wiki : руководства Intel и AMD, документы компилятора / ассемблера и различные руководства.

Он также предлагает использовать BOCHS или другую виртуальную среду для отладки, поскольку вы можете выполнить пошаговый загрузчик и проверить регистры.

Fnurglewitz
источник
1
И особенно wiki.osdev.org !
Мэтью Иселин
Не забывайте forum.osdever.net :)
Бренден
6
Я знаю, что это полезные ресурсы, но я думаю, что для будущих читателей было бы более полезно, если бы вы предоставили некоторый контекст, а не набор ссылок без объяснения.
icktoofay
@icktoofay Думаю, вопрос слишком широкий, чтобы на него можно было ответить должным образом.
user253751
15

Я бы посоветовал поработать, по крайней мере, сначала, на Bochs или какой-либо другой виртуальной машине по той причине, что вы можете взять ее с собой куда угодно, ее легче отлаживать (вы можете видеть точное состояние оборудования), и если вы нужна помощь извне, они могут использовать то же самое «оборудование», что и вы.

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

HBAR
источник
Я посмотрю на Bochs, чтобы поиграть, но в конечном итоге я хочу просто построить это на каком-нибудь ПК
Карсон Майерс
Если он работает в BOCHS, он обычно будет работать на реальном ПК с учетом различий в их BIOS. Большинство ваших ошибок, вероятно, будут связаны с BOCHS и реальным оборудованием, но разница в том, что, когда ваш код застревает в бесконечном цикле в BOCHS, вы можете использовать встроенный отладчик BOCHS, чтобы узнать где, и за один шаг найти как / почему. На реальном оборудовании все, что вы могли сделать, это добавить отладочные отпечатки. Использование отладчика сэкономит часы и дни, чтобы ломать голову.
Питер Кордес
14

На самом низком уровне минимум, что операционная система должна уметь делать, - это каким-то образом управлять аппаратным обеспечением системы и каким-то образом загружать для выполнения своего рода «пользовательский код». Если вы собираетесь начать с ПК, вам нужно написать код, который он может загрузить с того или иного устройства. На старых компьютерах встроена BIOS, которая определяет, как оборудование выполняет некоторую инициализацию (по крайней мере, видео, клавиатуру и некоторую форму хранилища или загрузчика). (Обновление от октября 2017 года: на новых ПК есть прошивка EFI или UEFI ... что в значительной степени является педантичным различием; в этом обсуждении они служат тем же целям).

Итак, начните с изучения низкоуровневых деталей того, как использовать BIOS или другую прошивку в вашей целевой системе. То есть научитесь писать программу, которую BIOS может загружать и выполнять. Это в конечном итоге превратится в ваш загрузчик. Начни с малого. Просто получите программу, которая печатает: «Hello, Linus» прямо из процесса загрузки прошивки (для начала было бы неплохо с дискеты или флэш-накопителя USB ... или на жестком диске, если хотите).

Оттуда я бы порекомендовал написать очень простой последовательный драйвер ... обновить загрузчик, чтобы инициализировать какой-то последовательный порт, и начать загрузку оттуда. Затем он может выполнить код, который он использует. Оттуда напишите немного начальной загрузки, которая может записывать в другой набор блоков (мы еще не реализовали файловую систему ... даже не синтаксический анализ таблицы разделов; поэтому мы сначала будем иметь дело с необработанными диапазонами блоков на диске ).

В этот момент ваш загрузчик должен иметь возможность вытаскивать новый код по последовательной линии, выгружать его в раздел (да, реализовать какую-то обработку таблицы разделов ... соответствует ли он стандартным соглашениям ПК на этом этапе ) и выполнить его.

Оттуда вы сможете работать над гораздо более сложными функциями. На основе этой базы вы можете написать и скомпилировать новое «ядро» ... перезагрузите тестовый стенд и разверните на нем новое ядро.

(Ваш загрузчик должен принимать некоторый сигнал, такой как BREAK по последовательным линиям установления связи, как команду, чтобы пропустить загрузку и просто загрузить существующий образ; и он также должен обрабатывать некоторый тайм-аут таким образом).

Оттуда написать очень простой терминальный уровень и командную оболочку? Файловая система? Реализуйте команды для загрузки нового исполняемого содержимого, отличного от ядра (файлов или объектов какого-либо типа). И так далее.

Естественно, вы могли начать с драйвера консоли, используя клавиатуру ПК и видео (например, BIOS INT 0x16h и INT 0x10H, если я правильно помню). Однако я бы посоветовал начать с последовательного драйвера, поскольку затем вы можете автоматизировать цикл сборки / развертывания / тестирования из любой другой существующей (функциональной) системы. Поскольку ваша новая ОС будет запускаться как кросс-скомпилированный проект, вам будет важно иметь оптимизированный способ справиться с этим.

Я не знаю, как далеко вы хотите зайти в своем проекте. Достаточно впечатляющая цель - добиться «самостоятельного хостинга». Если вы можете создать простой ассемблер / компилятор, который позволит вам использовать вашу новую ОС для (пере) сборки, компоновки и загрузки рабочей версии вашей новой ОС ... то вы достигли этой цели. (Обратите внимание, что это не является обязательным требованием. Многие встроенные системы никогда не будут размещаться на собственном хостинге, и в этом нет ничего плохого).

Джим Деннис
источник
На современном оборудовании может быть труднее заставить работать драйвер последовательного порта, чем писать драйверы консоли (видео / клавиатуры). За несколько лет, прошедших с тех пор, как я написал это, простые старые последовательные разъемы практически перестали существовать на современных настольных компьютерах и ноутбуках. Некоторое встраиваемое оборудование и оборудование для любителей все еще имеет устаревшие интерфейсы RS-232C без необходимости проходить эмуляцию USB. Например: mpl.ch/t2600.html вроде бы есть.
Джим Деннис
12

Если вы не против использования аппаратной виртуализации, есть курс (книга + лекции + программное обеспечение), который проведет вас «От Nand к тетрису». Вы создаете полную компьютерную систему полностью самостоятельно, начиная с (для этих целей атомарного и данного) электрического логического элемента NAND, вплоть до создания ОС, языка и, наконец, написания простой игры на вашем персональном компьютере.

Я считаю, что это отличная идея, и я полностью намерен в скором времени ее реализовать. Книга на удивление дешевая, и я считаю, что курс преподается в Массачусетском технологическом институте. Я не могу представить себе более сильного чувства, чем полное и исчерпывающее знание всей системы, которую вы построили с нуля.

Ссылка: http://www1.idc.ac.il/tecs/

Сэм
источник
Думаю эта ссылка мертвая. Кто-нибудь знает другой способ получить к этому доступ?
Корай Тугай
1
@KorayTugay nand2tetris.org
user253751
10

Я бы начал с малого и купил встраиваемый комплект для разработки 8086 и разработал на нем многозадачную ОС. Когда у вас будет ядро ​​и вы познакомитесь с работой на аппаратном уровне, вы будете готовы заняться чем-то более сложным.

Создание даже клона DOS-дисплея VGA - довольно сложная задача. Детали огромны. :-)

конкретные темы.

Как мне поместить код в компьютер? Лучше всего это делать с дискеты? Может ли большинство компьютеров сделать это с USB-накопителя?

BIOS выполнит элементарную загрузку.


Какие драйверы мне нужны, и можете ли вы предложить какие-либо рекомендации по их созданию?

все, что не является прямыми операциями с процессором / памятью. Все, что не указано в справочном руководстве по ЦП.


После загрузки - что дальше? Как перейти в защищенный режим и т. Д.

Защищенный режим будет частью последовательности загрузки.

затем вы начинаете многозадачность и выясняете, как запускать процессы.


Как управлять памятью без помощи операционной системы? Я просто использую те адреса, которые хочу? Инициализация не требуется?

Верный. Вы, вероятно, захотите в конце концов разобраться с системой виртуальной памяти.


Что, несомненно, меня запутает?

не имея инструментов отладки, не имея ввода-вывода


Как сделать как командную строку O / S, так и графическую?

С горем. Найдите Windows 3.1 и Linux, в частности X windows.


На чем построена графическая операционная система? Например, как мне сделать что-то вроде командной строки со шрифтом и изображением вверху?

Посмотрите X windows.


Последний совет: изучите linux / x windows. Это не идеально, но дает понимание одного подхода. Также изучите встроенные системы.

Пол Натан
источник
Отличный ответ, у меня уже есть ядро ​​linux, и я обязательно посмотрю на Windows 3.1.
Carson Myers
8

Я вижу много хороших ссылок на сайты разработки ОС, поэтому опишу другой подход:

Если вам нужен опыт реализации ОС с нуля, есть гораздо лучший выбор оборудования, чем старый ПК. С архитектурой ПК вы потратите чрезмерное количество времени на кодирование неинтересных артефактов его 30-летней истории дизайна. Например, часть проекта, относящаяся к загрузчику, вероятно, сожгла многих смелых программистов.

Например, вам понадобится один набор драйверов для чтения вашего ядра с диска и / или из сети. Затем вам понадобится код для перехода в защищенный режим. На этом этапе вам понадобится еще один набор драйверов! После этого очень небольшая часть работы, которую вы выполняете для перевода микросхемы в защищенный режим, будет передаваться. Вы хотите запустить его на другом ПК + - 4 года, и вам понадобится еще один набор драйверов.

Рассмотрите возможность начальной загрузки ARM или другого 32-разрядного «встроенного» чипа. Доступны недорогие макетные платы, или вы можете припаять свои собственные! Некоторые из них имеют встроенный Ethernet и USB. Я думаю, вы получите больше удовольствия от работы над разумной, не жесткой архитектурой и, возможно, в конечном итоге приобретете некоторые навыки, которые можно использовать повторно.

Марш Рэй
источник
не совсем то, о чем я просил, но +1 за то, что послал меня читать по касательной
Carson Myers
Марш дает вам хороший совет. Низкоуровневые детали архитектуры x86 / BIOS сложны. Скорее всего, вы увязнете в этих деталях и не сможете сосредоточиться на более серьезных вопросах, таких как управление памятью и планирование процессов. Выбирайте более «чистую» архитектуру с последовательным портом. Вы будете счастливее в долгосрочной перспективе.
Барри Браун,
8

Больше всего на свете, если вы хотите, чтобы это работало на реальном оборудовании, вам абсолютно необходима копия руководства вашего процессора. Руководства Intel ( http://www.intel.com/products/processor/manuals/ ) бесценны. Они охватывают все, от переключения режимов (реальный / защищенный) до управления виртуальной памятью (если вы решите зайти так далеко) и выполнения системных вызовов (если вы когда-нибудь перейдете в пользовательский режим). Что наиболее важно, они очень подробно объясняют ряд вещей, которые должны быть настроены для работы вещей, таких как TSS и регистры сегментов, которые не обсуждаются в большинстве текстов по ОС, потому что они больше связаны с концепциями более высокого уровня, чем с процессорами конкретные детали.

CSGORDON
источник
И вы можете получить бумажные копии бесплатно через Intel.
Мэтью Иселин
8

Попробуйте прочитать код небольшой базовой ОС с открытым исходным кодом, такой как MikeOS.

В качестве альтернативы я предлагаю следующие шаги (должно быть весело!):

  1. Напишите виртуальную машину. Определите все инструкции вашего процессора, чтобы вы знали свою систему от и до. Интерфейс с SDL для клавиатуры, мыши, экрана, доступа к аудио. Делайте это просто, чтобы у вас в голове все сразу поместилось. Это не обязательно должна быть современная виртуальная машина, просто такая, которая может имитировать функции «настоящего» компьютера.
  2. Напишите ассемблер для процессора вашей виртуальной машины. Помните, что этот ассемблер должен быть не программой, написанной на языке виртуальной машины, а всем, что может преобразовать ваш язык ассемблера в машинный код.
  3. Определите исполняемый формат и напишите простой компоновщик.
  4. Теперь у вас есть все необходимое для написания вашей операционной системы! Напишите его на языке ассемблера, соберите его ... и т. Д. Вам не нужен такой сложный процесс загрузки, просто сначала запустите вашу ОС.

Вышеупомянутые шаги могут показаться глупыми для написания простой ОС, но это чертовски весело.

ouiliame
источник
6

проверьте MikeOS . Это довольно простая написанная ОС, читаемая (как в комментариях) сборка. Несмотря на то, что он довольно простой, он имеет графический интерфейс и поддерживает некоторые сети и мультимедиа.

изменить : MenuetOS является графическим. Он также написан на прямом asm, но он более сложен, чем MikeOS.

Alex
источник
6

У вас амбициозная цель. Но исполнение является ключевым моментом.

Большинство структурированных подходов (учебники или занятия в колледже) проведут вас через весь процесс, но они предоставляют много подробного кода, который скрывает загадочные детали выбранной вами платформы и позволяет вам сосредоточиться на общих идеях: планирование процессов, управление памятью, предотвращение взаимоблокировок, ввод-вывод и т. д.

Мой совет: сократите свои ожидания и начните с простого вопроса.

Что такое операционная система?

Ученый-компьютерщик (надеюсь) никогда не скажет, что ОС - это графический пользовательский интерфейс, или веб-браузер, или способ подключения USB-устройств, или что-либо, что пользователь действительно может увидеть или потрогать. Вместо этого ОС на самом фундаментальном уровне - это то, о чем я упоминал выше. Все они подпадают под один большой зонтик: управление ресурсами.

Операционная система - это не что иное, как программа, которая управляет аппаратными ресурсами компьютера: памятью, процессором и периферийными устройствами.

Вот простая операционная система: программа позволяет пользователю вводить программу (в шестнадцатеричном или двоичном формате), используя последовательное соединение. После того, как программа набрана, она запускает программу. Когда программа завершена, управление возвращается пользователю, где он может либо запустить программу снова, либо ввести новую.

Сделайте это на «чистой» архитектуре, такой как встроенный процессор ARM с 64 КБ памяти или около того. Вы можете закодировать это в сборке после нескольких дней изучения тонкостей ARM. И вуаля! , у вас есть операционная система.

Он делает все, что должна делать ОС:

  • Он управляет памятью, не позволяя пользователю перезаписывать саму ОС.
  • Он планирует запуск одного процесса.
  • Он обрабатывает ввод / вывод для одного последовательного периферийного устройства.

Это дает вам строительный блок, с которого можно начать. Теперь у вас есть много вариантов. Возможно, одним из них будет разрешение загрузки двух программ в память и предоставление пользователю возможности решать, какую из них запускать следующей.

Или вы можете позволить пользователю приостановить выполнение одной программы, переключиться на другую, приостановить и переключиться обратно. Это элементарная многозадачность, хотя она полностью ручная.

Ваш выбор безграничен, но каждый - маленький шаг от того, что у вас было раньше.

Это весело, если вы не ставите перед собой слишком высокие цели!

Барри Браун
источник
4

Во многих школах есть классы ОС, которые делают многое из того, что вы описываете. Моя школа (CMU) преподавала ОС на C, и мы написали ядро, файловую систему и оболочку, а также получили код для загрузчика.

К сожалению, мне не удалось найти какой-либо исчерпывающий ресурс для этого курса (15-412) в Интернете, и со временем он эволюционировал. Но, возможно, люди могли бы публиковать ссылки на источники и задания для школ, у которых есть хорошие ресурсы в сети.

Дрю Хоскинс
источник
3

Вам может понравиться это руководство под названием «Создайте свою собственную игрушечную ОС-клон UNIX», оно очень информативное и должно помочь вам на вашем пути.

Удачи.

черный
источник
1
Несмотря на то, что иметь такой подробный учебник - это замечательно, в нем много ошибок, с которыми постоянно сталкиваются новички. Учебник хорош, если и только если вы готовы открыть такие вещи, как руководства Intel, и подумать о том, что вы делаете (т. Е. Не копировать и вставлять!).
Мэтью Иселин,
3

Изучите систему A2 (ранее называемую системой Оберон ), чтобы найти идеи, которые вы можете украсть. Это графическая ОС, созданная всего двумя людьми, хотя, по общему признанию, одним из них является Никлаус Вирт. Впервые выпущен примерно в 1990 году, скорость удивительно хорошая. Есть книга Гуткнехта.

Норман Рэмси
источник
3

О низкоуровневом программировании графики это даст вам много информации: http://www.osdever.net/FreeVGA/home.htm . (Это очень интересно и для текстового режима.)

Что, несомненно, меня запутает?

Вы поймете, что на ПК очень много непонятного: набор инструкций x86 сам по себе сложен, и когда вы получаете прямой доступ к оборудованию, может пройти довольно много времени, прежде чем вы поймете, как написать один символ на экране. .

Не беспокойтесь о дискетах и ​​тому подобном, большую часть времени вы будете использовать эмулятор, такой как Bochs или QEmu.

Бастьен Леонар
источник
3

Возможно, вы захотите взглянуть на « Концепции операционных систем» Абрахама Зильбершатца - Понимание концепций системного программирования является фундаментальным требованием, загляните во внутреннее устройство ядра F / OSS ОС Linux * BSD и GNU / Linux , особенно более ранних версий, которые вероятно, немного более документированы.альтернативный текст альтернативный текст

Amaterasu
источник
1
Зильбершац действительно неплохой, но очень высокого уровня.
Пол Натан,
Согласовано; Однако я бы сказал, что это принципиально необходимо. Документация по «Современным операционным системам» Таненбаума (упоминалась ранее)
amaterasu
2

Взгляните на Minix . Изучите исходный код вместе с « Проектированием и внедрением операционных систем ». Рассмотрите возможность внесения вклада в проект. Я считаю, что Minix - действительно хорошая и многообещающая ОС, которая находится в процессе разработки. Это также хорошо финансируемый проект. Это означает, что вам могут даже заплатить за ваши взносы!

Виджей Мэтью
источник
1

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

BIOS загружает первый сектор на жесткий диск и начинает выполнение кода оттуда, поэтому ваша ОС должна быть размещена с первой инструкцией в первом секторе жесткого диска.

Эта статья в Википедии должна помочь вам начать работу с прерываниями BIOS для записи текста на экран, получения клавиш с клавиатуры и прочего. https://en.wikipedia.org/wiki/BIOS_interrupt_call

Даже если вы планируете использовать C ++, я настоятельно рекомендую почитать о программировании на ассемблере, поскольку это жизненно важно для понимания того, как работает оборудование.

Alpha_Pi
источник