Основной вопрос о начальной загрузке ОС

У меня есть некоторый основной вопрос процессу начальной загрузки компьютера и части, где загрузчик называет ОС.

Таким образом, я знаю, что BIOS копирует первые 512 байтов с загрузочного диска в память и выполняет код - таким образом, это - блок начальной загрузки.

  • Но как тот маленький ассемблер загружает загрузчик команды от ОС?
  • Загрузчик продолжает работать и все еще действует как "передатчик" между программным и аппаратным обеспечением? Или контроль полностью дан к ОС?
  • Почему все загрузчики записаны в ассемблере?
  • И почему необходимо возвратиться от C++ до C при записи ОС?

С наилучшими пожеланиями, ламы

5
задан starblue 11 January 2010 в 20:27
поделиться

5 ответов

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

2) Нет,

3) Для минимизации занимаемого места.

4) Нет.

12
ответ дан 18 December 2019 в 07:29
поделиться

Но как этот небольшой загрузчик на ассемблере выполняет команды из ОС?

Поскольку вы не можете многое сделать в 512 байтах кода (хотя, на самом деле, загрузчик не является строго ограничено 512 байтами), загрузчик обычно не больше, чем загружает больший блок кода с диска в RAM и затем выполняет его.

Продолжает ли загрузчик работать и по-прежнему действует как «передатчик» между программным обеспечением и оборудованием? Или управление полностью отдано ОС?

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

Почему все загрузчики написаны на ассемблере?

Я полагаю, это в основном по одной причине: если вы напишете загрузчик на языке высокого уровня, созданный код вполне вероятно будет полагаться на какую-то библиотеку времени выполнения, содержащую Основные функции. Однако они часто не нужны для загрузчика и, следовательно, увеличивают размер кода.

И почему вам нужно возвращаться с C ++ на C при написании ОС?

Это не обязательно. Просто код C ближе к машине, чем C ++. С C ++ не всегда можно угадать, какой код будет создан и будет ли он настолько эффективным, насколько вам хотелось бы.

Изменить: Я также слышал аргумент, что некоторые разработчики ОС придерживаются языка C, потому что в различных парадигмах и стилях программирования меньше выбора, чем, например, в C ++. Поэтому легче работать в команде с общей кодовой базой, потому что каждый будет писать больше «похожего» кода. (Поскольку я сам не участвовал в разработке программ с открытым исходным кодом или ОС, я не могу судить по опыту, является ли это верным утверждение или нет.)

2
ответ дан 18 December 2019 в 07:29
поделиться
  • Но как этот маленький ассемблер загрузочный загрузчик команд из ОС?

Да, загрузчик невелик, но BIOS нет, и он реализуется .. всегда реализован .. Системные вызовы DOS I / O ". Эта система ввода / вывода изначально управляла всей системой ОС ввода / вывода обратно в DOS и ранние дни Windows. Теперь это просто консоль, ответственная за загрузку реальной ОС, которая затем поставляет все свои водители. Это своего рода устройство-драйвер-библиотека и оригинал-IBM-PC-эмулятор для загрузчика.

  • Загрузчик продолжит работу и до сих пор действует как «передатчик» между программным обеспечением и аппаратным обеспечением? Или контроль полностью дан ОС?

Загрузчик поднимает, как только ОС работает. Это хороший вопрос, хотя, потому что в исходном концепции ПК BIOS сделал I / O для ОС, а также загрузчик, и поэтому часть системы выжила загрузка ОС.

  • Почему все загрузчики, написанные в ассемблере?

Несколько причин: они должны быть маленькими, у них есть ограничения макета фиксированных адресов, они должны делать int $ x Звонки BIOS стиля и данные Их размер и тот факт, что некоторые из них должны быть в сборе, нет большого получения, принимая 128 или около того байта и говоря: «Хорошо, эта часть вы можете написать в C, попробуйте не писать более 10 или около того ".

  • И почему вы должны вернуться от C ++ к C при написании ОС?

C ++ сегодня в порядке; Назад, когда сегодняшние ядра были запускаются, что вещи были разными.

6
ответ дан 18 December 2019 в 07:29
поделиться

Чтобы ответить на ваш последний вопрос: ядра не нужно записываться в C. Но это делает их намного проще, когда дело доходит, чтобы попытаться выделить память.

C ++ имеет много разных случаев, когда вы можете получить память, неявную распределенную для временных переменных и т. Д., Они не всегда очевидны по инспекции кода. Это делает писать ядро ​​сложнее, так как вы должны избегать выделения памяти в некоторых контекстах.

Однако он не полностью исключает писать ядро ​​в C ++. Есть пути вокруг этого.

1
ответ дан 18 December 2019 в 07:29
поделиться

Загрузчик Bootstrap загружает операционную систему с диска.

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

Когда операционная система загружена, она берет на себя, и загрузчик отбрасывается.

Загрузчик Bootstrap обычно написан в ассемблере, потому что это хороший баланс между общим контролем и читаемостью. Он может быть написан в простом машинном коде (и первые, вероятно, были), но это сложнее читать. Он может быть написан на низкоуровневом языке, такой как C, но трудно достичь процедуры низкого уровня в BIOS, что вам нужно сделать загрузку, а также трудно держать его в пределах размеров, поскольку скомпилированный код имеет тенденцию иметь много накладных расходов.

Операционная система обычно записывается на Langauge низкого уровня, такое как C (с такими вещами, как загрузчики загрузочных и аппаратных драйверов, все еще в ассемблере). Вы можете написать его в C ++, поскольку он строит на C, но это было бы в основном бессмысленно, так как вы не использовали большую часть того, что добавил C ++. Объектная ориентация просто не очень полезна при написании операционной системы.

0
ответ дан 18 December 2019 в 07:29
поделиться