Какой C++ мне придется изучить, чтобы создать собственное ядро ​​ОС?

Какого типа C++ (повторить программирование) мне нужно было бы изучить, чтобы создать собственное ядро ​​ОС? (Я знаю, что мне также придется изучить сборку.) РЕДАКТИРОВАТЬ *** Как прерывания, драйвер клавиатуры, получение ввода. ***

Хорошо, все, я сделал действительно * 3 базовую ОС и хотел бы поделиться ею.

Ну вот. http://bcsy.hostzi.com/BytOS.zip

Скомпилировать на linux

Ответов (15)

Я бы не рекомендовал использовать C++ при создании монолитного ядра, точка. Однако, если вы рассматриваете проект микроядра, вы можете написать серверы (сеть, консоль, fs, vfs и т. Д.) На C++, сохраняя при этом само ядро ​​с помощью C / inline asm.

Опять же, если вы просто собираетесь использовать x86, это не имеет большого значения.

Каковы цели разработки вашей ОС?

http://www.brokenthorn.com/Resources/OSDevIndex.html

У меня есть друг, который написал ядро ​​ОС на C++:

http://sourceforge.net/projects/ekp/

Так что это определенно возможно. (Некоторые из приведенных выше комментариев говорят, что это невозможно. Неправильно.)

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

Ознакомьтесь с часто задаваемыми вопросами в списке рассылки ядра Linux (которые могут быть применимы к любой разработке ядра), и не расстраивайтесь по этому поводу.

Newos - хорошее ядро ​​C++. Таковы ЭКОС и L4 . Newos - это микроядро от бывшего разработчика BeOS. L4 также является микроядром, известным своей невероятно быстрой передачей сообщений. А eCos - это монолитное ядро.

Проверьте nanoos , это проект ОС на C++!

Отвечая на ваш вопрос:

Операционная система (обычно сокращенно OS или O / S) - это интерфейс между оборудованием и приложениями; он отвечает за управление и координацию действий, а также за совместное использование ограниченных ресурсов компьютера. Операционная система выступает в роли хоста для приложений, запущенных на машине. Поэтому вам нужно изучить биты C++, которые позволяют вашей программе (ОС) взаимодействовать с оборудованием, на котором она будет работать.

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

Для этого вернитесь еще раз и посмотрите, что делается в нано в качестве отправной точки (для потребностей изучения C++ того, что повлечет за собой создание ОС на C++)

Особенности нанооборудования:

  • C++ время выполнения

  • 32-битный защищенный режим Диспетчер памяти

  • Обнаружение ЦП, обнаружение памяти и обнаружение жесткого диска IDE

  • Чтение с жесткого диска IDE

По сути, чтобы написать операционную систему , просто проверьте, что ОС должна делать (или что это такое).

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

альтернативный текст

Прочтите. Удачи

Есть только один вид, который должен помочь сузить круг вопросов. Начните с изучения руководств по архитектуре ЦП, Intel доступны бесплатно . Получение документации для BIOS будет сложной частью.

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

Удачи!

Я бы рекомендовал чистый C для разработки ядра. При разработке ОС вы действительно хотите знать, что происходит «под покровом». Мне кажется, C++ слишком много скрывает для низкоуровневой разработки.

Хорошие ресурсы:

Учитывая ваш выбор сегодня, нет абсолютно никаких причин «делать» ОС. Выучите язык по-настоящему хорошо и по-настоящему освоите Windows или вариант Linux. C или C++ замечательно изучать.

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

По ряду технических причин Linux не программируется ни на одном языке, кроме C. По разным политическим причинам некоторые другие ОС программируются на C++.

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

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

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

В частности, см. Этот раздел, в котором рассказывается обо всем, что необходимо для работы с ядром C++ с использованием gcc.

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

Единственная известная мне ОС сколько-нибудь значительного размера, которая была запрограммирована на C++ до «голого металла», - это операционная система AS / 400 OS / 400 (после v3r6).

Нет ничего особенного, что мешает вам делать любую ОС на C++ - особенно если вспомнить, что обычный C в любом случае «почти» действительный C++. Что становится интересным, так это делать new / delete на самых низких уровнях, потому что вам нужно гарантировать отсутствие утечек и тому подобное. Это приводит к необходимости повторной реализации new функций.

Я помогал делать v3r6, но прошло уже около 13 лет, и я не помню подробностей. Мне не известно о каких-либо публикациях по этому поводу, но если вам действительно интересно, попробуйте написать Маршаллу Клайну на http://www.parashift.com .

(Ох. «Удалить» порок «бесплатно».)

Рассмотрение L4Ka :: Pistachio, ядра Haiku или Symbian EKA2 может быть хорошей идеей, если вас интересуют примеры "настоящих" ядер на основе C++, которые использовались в качестве основы сложных, многофункциональных операционных систем. .

Я обнаружил, что последний хорошо структурирован и состоит из очень краткого и удобочитаемого кода, но другие могут не согласиться. Однако в настоящий момент его сложно получить и создать (поскольку веб-сайты Symbian Foundation в настоящее время отключены), хотя его копия отображается в Google Code.

Помимо этого, я обнаружил, что L4Ka :: Pistachio является одним из самых простых в сборке ядер, но настройка и реализация компонентов более высокого уровня - это другой способ, хотя Genode казался многообещающим путем к быстрому созданию высокоуровневых компонентов. компоненты, когда я тестировал его много лет назад.