¿Cómo lee exactamente el BIOS el primer sector?

¿Cómo lee exactamente el BIOS el primer sector?

Necesito saber si el comando ATA Read Sector todavía está en uso. Leí en el libro Tecnología de almacenamiento SATA que este comando y, en general, los comandos de lectura PIO se usan solo en el proceso de arranque. Entonces comencé a investigar el proceso de arranque y tengo cierta confusión al respecto.

Sé que el BIOS lee el primer sector o MBR como parte del proceso de arranque. También leí que BIOS usa INT 13 para hacer eso.

El dispositivo SATA se comunica a través de HBA. Entonces esta lectura del primer sector debe ser después de que haya finalizado el proceso de inicialización entre SATA y HBA.

¿Cómo lee el BIOS el primer sector?...

¿El HBA traduce los comandos INT 13 a ATA?En caso afirmativo,
¿No necesita esto la presencia del conductor AHCI?
¿Cuándo se carga el controlador?

O

¿El BIOS se comunica directamente con el disco duro?Creo que esto no es posible.

Respuesta1

Para dispositivos; hay disquetes, SCSI, ATA, ATAPI, almacenamiento masivo USB, SATA, NVME, etc. La mayoría de ellos tienen un controlador (donde la CPU solo puede comunicarse con el controlador y el controlador se comunica con los dispositivos conectados al controlador). A veces, la interfaz que proporciona el controlador está relativamente estandarizada (por ejemplo, AHCI) y otras no (SCSI, controladores RAID de hardware); y, a veces, el controlador proporciona múltiples interfaces (por ejemplo, un controlador SATA puede admitir AHCI, además de una emulación (P)ATA heredada, además de una interfaz RAID no estándar; y tener opciones para seleccionar cuál en la configuración del BIOS).

Para todos los casos; o el BIOS tiene un código de controlador (mínimo) integrado (probablemente para controladores/dispositivos "relativamente estandarizados" y controladores integrados en la placa base); o el controlador tiene una "ROM de dispositivo" incorporada (por ejemplo, en la misma tarjeta PCI) que engancha/intercepta "int 0x13".

En todo caso; "int 0x13" usaría el parámetro "número de dispositivo" para determinar cuál es el dispositivo y pasar al código del controlador de dispositivo para ese dispositivo.

¿El HBA traduce los comandos INT 13 a ATA?

Si un controlador SATA utiliza AHCI como interfaz; luego, el controlador convertiría las solicitudes "int 0x13" en comandos SATA/AHCI para HBA. Si un controlador SATA utiliza una emulación (P)ATA heredada, el controlador convertiría las solicitudes "int 0x13" en comandos (P)ATA heredados y, a continuación, el HBA traduciría los comandos ATA al conjunto de comandos SATA.

¿No necesita esto la presencia del conductor AHCI?

Sí. Tenga en cuenta que es un controlador mínimo (que no admite cosas como "SATA de conexión en caliente", cola de comandos nativa, borrado seguro, expulsión, recorte, ...) que utiliza un "comando de inicio, desperdicia tiempo de CPU al tiempo que evita el paralelismo y arruina el rendimiento hasta El comando se completa y luego devuelve el estado" para simplificar. Estas cosas significan que no se parece en nada a un controlador de dispositivo de lo que un sistema operativo querría usar.

¿Cuándo se carga el controlador?

El código del controlador siempre está presente en una ROM en algún lugar (no se carga desde el disco en algún momento). El código del controlador se inicializa antes de que el firmware busque "ROM del dispositivo" o cuando el firmware inicializa las "ROM del dispositivo".

Después de que todo esté inicializado; (suponiendo que el BIOS arranca desde un disco normal, por ejemplo, no arranca desde la red) El BIOS puede simplemente usar 'int 0x13" para cargar el primer sector desde "cualquiera que sea el dispositivo en el que terminó después de que se inicializaron las ROM del dispositivo".

Respuesta2

Después de algunas pruebas con el analizador SATA, resulta que el BIOS o UEFI son lo suficientemente inteligentes como para no utilizar comandos ATA lentos comoLEER SECTOR(ES)en el proceso de arranque. en su lugar utiliza el comando ATALEER EXT DMA.

para completar, la secuencia es:

Después de que la unidad envía su firma, el HBA envía el comando ATAIDENTIFICAR DISPOSITIVOy luego enviarLEER EXT DMAcon LBA = 0.

Sin embargo, no estoy seguro si el sistema operativo usaLEER SECTOR(ES)oESCRIBIR SECTOR(ES)en cualquier caso durante el trabajo normal. Espero que no, ya que implementar el protocolo PIO IN/OUT en FPGA no es un trabajo agradable.

información relacionada