Considerando x86 CPU / LINUX
Eu quero entender como cpu ou dma acessam o disco rígido? O disco rígido precisa ser acessado por meio de endereços de porta IO ou mapeado na memória (MMIO)?
Considerando x86 CPU / LINUX
Eu quero entender como cpu ou dma acessam o disco rígido? O disco rígido precisa ser acessado por meio de endereços de porta IO ou mapeado na memória (MMIO)?
Os dados no disco rígido não fazem parte do espaço de endereço físico. 1 Os dados não são mapeados na memória.
O controlador SATA (por exemplo) possui registradores de E/S que a CPU precisa gravar, para programá-la para fazer uma transferência DMA de
n
setores de um determinado deslocamento de disco para um determinado endereço de memória física.Alguns ou todos esses registradores de E/S podem ser acessados via MMIO (cargas normais e armazenamentos em endereços especiais) em vez de
in
/out
porta IO. Mas ainda é só enviar os comandos desejados para o controlador SATA. (Para obter detalhes sobre isso, consulte https://wiki.osdev.org/AHCI .) AHCI é o tipo mais amplamente usado de kernel <-> interface de driver de hardware, mas existem outros (por exemplo, controladores RAID sofisticados que precisam de seus próprios drivers ).por exemplo, o controlador AHCI SATA no meu mobo, de acordo com
lspci -v
:Essas duas pequenas regiões de "memória" (2k e 8k) são quase certamente portas MMIO, mas também possuem algumas portas de E/S no espaço de endereço de E/S. O "non-prefetchable" é uma dica lá; se as leituras tiverem um efeito colateral, a pré-busca deve ser desativada.
Observe o
flags: bus master
. Isso significa que ele pode DMA de/para a memória principal.Mas meu SSD NVMe tem apenas espaço MMIO, sem portas de E/S herdadas.
Controladores de discos rígidos modernos não fazem a CPU copiar os dados 4 ou 8 bytes por vez com "E/S programada". Essa era uma opção com controladores IDE / ATA clássicos, mas apenas como um recurso caso algo ruim acontecesse (como travamentos ou corrupção de dados) em sua placa-mãe ou controlador PCI HD ao usar
hdparm
para configurar os drivers Linux para usar transferências DMA em pré-SATA sistemas.Tecnicamente, o PIO ainda é uma opção para os controladores AHCI SATA, aparentemente. Mas nunca é o padrão; ao contrário dos velhos tempos, quando o hardware quebrado era uma possibilidade real, os sistemas operacionais modernos podem esperar com segurança que o DMA funcione corretamente.
Nota de rodapé 1 : a menos que seu "disco rígido" seja na verdade um DIMM não volátil em um slot de memória, como Intel Optane DC PM ou uma DRAM com bateria). Obter dados armazenados recentemente enviados de caches de CPU de write-back para armazenamento mapeado em memória não volátil é um caso de uso para instruções como
clflushopt
ouclwb
.