Добро пожаловать на unix.stackexchange.com!
Нет простого ответа на ваш вопрос, и гораздо лучшие люди, чем я, написали целые книги на тему ядра Linux и операционных систем в целом.
О масштабах проекта: написание операционной системы не простая задача! Даже целенаправленная минимальная ОС, такая как Minix, довольно сложная вещь! Чтобы дать вам представление о Linux, подумайте о программах на C, которые вы уже написали. Средняя университетская курсовая работа имеет тенденцию составлять не более нескольких тысяч строк. Я думаю, что мой последний год проекта был около 30-35 000 строк C ++. Ядро Linux - это примерно 13 000 000 строк кода на Си.
Почему все это в отдельных файлах? Крупные проекты хранятся в отдельных файлах по логистическим и практическим причинам. Просто подумайте о загрузке 13 000 000 строковых файлов в редактор! Перед тем, как заняться таким огромным проектом, как Linux, вам обязательно нужно отточить свои навыки C до того момента, когда вопрос «почему несколько файлов» отвечает сам на себя. Вы также должны иметь возможность читать код на C , а не просто писать его. (сложнее, чем кажется на первый взгляд)
Вы определенно должны быть очень опытными в C. Ядро обслуживают тысячи людей, и вам будет предложено разобраться в личных идиомах каждого из них (предоставляется в рамках довольно жестких стандартов кодирования ядра, но все же - у каждого есть их собственный стиль решения проблем).
После того, как вы получите C fu, убедитесь, что вы понимаете операционные системы. Это поможет вам понять код. Не весь Linux необходим. Само ядро довольно маленькое! Что это раздувает это:
- Тысячи аппаратных драйверов для различных устройств.
- Уровни абстракции для различных классов устройств для упрощения API и написания драйверов. Например, у нас есть VFS для файловых систем, слой Event для устройств ввода и так далее.
- Потрясающее количество условно скомпилированного кода и файлов, предназначенных для различных архитектур, работающих под управлением Linux (не каждый компьютер с Linux является процессором Intel, а некоторые невероятно отличаются от того, что вы могли ожидать). Ядру приходится иметь дело с этими различиями, а это означает больше кода.
Одна проблема, которую вы сразу обнаружите, заключается в том, что эти компоненты не так просто отключить, заменить и снова подключить. Есть множество взаимосвязей. Короче говоря, изменить биты ядра сложно.
Причина, по которой люди предложили Minix, проста: это полноценная операционная система, но она не обременена потребностями такой сложной системы, как Linux. Код небольшой, но все еще обеспечивает полную функциональность. В конце концов, первые версии Linux были вдохновлены Minix.
Несомненно, в наши дни у Minix меньше аппаратной поддержки. Ну и что? Это благо! Современные компьютеры виртуализируются очень хорошо. Используйте это в своих интересах: виртуальная машина для запуска Minix настолько легка, что это сделает разработку бесполезной.
Если ваш проект заключается в создании операционной системы, вы можете сделать хуже, чем начать с изучения Minix. Вы также можете купить и прочитать книгу Minix, написанную для сопровождения «Современные операционные системы Эндрю Таненбаума ».
Вы также должны установить свои цели и точно определить свои термины . Если ваше собственное определение ОС принадлежит Microsoft (ОС с графическим интерфейсом пользователя и полным набором программного обеспечения), возможно, вам нужен очень длинный проект! Сотни тысяч людей работали с 1960-х годов, чтобы в конце концов привести нас туда, где мы сейчас находимся.
Наконец, вспомните боевой клич ученого: « никогда не изобретай велосипед! «(Конечно, мы любим делать исключения, когда учимся. И ради удовольствия :))