Какой C++ я должен научиться делать для собственного ядра ОС?

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

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

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

Компиляция на Linux

15 ответов

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

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

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

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

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

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

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

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

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

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

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

В ответ на ваш вопрос:

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

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

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

Особенности, найденные в Nanoos:

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

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

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

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

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

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

http://ecx.images-amazon.com/images/I/3125C47MR4L._SL500_AA180_.jpg

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

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

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

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

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

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

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

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

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

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

(Ауг. "Удалить", тиски "бесплатно".)

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

Опять же, если вы просто собираетесь x86, это не так важно.

Каковы цели дизайна вашей ОС?

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

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

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

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

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

Удачи!

Другие вопросы по тегам