Что именно заставляет BIOS решать, является ли диск загрузочным или нет?
BIOS решает, является ли диск загрузочным, основываясь на 16-байтовой записи раздела, присутствующей после области кода MBR (хранится в таблице, начиная с 446- го байта). Первый байт в каждой записи раздела представляет состояние загрузки диска (и устанавливается 0x80
если он загрузочный, или 0x00
если нет). Некоторые BIOS могут проверять другие части MBR (например, типы разделов, контрольные суммы), но основным требованием является флаг загрузки.
Как последовательность загрузки пропускается с диска № 1 и продолжает попытки загрузки с диска № 2, если в системе установлено более одного диска?
Это зависит от реализации, и поэтому вам нужно правильно выбрать порядок загрузки. В большинстве случаев BIOS просматривает каждый носитель в установленном вами порядке и определяет, может ли он загружаться с этого устройства (через данные MBR). Если это возможно, он делает - если нет, он продолжает проходить через другие устройства (опять же, в порядке, который вы выбрали).
После того, как BIOS передал управление загрузчику на диске № 1, на котором не было "загрузочных" разделов - как именно вызывается загрузчик на втором диске?
Как только будет найдено допустимое загрузочное устройство (т. Е. Установлен флаг загрузки и пройдены другие дополнительные проверки), BIOS копирует сектор MBR в ОЗУ. Затем BIOS перемещает указатель инструкций в начало этого местоположения (используя инструкцию JUMP
), где находится сегмент кода MBR, и компьютер затем запускается.
Если BIOS поддерживает спецификацию загрузки BIOS, код MBR может вернуть управление BIOS с определенной инструкцией, сигнализируя об ошибке загрузки и предлагая попробовать следующее устройство. Старые BIOS просто выводят сообщение об ошибке. Хорошо, если ваш BIOS поддерживает, можете ли вы загрузиться с USB.
Насколько я понимаю, единственное, что BIOS обычно проверяет на MBR, это его подпись в самом конце 512-байтового сектора, а затем он просто передает управление начальному загрузчику, расположенному в первых 446 байтах загрузочного сектора.
Это правильно, хотя следует отметить, что большинство современных BIOS также будут искать таблицу разделов GUID, а также более старую, традиционную таблицу в стиле MBR.
Означает ли это, что первые 446 байтов загрузочного сектора ДОЛЖНЫ содержать какой-либо значимый код загрузчика, даже если диск не является загрузочным?
Нет, но диск должен иметь действительную таблицу разделов MBR или GUID - в противном случае он не будет обнаружен компьютером. Хотя кодовая часть MBR действительно может быть пустой, первый сектор диска должен иметь правильно сформированный MBR/GPT.