Разработка операционной системы для архитектуры x86

Я планирую разработать операционную систему для архитектуры x86.

  • Какие варианты языков программирования у меня есть?
  • Какие типы компиляторов доступны, желательно в среде Windows?
  • Есть ли хорошие источники, которые помогут мне узнать больше об операционной системе?
  • Лучше ли тестировать мою операционную систему на виртуальной машине или на физическом оборудовании?

Любые предложения?

Ответ 1

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

https://github.com/stephenfewer/NoNameOS

Из моего опыта я могу порекомендовать следующее:

Вам понадобится язык ассемблера x86 для разных частей, что неизбежно, но может быть сведено к минимуму. Довольно быстро вы получите код C, который является проверенным выбором для разработки ОС. Если у вас есть какой-то менеджер памяти, вы можете перейти на С++, если хотите (вам нужен какой-то менеджер памяти для таких вещей, как новый и удалить).

Независимо от того, какой язык вы выберете, вам все равно потребуется сборка и C, чтобы система загружалась, когда BIOS оставляет вас в любой пригодной для использования форме.

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

Моя среда разработки была портами Windows для инструментов разработки GNU DJGPP наряду с NASM ассемблер. Для моей IDE я использовал IBM Eclipse с CDT плагин, который обеспечивает среду разработки C/С++ в Eclipse.

Для тестирования я рекомендую BOCHS, эмулятор ПК с открытым исходным кодом x86. Это позволяет быстро загружать вашу ОС, что отлично подходит для тестирования и может быть интегрировано в eclipse, чтобы вы могли создавать и запускать свою ОС одним нажатием кнопки. Я бы также рекомендовал использовать как VMWare, так и физический ПК, так как вы можете подобрать некоторые тонкие ошибки.

P.S. Разработка ОС действительно забавная, но очень интенсивная, моя занимает большую часть 12 месяцев. Мой совет - хорошо спланировать, и ваш дизайн является ключевым! наслаждайтесь:)

Ответ 2

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

Существуют материалы по основам операционной системы. В MIT есть OpenCours по теме. Прочтите Andrew Tannenbaum Серия операционных систем и посмотрите на вещи например Minix.

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

Ответ 3

Не имеет значения, какой язык вы выберете. Если язык Turing-complete, вы можете записать в него ОС.

Однако, выразительность языка сделает некоторые виды проектов очень легкими или очень трудными для реализации. Например, "живость" и динамизм старых операционных систем Smalltalk зависят от того, что они реализованы в Smalltalk. Вы тоже можете сделать это на C, но, возможно, это будет так сложно, что вы даже не подумаете об этом. JavaScript или Ruby OTOH, вероятно, будет отличным вариантом.

Microsoft Singularity - еще один пример. Он просто не может быть реализован ничем, кроме Sing #, SpeС# и С# (или аналогичные языки), поскольку большая часть архитектуры зависит от безопасности статического типа и статической проверяемости этих языков.

Одна вещь, которую следует иметь в виду: проектное пространство для ОС, реализованное на C, в значительной степени полностью изучено. Там буквально тысячи из них. На других языках, однако, вы можете обнаружить что-то, что никто раньше не обнаружил! Там всего около дюжины ОС, написанных на Java, около полудюжины на С#, что-то порядка двух ОС в Haskell, только одно в Python и ни одного в Ruby или JavaScript.

Попробуйте написать ОС в Erlang или Io и посмотреть, как это влияет на ваше мышление об операционных системах!

Ответ 4

В Университете штата Мэриленд существует курс ОС, который использует GeekOS. Это небольшая, широко прокомментированная ОС, предназначенная для образовательных целей, которая может быть запущена с использованием эмуляторов Bochs или QEMU.

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

Это отличный способ познакомиться с небольшой и простой ОС, которая работает на архитектуре x86.

Ответ 5

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

Ответ 6

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

Энди Танненбаум написал хорошую книгу об ОС. Существует много других хороших.

Удачи! Нет ничего похожего на то, что вы написали свою собственную ОС, как бы она ни мала.

Ответ 7

Также проверьте OSDev.org, которые имеют всю необходимую информацию для начала работы.

Ответ 8

Я сделал это один раз для 386SX, который был на плате PCI. Хорошим источником того, как запустить процессор X86 в защищенном режиме, является исходный код Linux. Это всего лишь несколько инструкций сборки. После этого вы можете использовать gcc для компиляции своего C-кода. Результатом является код объекта в формате ELF. Я написал собственный компоновщик, чтобы сделать программу из кода объекта. И да, это сработало! Удачи.

Ответ 10

Если вы создаете полную ОС, вам нужно будет использовать ряд языков. Я бы ожидал Assembly, C и С++, по крайней мере.

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

Ответ 11

Без сомнения, я бы использовал Аду. Это лучший язык системного программирования общего назначения, с которым я столкнулся, никого нет. Одним из примеров является то, что Ada гораздо лучше для указания расположения битов объектов в записи, чем C. Ada также поддерживает наложение записей на определенные ячейки памяти. C требует, чтобы вы играли с указателями, чтобы добиться такого же эффекта. Это работает, но более подвержено ошибкам. Ada также поддерживает язык для прерываний.

Другое: Безопасность. Ada по умолчанию привязывает проверочные назначения массивов, но позволяет вам отключить его, когда вам это нужно. C "по умолчанию" не требует проверки границ на массивах, поэтому вы должны делать это самостоятельно, когда захотите. Время показало, что это не правильный дефолт. Вы забудете, где это необходимо. Эксперименты с переполнением буфера являются наиболее распространенным недостатком безопасности, используемым взломщиками. У них есть целые сайты, объясняющие, как их найти и использовать.

Что касается изучения этого, две книги, о которых я знаю, XINU (Unix назад, не имеет никакого отношения к сайентологии), и Project Oberon. Первый из них был использован на курсах выпускников операционной системы, а второй был написан Никалусом Виртом, создателем Паскаля.

Ответ 12

C, скорее всего... все основные OS-es были написаны на C/С++ или Objective-C (Apple)

Ответ 13

Если вы хотите написать ОС, вам нужно несколько человек. ОС не может писать ни одного человека. Я думаю, что лучше работать над существующими проектами ОС

Это только краткий список проектов ОС. Как вы можете видеть, есть проект для каждого возможного языка.