Часть, которая находится между загрузчиком и приложением (например, оболочкой), довольно ... существенная.Можно сказать, что «создание ОС с нуля» на самом деле означает написание этой части, часто называемой kernel ;По сравнению с этим, загрузчик очень маленький и простой.
Давайте возьмем Linux в качестве примера (на 32-битной x86).Оболочка Linux - это набор кодов операций x86, которые ожидают загрузки по фиксированному адресу в ОЗУ (который был выбран, когда оболочка была скомпилирована или, точнее, связана).Первая задача ядра - настроить MMU так, чтобы оболочка имела такой вид памяти.Оболочка будет взаимодействовать с внешним миром, вызывая ядро, и будет делать это через системные вызовы .В Linux-x86 системные вызовы используют код операции int
(это вызывает программное прерывание, и аргументы системного вызова обычно передаются в некоторых регистрах).Некоторые важные системные вызовы включают в себя вызовы read
и write
: с точки зрения оболочки, то, что вы вводите с клавиатуры, может быть прочитано из виртуального файла, проиндексированного дескриптором (целое число со значением0 для «стандартного ввода»).Задача ядра заключается в том, чтобы накапливать нажатия клавиш (каждое из них вызывает аппаратное прерывание, которое получает ядро - ядро должно реагировать на аппаратные прерывания - и переводить в символы) и возвращать их приложению, когда приложениепросит их.Точно так же данные, записанные оболочкой для того, что оболочка считает «стандартным выводом» (дескриптор 1), должны быть преобразованы ядром в отображаемые символы, что подразумевает обращение к видеооборудованию.
AБольшой ресурс обучения созданию операционной системы - Minix .Изначально Minix был задуман как инструмент обучения, подробно описанный в книге Танненбаума «Разработка и внедрение операционных систем» .Это с открытым исходным кодом и бесплатно.Сделайте себе одолжение, скачайте исходный код Minix и купите книгу (или позаимствуйте ее где-нибудь в библиотеке).