Но как этот маленький ассемблер загружает загрузчик команды из ОС?
Поскольку вы не можете сделать много в 512 байтах кода (хотя, фактически, загрузчик не является строго ограниченным 512 байтами), загрузчик обычно не намного загружает больший блок код с диска в оперативную память, а затем выполнить его.
Продолжает ли загрузчик работать и все еще действует как «передатчик» между программным и аппаратным обеспечением? Или управление полностью передано ОС?
Я думаю, что после того, как код загрузчика выполнил свою работу и перешел к дополнительному коду, который он загрузил в память, его можно переопределить, поскольку он больше не нужен.
Почему все загрузчики написаны на ассемблере?
Полагаю, это в основном по одной причине: если вы пишете загрузчик на языке высокого уровня, созданный код, скорее всего, будет опираться на какую-то библиотеку времени выполнения, содержащую необходимые функции. Однако, они часто не нужны для загрузчика и поэтому увеличивают размер кода.
А почему при написании ОС нужно возвращаться с C ++ к C?
Тебе не обязательно. Просто код C ближе к машине, чем C ++. С C ++ вы не всегда можете угадать, какой код будет создан, и будет ли он настолько эффективным, насколько вам бы хотелось.
Редактировать: Я также слышал аргумент, что некоторые разработчики ОС придерживаются языка C, потому что выбор различных парадигм и стилей программирования меньше, чем, например, в C ++. Поэтому легче работать в команде с общей кодовой базой, потому что каждый будет писать больше «похожего» кода. (Поскольку я сам не участвовал в разработке open-source или OS, я не могу судить по опыту, является ли это верным утверждением или нет.)