Preciso saber se o comando ATA Read Sector ainda está em uso. Eu li no livro SATA Storage Technology que este comando e, em geral, os comandos de leitura PIO são usados apenas no processo de inicialização. Então comecei a analisar o processo de inicialização e estou confuso sobre isso.
Eu sei que o BIOS lê o primeiro setor ou MBR como parte do processo de inicialização. Li também que o BIOS usa o INT 13 para fazer isso.
O dispositivo SATA se comunica via HBA. Portanto esta leitura do primeiro setor deve ser feita após o término do processo de inicialização entre SATA e HBA.
Como o BIOS lê o primeiro setor...
O HBA traduz os comandos INT 13 para ATA?Se sim,
Isso não precisa da presença do driver AHCI?
Quando o driver é carregado?
OU
O BIOS se comunica diretamente com o disco rígido?Acho que isso não é possível.
Responder1
Para dispositivos; há disquete, SCSI, ATA, ATAPI, armazenamento em massa USB, SATA, NVME, etc. A maioria deles tem um controlador (onde a CPU só pode se comunicar com o controlador e o controlador se comunica com o(s) dispositivo(s) conectado(s) ao controlador). Às vezes, a interface fornecida pelo controlador é relativamente padronizada (por exemplo, AHCI) e às vezes não é (SCSI, controladores RAID de hardware); e às vezes o controlador fornece múltiplas interfaces (por exemplo, um controlador SATA pode suportar AHCI, além de emulação herdada (P)ATA, além de uma interface RAID não padrão; e ter opções para selecionar quais nas configurações do BIOS).
Para todos os casos; ou o BIOS possui código de driver (mínimo) integrado (provavelmente para controladores/dispositivos "relativamente padronizados" e controladores integrados à placa-mãe); ou o controlador possui uma "ROM de dispositivo" incorporada (por exemplo, na mesma placa PCI) que conecta/intercepta "int 0x13".
Em todo o caso; "int 0x13" usaria o parâmetro "número do dispositivo" para descobrir qual é o dispositivo e ramificar para o código do driver do dispositivo para esse dispositivo.
O HBA traduz os comandos INT 13 para ATA?
Se um controlador SATA estiver usando AHCI como interface; então o driver converteria solicitações "int 0x13" em comandos SATA/AHCI para HBA. Se um controlador SATA estiver usando emulação herdada (P)ATA, o driver converterá solicitações "int 0x13" em comandos legados (P)ATA e o HBA traduzirá os comandos ATA no conjunto de comandos SATA.
Isso não precisa da presença do driver AHCI?
Sim. Observe que é um driver mínimo (sem suporte a coisas como "hot-plug SATA", enfileiramento de comandos nativos, apagamento seguro, ejeção, corte, ...) que usa um "comando de inicialização, desperdiça tempo de CPU enquanto evita o paralelismo e prejudica o desempenho até o comando é concluído e, em seguida, retorna a abordagem "status" para simplificar. Essas coisas significam que não se parece em nada com um driver de dispositivo que um sistema operacional gostaria de usar.
Quando o driver é carregado?
O código do driver está sempre presente em algum lugar de uma ROM (não carregado do disco em algum momento). O código do driver é inicializado antes do firmware procurar por "ROMs de dispositivo" ou quando o firmware está inicializando "ROMs de dispositivo".
Depois que tudo estiver inicializado; (assumindo que o BIOS está inicializando a partir do disco normal - por exemplo, não inicializando a partir da rede) O BIOS pode simplesmente usar 'int 0x13" para carregar o primeiro setor de "qualquer dispositivo que ele acabou sendo após a inicialização das ROMs do dispositivo".
Responder2
Após alguns testes com o analisador SATA, descobriu-se que o BIOS ou UEFI é inteligente o suficiente para não usar comandos ATA lentos, comoLER SETOR(ES)no processo de inicialização. em vez disso, ele usa o comando ATALEIA DMA EXT.
para completar, a sequência é:
após o drive enviar sua assinatura, o HBA envia o comando ATAIDENTIFICAR DISPOSITIVOe, em seguida, envieLEIA DMA EXTcom LBA = 0.
Não tenho certeza se o sistema operacional usaLER SETOR(ES)ouESCREVER SETOR(ES)em qualquer caso durante o trabalho normal. Espero que não, pois implementar o protocolo PIO IN/OUT em FPGA não é um trabalho agradável.