Какие есть ресурсы для начала разработки операционной системы? [закрыто]

589

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

Мне трудно найти ресурсы / руководства, которые помогут вам написать простую ОС "Hello World".

Я знаю, что многие люди, вероятно, порекомендуют мне посмотреть Linux или BSD; но кодовая база для подобных систем (по-видимому) настолько велика, что я не знаю, с чего начать.

Какие-либо предложения?

Обновление: для того, чтобы людям, которые попадают в этот пост через Google, было несколько ресурсов для разработки ОС:

Другие источники:

Я нашел хороший ресурс под названием MikeOS : «MikeOS - это обучающий инструмент, демонстрирующий работу простых ОС. Он использует 16-битный реальный режим для доступа к BIOS, поэтому ему не нужны сложные драйверы»

Обновлено 14.11.08

Я нашел некоторые ресурсы в Руководстве Freebyte по ... Свободным и несвободным операционным системам, которые ссылаются на такие наборы, как библиотека OSKit и ExOS. Это кажется очень полезным для начала разработки ОС.

Обновлено 23.02.09

Рик Токио рекомендовал Нано в этом вопросе . Nanoos - это ОС, написанная на C ++.

Обновлено 3/9/09

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

Обновлено 7/9/09

LB предоставил ссылку на проект Pintos , образовательную ОС, предназначенную для студентов, изучающих разработку ОС.

Обновлено 27/07/09 (все еще идет сильный!)

Я наткнулся на онлайн-курс по ОС от Беркли, включающий 23 лекции.

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

Обновлено 8/4/09

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

Обновлено 23.08.09

Все вопросы с тегами osdev на stackoverflow

OS / 161 - академическая ОС, написанная на языке c, которая работает на смоделированном оборудовании. Эта ОС похожа на Начос. Спасибо Новелократ!

tangurena рекомендует http://en.wikipedia.org/wiki/MicroC/OS-II , ОС, предназначенную для встроенных систем. Также есть книга-компаньон .

Разработка ядра Linux Робертом Лавом предложена Андерсом. Это «широко известный инсайдерский взгляд на ядро ​​Linux».

Обновлено 18.09.2009

Спасибо Тиму С. Ван Харену за то, что он рассказал нам о Cosmos , ОС, написанной полностью на c #.

tgiphil рассказывает нам о среде управляемых операционных систем (MOSA) , «наборе инструментов, спецификаций и исходного кода для ускорения разработки управляемых операционных систем на основе общего промежуточного языка».

Обновление 24.09.2009

Стив нашел пару ресурсов для разработки под Windows с использованием Visual Studio, ознакомьтесь с руководством по установке BrokenThorn с VS 2005 или с разделом VS OSDev .

Обновлено 5/5/2012

kerneltrap.org больше не доступен. Ядро linux v0.01 доступно на kernel.org

Обновлено 21/12/2012 Базовое руководство по разработке ОС, предназначенное для семестрового проекта. Он поможет вам создать ОС с базовыми компонентами. Очень хорошее начало для начинающих. Связанная бумага . Спасибо, Сружан!

Обновлено 15.11.2013

Написание простой операционной системы с нуля . Спасибо Джеймс Мур!

Обновлено 8/12/2013

Как сделать операционную систему компьютера Спасибо ddtoni!

Обновлено 18.03.2014

ToAruOS ОС, построенная в основном с нуля, включая графический интерфейс

Обновлено 12 сентября 2016

Написание вашей собственной игрушечной операционной системы

Обновлено 10 декабря 2016

Написание простой операционной системы - с нуля (спасибо @Tyler C)

Giovanni Galbo
источник
5
Не забывайте forum.osdever.net
Бренден,
15
Почему этот тип хороших вопросов общего назначения всегда закрыт на SO?
Пратик Сингхал
30
Этот вопрос получил 370 голосов, был проголосован 422 раза и существует с момента первого запуска StackOverflow. Сообществу, кажется, понравилось это, но по некоторым причинам горстка людей должна разрушить это для всех. Вот почему я начинаю по-настоящему не любить SO
Джованни Гальбо
1
У Unikernels есть очень интересная тенденция (делайте только одно и делайте это хорошо), где эти усилия очень актуальны. Обычно вы можете выполнить холодную загрузку unikernel на виртуальной машине, и пользовательский код будет запущен менее чем за секунду. Я видел решение, где только поиск DNS для такой службы заставляет DNS-сервер запускать «загрузочную виртуальную машину», поэтому он готов, когда поступает фактический запрос на услугу.
Thorbjørn Ravn Andersen
4
Я начал с этого, cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf
Тайлер C

Ответы:

95

После краткого обзора того, что связано с написанием ОС для платформы X86 , есть много ссылок .

Ссылка, которая представляется наиболее перспективной (www.nondot.org/sabre/os/articles), больше недоступна, поэтому вам нужно просмотреть версию Archive.org, чтобы прочитать ее.

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

Затем ядро ​​выполняет всю тяжелую работу, и я подозреваю, что это пример ядра, которое вам нужно. Но между ядром, которое говорит «Hello world», и ядром, которое загружает интерпретатор команд, предоставляет службы диска, а также загружает и управляет программами, нужно пройти долгий путь.

Возможно, вы захотите подписаться на ACM, чтобы получить доступ к их более старой литературе - в конце 80-х и начале 90-х годов в журналах ранних вычислений было много статей о том, как создавать альтернативные ОС . Вероятно, есть книги, которые вышли из печати еще с этой эпохи. Вы можете получить ту же информацию бесплатно, просмотрев индексы этих журналов (которые доступны на этом сайте - нажмите «индекс» рядом с названием журнала), а затем спросите людей с копией.

Наконец, я знаю, что usenet мёртв (так говорят пророки интернет-гибели), но вы обнаружите, что многие из старых скалистых экспертов той эпохи до сих пор живут там. Вы должны искать в группах Google (у них есть старый репозиторий dejanews), и я ожидаю, что вы найдете много людей, задающих те же вопросы десятилетие или 1,5 назад, что вы задаете сейчас. Вы можете даже столкнуться с многочисленными запросами Линуса Торвальдса о помощи, поскольку он изначально разрабатывал Linux. Если при поиске ничего не появляется, спросите в соответствующей группе новостей (возможно, начинается с comp.arch, но ищите те, в названии которых указана ОС).

Адам Дэвис
источник
Эй, сэр, COSMOS хороший инструмент для разработки операционной системы?
Викас Верма
@VikasVerma Я не использовал его, поэтому я не знаю.
Адам Дэвис
@AdamDavis Первая ссылка не работает (и другие, кажется, также). Пожалуйста, исправьте их!
nbro
35

Minix намного меньше и предназначен для учебных целей, и книга с ним тоже хороша.

Обновление: я думаю, что Minix 3 - это немного другая цель, но Minix 2 (и, конечно, первая версия) были для учебных целей.

Майк Стоун
источник
У меня есть последняя книга о Таненбауме, но исходный код minix3 выглядит чертовски огромным! У меня такая же цель, как у OP, хотя я не хочу создавать ядро ​​с нуля, я действительно хочу понять, как работает ядро ​​и что оно делает. Поможет ли следующее Tanenbaum book and minix3, чтобы внести изменения в minix3, в конечном итоге я смогу внести свой вклад в ядро ​​linux?
Гидеон
32

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

подпрограмма отладки клавиатуры, драйвер клавиатуры, драйвер диска, видеодрайвер, файловая система и, наконец, загрузчик - и это только для запуска в первый раз, когда делать нечего!

... Я не могу не подчеркнуть, насколько важно ознакомиться с оборудованием! Это особенно важно, если вы действительно хотите сделать все самостоятельно, вместо того, чтобы просто выбрать примитивную систему, которую кто-то другой уже разработал для вас. Например, обратитесь в Intel и попросите у них плату процессора для вашего типа процессора! Это выложит это для вас - "распиновки", прерывания, коды операций, вы называете это!

Помните, что оборудование делает все это возможным. Изучите аппаратное обеспечение. Вы не пожалеете об этом.

,

Ричард Т
источник
18

Напишите микроконтроллер ОС. Я рекомендую микроконтроллер на базе x86. Современная ОС просто огромна . Изучите основы в первую очередь.

Пол Натан
источник
2
есть идеи, с чего начать? Я очень заинтересован? какой набор купить .. книги, чтобы начать вас и т. д.
Хулио
@Uncle: я не встречал первоклассную книгу по встроенным системам на сегодняшний день. Либо они слишком высокого уровня и предполагают наличие ОС, либо они ориентированы на инженера-электрика и игнорируют код. Что касается наборов, Google находит " bifferos.bizhat.com ". Есть также комплекты ARM там. Я не люблю Гарвардской архитектуры лично, поэтому я незаинтересованными в Arduino, но это является наиболее популярным. Для более экзотической работы XC-1A тоже подойдет.
Пол Натан
@Paul был бы признателен, если бы вы могли расширить свой ответ. Я посмотрел в AVR и Arduino, но недавно видел .NET микро. Я слишком большой парень из высшей абстракции, но я хочу начать идти вниз по стеку. Где вы рекомендуете начать?
Гидеон
@giddy: AVR - это настоящее увлечение. Они маленькие и дешевые, но мне не очень нравится архитектура. Я бы порекомендовал приобрести комплект разработчика ARM (стоимость ~ 100). Они популярны в коммерческих приложениях.
Пол Натан
@ Пол спасибо! Не много слышал об ARM. А как насчет .net микро? Я немного беспокоюсь о том, чтобы сжечь что-то. Большинство комплектов будут поставляться с какими-то инструкциями, верно? еще раз спасибо.
Гидеон
16

Хотелось бы, чтобы в одном месте была вся информация о разработке вашей собственной ОС. Наиболее близким к этому является OS Dev Wiki и Forums . Они предлагают массу полезной информации о настройке, разработке и информации об оборудовании устройства.

Кроме того, в BoneFide есть несколько отличных учебных пособий , я использовал учебное пособие Брана по началу работы и сейчас смотрю на более свежее, основанное на его названии Roll your your toy UNIX-clone OS .

Я второй проверяю: «Операционные системы: проектирование и внедрение»

И если вы хотите разрабатывать на Windows, посмотрите сообщение в блоге Джолсона .

Изменить: Для разработки на окнах с использованием Visual Studio, посмотрите руководство BrokenThorn или вики OSDev .

Стив Транби
источник
1
Связано: Вики-тег SO x SO8 содержит ссылки на руководства Intel / AMD и множество других полезных вещей.
Питер Кордес
15

Отличным ресурсом является материал курса MIT 6.828: Разработка операционной системы.

XV6 - простая Unix-подобная обучающая ОС, написанная на ANSI C для x86 http://pdos.csail.mit.edu/6.828/2012/xv6.html

Источник XV6 - в виде печатного буклета с номерами строк http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

XV6 книга - объясняет основные идеи дизайна os http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

Материал компактный: 92 страницы источника и 96 страниц комментариев.

Мне нравится больше, чем книга Minix! Это настоящая жемчужина!

Йенс А. Кох
источник
11

Вы также можете взглянуть на SharpOS - операционную систему, которую они пишут на c #.

lomaxx
источник
9

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

Я рекомендую стандартный учебник "Современные операционные системы" Таненбаума. Вы также можете найти полезными «Элементы операционной системы» от Calingaert - это краткий обзор книги, в которой дается приблизительный обзор операционной системы с точки зрения дизайнера.

Если у вас есть интерес к системам реального времени (и вы должны хотя бы понять различия и причины для ОС реального времени), то я бы также порекомендовал «MicroC / OS-II» от Labrosse.

Редактировать:

Можете ли вы указать, что вы подразумеваете под «более техническим»? В этих книгах приводятся подробности реализации псевдокода, но вы ищете пример ОС или фрагменты кода для конкретной машины / языка?

-Адам

Адам Дэвис
источник
7

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

LB40
источник
7

Разработка ядра Linux от Роберта Лава показалась мне довольно интересной. В нем рассказывается о том, как различные подсистемы в ядре Linux работают очень практично. Поскольку исходный код доступен, Linux является главным кандидатом на то, что можно взломать.

Андерс Руне Дженсен
источник
6

Мой курс по операционным системам в старших классах заставил нас создать несколько подсистем для OS / 161 , простого BSD-подобного ядра, которое предоставляет некоторые основы, оставляя свободу исследовать различные решения пространства проектирования при реализации сервисов более высокого уровня.

Фил Миллер
источник
6

Начните взламывать Minix. Это намного меньше, чем Linux (очевидно), и он разработан с учетом учебных целей (некоторые, по крайней мере). Не Minix 3, это совсем другая история.

Майкл Фукаракис
источник
5

Уже отвечаю, но когда я взял операционные системы в колледже, мы начали с раннего ядра Linux и добавили упрощенные современные функции (базовые файловые системы, виртуальная память, многозадачность, мьютексы). Хорошо повеселиться. Вы можете пропустить некоторые ДЕЙСТВИТЕЛЬНО сумасшедшие низкоуровневые ассемблерные вещи только для хулиганства с защищенным режимом и таблицами страниц, в то же время изучив некоторые смелости.

http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2

basszero
источник
4

Возможно, вы захотите взглянуть на linuxfromscratch .

Linux From Scratch (LFS) - это проект, который предоставляет пошаговые инструкции по созданию собственной системы Linux полностью из исходного кода.

JFS
источник
32
Компиляция операционной системы далека от написания.
сумерки -неактивно-
7
@duskwuff Вы правы, но вы многому научитесь из этого. Тогда вы можете пойти дальше и написать свой собственный.
JFS
4

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

оборота Сружан
источник
Большие ресурсы. В документе упоминаются Nachos (2500 строк кода), OS / 161 (11000), MINIX (30000), GeekOS. Зайдите на официальную страницу каждого университета, и вы найдете исходный код, симулятор и инструменты, а также задания на год.
limitcracker
3

Ознакомьтесь с проектом Альянса управляемых операционных систем (MOSA) на сайте www.mosa-project.org . Они разрабатывают компилятор AOT / JIT и полностью управляемую операционную систему на C #. Некоторые разработчики из неактивного проекта SharpOS.

tgiphil
источник
3

Я играл с Cosmos , который является «проектом операционной системы, полностью реализованным на языках, совместимых с CIL». Это написано на C #, так что это было прямо в моем переулке. Для кого-то вроде меня, который никогда не пытался создать операционную систему, было действительно здорово иметь возможность запустить операционную систему «Hello World» в кратчайшие сроки.

Тим С. Ван Харен
источник
3

Как упоминалось выше, OSDev Wiki (безусловно) является лучшим источником для разработки ОС. Для тех из вас, кто говорит по-немецки, lowlevel.eu Wiki также подойдет. Что-то относительно неизвестное Incitatus OS , простое ядро ​​с крошечным набором пользовательских приложений. Это здорово использовать, чтобы попасть в сложную тему разработки ОС.

no92
источник
2

Movitz - это среда Lisp, написанная на Common Lisp и работающая «на металле». К сожалению, некоторые ссылки на главной странице Movitz запрещают доступ, но вы можете найти инструкции о том, как загрузить и скомпилировать исходный код со страницы trac . Также готовое изображение можно найти в архиве этой страницы .

ИМХО, это крайне интересно, так как возвращает концепцию машины Лисп на имеющемся в настоящее время оборудовании. Это провалилось коммерчески, но это не доказывает мне, что идея была плохой.

Руководство по ненавистникам Unix - это забавная книга, которая полусерьезно ругает концепцию Unix и ее производных. Многие разделы рассуждают о том, как лучше была концепция машины Lisp.

алебардщик
источник
2

Вот статья под названием « Написание простой операционной системы с нуля ». Он охватывает написание загрузчика, переход в защищенный режим x86-32 и написание базового ядра на C. Похоже, он хорошо объясняет все подробно.

Джеймс Мур
источник
Я следил за этой книгой и развивался на основе ее кода. Круто начать с такой книги.
user3405291
2

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

earizon
источник
1

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

  1. Вы должны сосредоточиться на ассемблере, C и C ++. Вы должны быть экспертом в этих языках.
  2. Сначала прочитайте хорошую книгу о том, как работает ОС [Google it], затем прочитайте всю информацию из Wiki OS
  3. Поиск в YouTube "Как создать свою собственную ОС на ассемблере", посмотрите видео, например. видео
  4. Загрузите исходный код ОС Linux, скомпилируйте его и попробуйте изменить код самостоятельно
  5. Теперь вы опытный редактор ОС, теперь скачайте Minix и QNX и начните разрабатывать вместе с ними и получите их документы здесь Minix Doc и QNX Doc

Теперь вы получили степень магистра (не совсем чуть-чуть больше) в создании ОС, теперь распространяйте эту известность среди своих друзей и с их помощью пытайтесь создать такую ​​мощную ОС, как Mac, Linux или Windows.

BharatKhanna
источник
Редакторы, пожалуйста, отредактируйте мой ответ и удалите пробел между http: и www, так как я новичок, поэтому у меня нет такого высокого репутации, плз, сделайте это для меня
BharatKhanna
1

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

Код под поверхностью этой ОС чертовски прост! но в то же время он портировал такие вещи, как cairo, python, (пока не скоро) sdl, сделал общий доступ к памяти и также создал свой собственный набор инструментов для виджетов. Это все написано на C.

Другой интересной ОС будет родословная OS . Он сделан Джеймсом ( автором учебника по ядру jamesM) . Хотя у него больше возможностей, чем у ToaruOS, он также больше и запутаннее.

Но в любом случае эти 2 ОС вам очень помогут, особенно ToAruOS.

оборота user69969
источник
1

Когда я начал работать над моими основными операционными системами, мне нужно было базовое руководство, например « Ступени» для базовой операционной системы . Это помогло мне не потерять голову.

Это если вы хотите сделать это из абсолютно ничего (чистый ассемблерный код)

Али
источник