Я очень амбициозный студент университета, который хочет выучить почти все, что нужно знать о компьютерах (если хочешь, я люблю учиться). Недавно я подумал, что это будет забавный проект (хотя и длительный) для разработки и сборки моего собственного ядра.
Я получил некоторую основную информацию, и я понял, что мне нужно освоить ассемблер и C / C ++, чтобы действительно сделать эту работу. Пока я работаю над этим, я хотел бы узнать, КАК ядро действительно работает с точки зрения программирования. Я потратил часы на просмотр кода ядра Linux, но это может занять только так далеко.
Каковы основные этапы сборки ядра? Вещи, которые вы должны решить? Заказывать или делать вещи? Я знаю, что много откусываю, но я достаточно полон решимости справиться с этим.
Ответы:
Что вам нужно сделать, это дизайн операционной системы. Даже если, например, вы решите, что это должна быть UNIX-подобная система, еще предстоит принять много решений. Насколько похожа на UNIX? Какие части UNIX вам нравятся, и какие, по вашему мнению, нуждаются в улучшении?
Если вы не настроены на то, чтобы он был похож на UNIX, у вас возникнет еще больше вопросов: должны ли процессы образовывать дерево или они «плоские»? Какие виды межпроцессного взаимодействия вы хотите поддерживать? Вы хотите, чтобы он был многопользовательским, или просто многозадачным (или, возможно, однозадачным)? Вы хотите, чтобы это была система реального времени? Какую степень изоляции вы хотите обеспечить между задачами? Где вы хотите, чтобы он падал в масштабе монолитного или микроядерного? В какой степени (если есть) вы хотите, чтобы он поддерживал распределенную работу?
Я бы вообще советовал против изучения ядра Linux для вашего вдохновения. Это не против самого ядра Linux, но простой факт, что Linux предназначен в первую очередь для производственного использования, а не для обучения. Он имеет множество оптимизаций, хаков обратной совместимости и т. Д., Которые чрезвычайно полезны для производства, но скорее отвлекают, чем обучают.
Если вам удастся найти его, копия книги Льва ( «Комментарии Льва о 6-й редакции UNIX , с исходным кодом » Джона Лайонса) будет гораздо более простой отправной точкой. 6-е издание UNIX было все еще небольшим и достаточно простым, чтобы читать и понимать довольно быстро, не будучи слишком упрощенной игрушечной системой.
Если вы планируете нацеливаться на x86 (по крайней мере, в первую очередь), вы также можете взглянуть на MMURTL V 1.0 от Richard Burgess. Это представляет собой систему для x86, которая использует аппаратное обеспечение x86 гораздо больше, чем изначально предполагали разработчики ЦП, - что большинство реальных систем избегает переносимости на другие ЦП. Как вы можете догадаться, это имеет тенденцию быть гораздо более ориентированным на аппаратное обеспечение. Печатные копии кажутся дорогими и трудно найти, но вы можете скачать текст и код бесплатно.
К счастью, есть еще немало возможностей - например , Эндрю Таненбаум и Альберт Вудхалл: разработка и внедрение операционной системы .
источник
Я бы предложил начать с крошечной, очень сфокусированной задачи: использовать ассемблер, написать программу начальной загрузки игрушек. Это не должно делать много. Вы просто хотите, чтобы компьютер автоматически загружал программу при запуске, печатал сообщение, подтверждающее, что она запущена, считывал некоторые данные с клавиатуры, печатал другое сообщение и затем выключал компьютер.
Это будет иметь несколько преимуществ:
Как только вы это сделаете, у вас будет гораздо лучшее представление о том, во что вы ввязываетесь.
источник
Изучение, как программировать на ассемблере, является хорошим первым началом, и выполнение этого из MSDOS 6.0 также может быть полезным из-за отсутствия встроенных функций.
Чтение хорошей книги, такой как «Концепции операционной системы», станет хорошим началом для разработки вашего собственного ядра. Вам нужно будет выполнить загрузку, управление драйвером устройства, взаимодействие с BIOS, создание и управление файловой системой, планирование программ, загрузку и выгрузку программ, реализовать по крайней мере какую-то оболочку (намного проще, чем создание системы управления окнами).
C / C ++ будет работать только в том случае, если ваше ядро совместимо со стандартными библиотеками для этих языков, в противном случае вам также потребуется написать копию этих библиотек.
Это даже не начинает думать о многопоточности, безопасности системы, сети.
источник
Minix - хороший клон Unix (который вдохновил Linux), который был написан для обучения.
Эндрю С. Танненбаум - превосходный писатель и учитель, он написал целую книгу об операционных системах, используя Minix в качестве примера (и включает в себя исходный код для подражания): http://en.wikipedia.org/wiki/Operating_Systems:_Design_and_Implementation
Лично я считаю, что он несколько лучше, чем программист, поэтому некоторые вещи не так ясны, как хотелось бы лично, но - эй - это работает!
Я настоятельно рекомендую рассмотреть это как учебный ресурс. Это также даст вам представление о количестве работы, необходимой для создания чего-то, что действительно может быть полезным.
источник
Я тоже учился этому. Вы можете проверить эти ресурсы. Они очень хорошие!
http://www.osdever.net/tutorials/index
http://kernelnewbies.org/
Веселитесь по пути!
источник