Какие есть ресурсы для начала разработки операционной системы?
Одна вещь, которую я всегда хотел сделать, - это разработать собственную операционную систему (не обязательно такую необычную, как Linux или Windows, но лучше, чем простой загрузчик, который я уже сделал).
Мне трудно найти ресурсы / руководства, которые помогут вам написать простую ОС "Hello World".
Я знаю, что многие люди, вероятно, порекомендуют мне посмотреть Linux или BSD; но база кода для подобных систем (предположительно) настолько велика, что я не знаю, с чего начать.
Какие-либо предложения?
Обновление: для того, чтобы людям, которые попадают в этот пост через Google, было несколько ресурсов для разработки ОС:
Написание вашей собственной операционной системы (спасибо Адам)
Linux с нуля (спасибо Джон)
SharpOS (операционная система C#) (спасибо lomaxx)
OS Dev Wiki и форумы (спасибо, Стив)
BonaFide (спасибо Стив)
Бран (спасибо Стив)
Скатайте свою игрушечную ОС UNIX-клон (спасибо Стиву)
Другие источники:
Я нашел хороший ресурс под названием MikeOS: "MikeOS - это обучающий инструмент, демонстрирующий работу простых ОС. Он использует 16-битный реальный режим для доступа к BIOS, поэтому ему не нужны сложные драйверы"
Обновлено 14.11.08
Я нашел некоторые ресурсы в Руководстве Freebyte по... Свободным и несвободным операционным системам, которые ссылаются на такие наборы, как библиотека OSKit и ExOS. Это кажется очень полезным для начала разработки ОС.
Обновлено 23.02.09
Ric Tokyo рекомендовал Нано в этом вопросе. 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 на stackru
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)
28 ответов
После этого краткого обзора есть много ссылок на то, что связано с написанием ОС для платформы X86.
Ссылка, которая представляется наиболее перспективной (www.nondot.org/sabre/os/articles), больше недоступна, поэтому вам необходимо просмотреть версию Archive.org, чтобы прочитать ее.
В конце дня загрузчик берет машинный код ядра, помещает его в память и переходит к нему. Вы можете поместить любой желаемый машинный код в ядро, но большинство программ на Си ожидают ОС, поэтому вам нужно сообщить компилятору, что у нее не будет всего этого, или загрузчик должен создать ее.
Затем ядро выполняет всю тяжелую работу, и я подозреваю, что это пример ядра, которое вам нужно. Но между ядром, которое говорит "Hello world", и ядром, которое загружает интерпретатор команд, предоставляет дисковые сервисы, а также загружает и управляет программами, нужно пройти долгий путь.
Возможно, вы захотите подписаться на ACM, чтобы получить доступ к их более старой литературе - в конце 80-х и начале 90-х годов в журналах по вычислительной технике было много статей о том, как создавать альтернативные ОС. Вероятно, есть книги, которые вышли из печати еще с этой эпохи. Вы можете получить ту же информацию бесплатно, просмотрев индексы этих журналов (которые доступны на этом сайте - нажмите "индекс" рядом с названием журнала), а затем спросите людей с копией.
Наконец, я знаю, что usenet мёртв (как говорят пророки интернет-гибели), но вы обнаружите, что многие из старых скалистых экспертов той эпохи до сих пор живут там. Вы должны искать в группах Google (у них есть старый репозиторий dejanews), и я ожидаю, что вы найдете много людей, задающих те же вопросы десятилетие или 1,5 назад, что вы задаете сейчас. Вы можете даже столкнуться с многочисленными запросами Линуса Торвальдса о помощи, поскольку он изначально разрабатывал Linux. Если при поиске ничего не появляется, спросите в соответствующей группе новостей (возможно, начинается с comp.arch, но ищите те, в названии которых указана ОС).
Minix намного меньше и предназначен для учебных целей, и книга с ним тоже хороша.
Обновление: я думаю, что Minix 3 - это немного другая цель, но Minix 2 (и, конечно, первая версия) были для учебных целей.
Как тот, кто написал многозадачную операционную систему в реальном времени с нуля...
подпрограмма отладки клавиатуры, драйвер клавиатуры, драйвер диска, видеодрайвер, файловая система и, наконец, загрузчик - и это только для запуска в первый раз, когда делать нечего!
... Я не могу особо подчеркнуть, насколько важно ознакомиться с оборудованием! Это особенно актуально, если вы действительно хотите сделать все сами, а не просто выбрать примитивную систему, которую кто-то другой уже разработал для вас. Например, обратитесь в Intel и попросите у них плату процессора для вашего типа процессора! Это выложит это для вас - "распиновки", прерывания, коды операций, вы называете это!
Помните, что оборудование делает все это возможным. Изучите аппаратное обеспечение. Вы не пожалеете об этом.
,
Напишите микроконтроллер ОС. Я рекомендую микроконтроллер на базе x86. Современная ОС просто огромна. Изучите основы в первую очередь.
Отличным ресурсом является материал курса 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! Это настоящая жемчужина!
Хотелось бы, чтобы в одном месте была вся информация о разработке вашей собственной ОС. Самое близкое к этому - OS Dev Wiki и Forums. Они предлагают массу полезной информации, касающейся установки, разработки и информации об оборудовании устройства.
Кроме того, в BoneFide есть несколько отличных учебных пособий, я использовал учебное пособие Брана по началу работы и сейчас смотрю на более свежее, основанное на его названии Roll your your toy UNIX-clone OS.
Я второй проверяю: "Операционные системы: проектирование и внедрение"
А если вы хотите разрабатывать на Windows, посмотрите сообщение в блоге Джолсона.
Изменить: Для разработки на Windows с использованием Visual Studio, ознакомьтесь с руководством BrokenThorn или вики OSDev.
Вы также можете взглянуть на SharpOS - операционную систему, которую они пишут на C#.
В книгах есть хорошие ресурсы для основ операционной системы. Поскольку для создания новых ОС практически нет необходимости, вы не найдете в Интернете тонны информации типа любителей.
Я рекомендую стандартный учебник "Современные операционные системы" от Tanenbaum. Вы также можете найти полезными "Элементы операционной системы" от Calingaert - это краткий обзор книги, в которой дается приблизительный набросок операционной системы с точки зрения дизайнера.
Если у вас есть интерес к системам реального времени (и вы должны хотя бы понять различия и причины для ОС реального времени), то я бы также порекомендовал "MicroC/OS-II" от Labrosse.
Редактировать:
Можете ли вы указать, что вы подразумеваете под "более техническим"? В этих книгах приводятся подробности реализации псевдокода, но вы ищете пример ОС или фрагменты кода для конкретной машины / языка?
-Адам
Я нахожу разработку ядра Linux Роберта Лава довольно интересной. В нем рассказывается о том, как различные подсистемы в ядре Linux работают очень практично. Поскольку исходный код доступен, Linux является главным кандидатом на то, что можно взломать.
Просто исходя из другого вопроса. Я хотел бы упомянуть о Pintos... Я вспомнил, что мой курс по ОС с Nachos и Pintos, похоже, такой же способ, что и на x86.
Мой курс по операционным системам в старших классах заставил нас создать несколько подсистем для OS / 161, простого BSD-подобного ядра, которое предоставляет некоторые основы, оставляя свободу исследовать различные решения в области проектирования при реализации сервисов более высокого уровня.
Вот некоторые другие страницы переполнения стека, которые стоит включить в это обсуждение:
Трудности на пути создания собственной операционной системы
Разработка операционной системы для архитектуры x86
Начните взламывать Minix. Это намного меньше, чем Linux (очевидно), и он разработан с учетом учебных целей (некоторые, по крайней мере). Не Minix 3, это совсем другая история.
Я хотел бы включить репозиторий " Как сделать компьютерную операционную систему" от Samy Pesse. Является незавершенным. Очень интересно.
Уже отвечаю, но когда я взял операционные системы в колледже, мы начали с раннего ядра Linux и добавили упрощенные современные функции (базовые файловые системы, виртуальная память, многозадачность, мьютексы). Хорошо повеселиться. Вы можете пропустить некоторые ДЕЙСТВИТЕЛЬНО сумасшедшие низкоуровневые ассемблерные вещи только для хулиганства с защищенным режимом и таблицами страниц, в то же время изучив некоторые смелости.
http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2
Простое и базовое руководство по разработке ОС, предназначенное для семестрового проекта. Он поможет вам создать ОС с базовыми компонентами. Очень хорошее начало для начинающих. Связанная статья здесь.
Возможно, вы захотите взглянуть на http://www.linuxfromscratch.org/.
Linux From Scratch (LFS) - это проект, который предоставляет пошаговые инструкции по созданию собственной пользовательской системы Linux полностью из исходного кода.
Одной из достаточно простых ОС для изучения будет микроСи / ОС. У книги есть дискета с источником.
Ознакомьтесь с проектом Альянса управляемых операционных систем (MOSA) на сайте http://www.mosa-project.org/. Они разрабатывают компилятор AOT/JIT и полностью управляемую операционную систему на C#. Некоторые разработчики из неактивного проекта SharpOS.
Я играл с Cosmos, который является "проектом операционной системы, полностью реализованным на языках, совместимых с CIL". Это написано на C#, так что это было прямо в моем переулке. Для такого человека, как я, который никогда не пытался создать операционную систему, было действительно здорово иметь возможность запустить операционную систему "Hello World" в кратчайшие сроки.
Как упоминалось выше, OSDev Wiki (безусловно) является лучшим источником для разработки ОС. Для тех из вас, кто говорит по-немецки, http://lowlevel.eu/ Wiki также подойдет. Что-то относительно неизвестное Incitatus OS, простое ядро с крошечным набором пользовательских приложений. Это здорово использовать, чтобы попасть в сложную тему разработки ОС.
Movitz - это среда Lisp, написанная на Common Lisp и работающая "на металле". К сожалению, некоторые ссылки на главной странице Movitz запрещают доступ, но вы можете найти инструкции по загрузке и компиляции исходного кода со страницы trac. Также готовое изображение можно найти в архиве этой страницы.
ИМХО, это крайне интересно, так как возвращает концепцию машины Lisp на имеющемся в настоящее время оборудовании. Это провалилось коммерчески, но это не доказывает мне, что идея была плохой.
Руководство по ненавистникам Unix - это забавная книга, которая полусерьезно ругает концепцию Unix и его производных. Многие разделы рассуждают о том, как лучше была концепция машины Lisp.
Симулятор x86 JS и ARM также могут быть очень полезны, чтобы понять, как работает оборудование разных частей, и проводить тесты, не выходя из любимого браузера.
Вот статья под названием " Написание простой операционной системы с нуля". Он охватывает написание загрузчика, переход в защищенный режим x86-32 и написание базового ядра на C. Похоже, он хорошо объясняет все подробно.
Когда я начал работать над моими основными операционными системами, мне нужно было базовое руководство, например " Ступени" для базовой операционной системы. Это помогло мне не потерять голову.
Это если вы хотите сделать это из абсолютно ничего (чистый ассемблерный код)
Интересный вопрос для программистов. Понимаете, сборка ОС, такой как Windows или Mac, займет очень много времени, но если вы хотите создать простую, вы можете попробовать свои силы
- Вам нужно сосредоточиться на ассемблере,C и C++. Вы должны быть экспертом в этих языках.
- Сначала прочитайте хорошую книгу о том, как работает ОС [Google it], затем прочитайте всю информацию из Wiki OS
- Искать в youtube "Как создать свою собственную ОС на ассемблере" посмотреть видео, например. видео
- Загрузите исходный код ОС Linux, скомпилируйте его и попробуйте изменить код самостоятельно
- Теперь вы опытный редактор ОС, теперь скачайте Minix и QNX и начните разрабатывать вместе с ними и получите их документы здесь Minix Doc и QNX Doc
Теперь вы получили степень магистра (не совсем чуть-чуть больше) в создании ОС, теперь распространяйте эту известность среди своих друзей и с их помощью попытайтесь создать такую мощную ОС, как Mac, Linux или Windows.
Когда вы создали базовую операционную систему, на самом деле трудно продолжать, потому что не так много ресурсов для создания графического интерфейса или переноса библиотек. Но я думаю, что взглянуть на ToAruOS очень поможет!
Код под поверхностью этой ОС чертовски прост! но в то же время он портировал такие вещи, как cairo, python, (пока не скоро) sdl, сделал общий доступ к памяти и также создал свой собственный набор инструментов для виджетов. Это все написано на C.
Другой интересной ОС будет родословная OS. Он сделан Джеймсом ( автором учебника по ядру jamesM). Хотя у него больше возможностей, чем у ToaruOS, он также больше и запутаннее.
Но в любом случае эти 2 ОС вам очень помогут, особенно ToAruOS.