3

Я понимаю, что BIOS находится в ПЗУ, и производитель "обычно" проектирует его так, чтобы он указывал на первый сектор первого сектора "активного" устройства хранения или CHS (0,0,1)* физического и CHS (0,0, 0)* логический, который является MBR или VBR в зависимости от ваших предпочтений разделения.


Википедия:

Наличие IBM PC-совместимого загрузчика для процессоров x86 в загрузочном секторе по соглашению обозначается двухбайтовой шестнадцатеричной последовательностью 0x55 0xAA (называемой сигнатурой загрузочного сектора) в конце загрузочного сектора (смещения 0x1FE и 0x1FF) , Эта подпись указывает на наличие, по крайней мере, фиктивного загрузчика, который можно безопасно запускать, даже если он не может реально загружать операционную систему.

Загрузочная подпись идентифицирует загрузчик с помощью двухбайтовой шестнадцатеричной последовательности, поэтому я предполагаю, что подпись должна быть смещением в том же секторе? Поэтому, если предположить, что загрузчик должен быть в этом же секторе?

2 ответа2

6

Основной порядок операций, которые происходят, когда BIOS пытается найти что-то для загрузки:

  1. Загрузите в память первый сектор (512 байт) устройства, с которого вы пытаетесь загрузиться (HDD, SSD, дискета, оптический диск и т.д.)
  2. Проверьте, являются ли 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 не обязательно обращает какое-либо внимание или даже знает об идентификаторе диска или таблице разделов.

0

Код 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, фактическое смещение равно нулю.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .