Разработка операционной системы для архитектуры x86
Я планирую разработать операционную систему для архитектуры x86.
- Какие варианты языков программирования у меня есть?
- Какие типы компиляторов доступны, предпочтительно в среде Windows?
- Есть ли хорошие источники, которые помогут мне узнать больше о разработке операционной системы?
- Лучше ли тестировать мою операционную систему на виртуальной машине или на физическом оборудовании?
Какие-либо предложения?
13 ответов
Для моего последнего года проекта в коллажах я разработал небольшую ОС x86 с менеджером виртуальной памяти, виртуальной файловой системой и полностью вытесняющей многозадачностью. Я сделал его с открытым исходным кодом, и код сильно комментируется, проверьте его страницу подделки исходного кода по адресу:
https://github.com/stephenfewer/NoNameOS
Исходя из моего опыта, я могу рекомендовать следующее:
Вам понадобится язык ассемблера x86 для различных деталей, это неизбежно, но может быть сведено к минимуму. Довольно быстро вы получите код на C, который является проверенным выбором для разработки ОС. Если у вас есть какой-то менеджер памяти, вы можете перейти на C++, если хотите (вам нужен какой-то менеджер памяти для таких вещей, как new и delete).
Независимо от того, какой язык вы выберете, вам все равно понадобится ассемблер и C, чтобы вывести систему из загрузки, где BIOS оставляет вас в любой удобной форме.
В конечном счете, выбранный вами основной язык будет зависеть от типа ОС, которую вы хотите разработать.
Моей средой разработки был порт Windows инструментов разработки GNU DJGPP вместе с ассемблером NASM. Для моей IDE я использовал Eclipse от IBM с плагином CDT, который обеспечивает среду разработки на C/C++ в Eclipse.
Для тестирования я рекомендую BOCHS, эмулятор ПК с открытым исходным кодом x86. Он позволяет быстро загружать вашу ОС, что отлично подходит для тестирования и может быть интегрировано в Eclipse, так что вы можете создавать и запускать ОС одним нажатием кнопки. Я также рекомендовал бы иногда использовать и VMWare, и физический ПК, так как вы можете обнаружить некоторые незначительные ошибки таким образом.
PS Разработка ОС действительно веселая, но очень интенсивная, моя заняла лучшую часть 12 месяцев. Мой совет - хорошо спланировать, и ваш дизайн - это ключ! наслаждаться:)
Язык и компилятор полностью зависят от того, чего вы пытаетесь достичь. Я хотел бы предложить, однако, что вы можете подходить к проблеме со слишком низкого уровня.
Есть материалы по основам операционной системы. MIT имеет OpenCourseware по этому вопросу. Прочитайте серию "Операционные системы" Эндрю Танненбаума и посмотрите на такие вещи, как Minix.
Получить представление о том, что там. Начните возиться с вещами. Займи идеи и посмотри куда они идут. Вы можете заново изобрести колесо, если действительно хотите, но вы узнаете больше, опираясь на работы других.
Неважно, какой язык вы выберете. Если язык полный по Тьюрингу, вы можете написать в нем операционную систему.
Тем не менее, выразительность языка сделает определенные виды проектов очень простыми или очень сложными для реализации. Например, "живость" и динамизм старых ОС Smalltalk зависят от того, реализованы ли они в Smalltalk. Вы могли бы сделать это и в Си, но это, вероятно, будет настолько сложно, что вы даже не подумаете об этом. JavaScript или Ruby OTOH, вероятно, отлично подойдут.
Сингулярность Microsoft Research является еще одним примером. Он просто не может быть реализован ни на чем другом, кроме Sing #, SpeC# и C# (или аналогичных языках), потому что большая часть архитектуры зависит от безопасности статических типов и статической проверяемости этих языков.
Следует помнить одну вещь: пространство разработки для ОС, реализованных на C, в значительной степени изучено. Там буквально тысячи из них. Однако на других языках вы можете обнаружить то, чего никто раньше не обнаружил! Существует только около дюжины ОС, написанных на Java, около полудюжины на C#, что-то порядка двух ОС на Haskell, только одна на Python и ни одна на Ruby или JavaScript.
Попробуйте написать ОС на Erlang или Io, и посмотрите, как это влияет на ваше мышление об операционных системах!
В Университете Мэриленда есть курс по ОС, в котором используется GeekOS. Это небольшая ОС с широкими комментариями, предназначенная для образовательных целей, которую можно запускать с помощью эмуляторов Bochs или QEMU.
Для примера того, как это используется в курсе, посмотрите предыдущее предложение курса на веб-странице класса. Там вы найдете задания, в которых вам нужно добавить различные функции в GeekOS.
Это отличный способ познакомиться с небольшой и простой ОС, работающей на архитектуре x86.
Вы можете посмотреть XINU. это крошечная операционная система для x86, которая на самом деле не используется ни для чего, кроме как для изучения студентами.
Также проверьте OSDev.org, в котором есть вся информация, необходимая для начала работы.
Используйте ANSI C и начните с эмулятора. Когда вы перенесетесь на реальную машину, там будет какой-то ассемблерный код. Переключение контекста и обработка прерываний (например) легче писать на ассемблере.
Энди Танненбаум написал хорошую книгу по ОС. Существует много других хороших.
Удачи! Нет ничего лучше, чем написать собственную ОС, пусть даже небольшую.
Обязательно ознакомьтесь с ответами на мой вопрос:
Без сомнения, я бы использовал Ада. Это лучший язык системного программирования общего назначения, с которым я когда-либо сталкивался. Один пример, Ada намного лучше для определения битовой структуры объектов в записи, чем C. Ada также поддерживает наложение записей в определенных местах памяти. С требует, чтобы вы играли с указателями, чтобы добиться того же эффекта. Это работает, но более подвержено ошибкам. Ада также имеет языковую поддержку прерываний.
Другое: Безопасность. По умолчанию Ada ограничивает проверку назначений массивов, но позволяет отключить ее, когда вам это нужно. C "по умолчанию" не ограничивает проверку массивов, поэтому вы должны делать это вручную, когда захотите. Время показало, что это не правильное значение по умолчанию. Вы забудете тот, где это необходимо. Переполнение буфера - это самый распространенный недостаток безопасности, используемый взломщиками. У них есть целые сайты, объясняющие, как их найти и использовать.
Что касается того, как это сделать, то мне известны две книги: XINU (Unix backwards, ничего общего с Саентологией) и Project Oberon. Первый был использован в моем выпускном курсе по операционным системам, а второй был написан Никалусом Виртом, создателем Паскаля.
Я сделал это один раз для 386SX, который был на плате PCI. Хорошим источником того, как запустить процессор X86 в защищенном режиме, является исходный код Linux. Это всего лишь несколько сборочных утверждений. После этого вы можете использовать gcc для компиляции вашего C-кода. Результатом является объектный код в формате ELF. Я написал свой собственный компоновщик, чтобы сделать программу из объектного кода. И да, это сработало! Удачи.
Если вы делаете полную ОС, вам нужно будет использовать несколько языков. Я бы ожидал ассемблер, C и C++ по крайней мере.
Я бы использовал виртуальную машину для большей части тестирования.
Скорее всего... все основные ОС написаны на C/C++ или Objective-C(Apple)
Если вы хотите написать ОС, тогда вам нужна пара человек. А ОС не может написать ни одного человека. Я думаю, что лучше работать над существующими проектами ОС
Это только краткий список проектов ОС. Как вы можете видеть, есть проект для каждого возможного языка.