Boot Signature - BIOS
Я понимаю, что BIOS находится в ПЗУ, и производитель "обычно" разрабатывает его так, чтобы он указывал на первый сектор первого сектора "активного" устройства хранения или CHS (0,0,1)* физического и CHS (0,0,0)* логический, который является MBR или VBR в зависимости от ваших предпочтений разделения.
Наличие совместимого с IBM PC загрузчика для процессоров x86 в загрузочном секторе по соглашению обозначается двухбайтовой шестнадцатеричной последовательностью 0x55 0xAA (называемой сигнатурой загрузочного сектора) в конце загрузочного сектора (смещения 0x1FE и 0x1FF), Эта подпись указывает на наличие, по крайней мере, фиктивного загрузчика, который можно безопасно запускать, даже если он не может реально загружать операционную систему.
Загрузочная подпись идентифицирует загрузчик с помощью двухбайтовой шестнадцатеричной последовательности, поэтому я предполагаю, что подпись должна быть смещением в том же секторе? Поэтому, если предположить, что загрузчик должен быть в этом же секторе?
2 ответа
Основной порядок операций, которые происходят, когда BIOS пытается найти что-то для загрузки:
- Загрузите в память первый сектор (512 байт) устройства, с которого вы пытаетесь загрузиться (HDD, SSD, дискета, оптический диск и т. Д.)
- Проверьте, являются ли 511-й и 512-й байты 0x55 и 0xAA соответственно.
- Если нет, вернитесь к шагу 1 и попробуйте следующее устройство или откажитесь, если его больше нет.
- Если да, начните выполнять код в начале этого сектора, передавая управление (надеюсь) загрузчику / менеджеру.
Вы можете найти вики-страницу OSDev в последовательности загрузки полезной. Страница MBR также имеет полезную таблицу, объясняющую расположение этого первого сектора. Я воссоздал это здесь с некоторым упрощением:
Offset | Size (bytes) | Description
0 | 436 | MBR Bootstrap (flat binary executable code)
0x1b4 | 10 | Optional "unique" disk ID
0x1be | 64 | MBR Partition Table, with 4 entries
0x1fe | 2 | (0x55, 0xAA) "Valid bootsector" signature bytes
Обратите внимание, что BIOS не обязательно обращает какое-либо внимание или даже знает об идентификаторе диска или таблице разделов.
Код BIOS находится в ПЗУ (или EEPROM в наши дни). Он загружает первый сектор с диска (#0 в нотации LBA или c=0,h=0,s=1 в нотации CHS), проверяет, что последние два байта являются 0x55 и 0xAA, и передает управление этому сектору.
Таким образом, MBR фактически идентифицируется по его адресу #0. И подпись 55 АА только для проверки. Если первый сектор заполнен нулями (как для новых жестких дисков), BIOS может обнаружить это, пропустив подпись 55 AA и попытаться загрузиться с другого диска, или PXE, или ROM BASIC, или чего-либо еще.
0x55 0xAA не является смещением MBR, фактическое смещение равно нулю.