Como a CPU/DMA acessa o disco rígido?

Como a CPU/DMA acessa o disco rígido?

Considerando CPU x86/LINUX

Quero entender como a CPU ou o DMA acessam o disco rígido? O disco rígido precisa ser acessado através de endereços de porta IO ou mapeado na memória (MMIO)?

Responder1

Os dados no disco rígido não fazem parte do espaço de endereço físico. 1 Odadosnão é mapeado na memória.

O controlador SATA (por exemplo) possui registros de E/S nos quais a CPU precisa gravar, para programá-la para fazer uma transferência DMA de nsetores de um determinado deslocamento do disco para um determinado endereço de memória física.

Alguns ou todos esses registros de E/S podem ser acessíveis via MMIO (cargas normais e armazenamentos em endereços especiais) em vez de in/ outporta IO. Mas ainda é só enviar os comandos desejados ao controlador SATA. (Para obter detalhes sobre isso, consultehttps://wiki.osdev.org/AHCI.) AHCI é o tipo de interface de driver de hardware <-> de kernel mais amplamente usado, mas existem outros (por exemplo, controladores RAID sofisticados que precisam de seus próprios drivers).

por exemplo, o controlador AHCI SATA na minha mobo, de acordo com lspci -v:

00:17.0 SATA controller: Intel Corporation Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode] (rev 31) (prog-if 01 [AHCI 1.0])
        Subsystem: ASUSTeK Computer Inc. Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode]
        Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 135
        Memory at f7248000 (32-bit, non-prefetchable) [size=8K]
        Memory at f724c000 (32-bit, non-prefetchable) [size=256]
        I/O ports at f090 [size=8]
        I/O ports at f080 [size=4]
        I/O ports at f060 [size=32]
        Memory at f724b000 (32-bit, non-prefetchable) [size=2K]
        Capabilities: <access denied>
        Kernel driver in use: ahci
        Kernel modules: ahci

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 "não pré-buscável" é uma dica; se as leituras tiverem um efeito colateral, a pré-busca deverá ser desativada.

Note o flags: bus master. Isso significa que ele pode fazer DMA de/para a memória principal.

Mas meu SSD NVMeapenastem espaço MMIO, sem portas de E/S herdadas.

03:00.0 Non-Volatile memory controller: Intel Corporation SSD 600P Series (rev 03) (prog-if 02 [NVM Express])
        Subsystem: Intel Corporation SSD 600P Series
        Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0
        Memory at f7000000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: <access denied>
        Kernel driver in use: nvme

Os controladores de disco rígido 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 alternativa caso algo ruim acontecesse (como travamentos ou corrupção de dados) em sua placa-mãe ou controlador PCI HD ao usar hdparmpara configurar os drivers Linux para usar transferências DMA em pré-SATA sistemas.

Tecnicamente, o PIO ainda é uma opção para controladores AHCI SATA, aparentemente. Mas nunca é o padrão; ao contrário dos velhos tempos, quando hardware quebrado era uma possibilidade real, os sistemas operacionais modernos podem esperar com segurança que o DMA funcionará corretamente.


Nota de rodapé 1: a menos que o seu "disco rígido" seja na verdade umDIMM não volátilem um slot de memória, comoIntel Optane DCPM, ou uma DRAM alimentada por bateria). Transferir dados armazenados recentemente 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 clflushoptou clwb.

informação relacionada