O que é acesso direto à memória (DMA) e como funciona? [MiniTool Wiki]
What Is Direct Memory Access
Navegação rápida :
Você pode adotar o RDMA tecnologia para permitir que computadores em uma rede troquem dados na memória principal sem envolver o processador, cache ou sistema operacional de qualquer um dos computadores. Mas você também pode usar o recurso DMA para enviar dados diretamente de um dispositivo conectado para a memória na placa-mãe do computador. Esta postagem de MiniTool está falando principalmente sobre DMA.
A definição de acesso direto à memória
Em primeiro lugar, o que é acesso direto à memória? O acesso direto à memória pode ser abreviado para DMA, que é um recurso dos sistemas de computador. Ele permite que dispositivos de entrada / saída (I / O) acessem a memória principal do sistema ( memória de acesso aleatório ), independente da unidade central de processamento (CPU), o que acelera as operações de memória.
Dica: Você pode estar interessado nesta postagem - 8 soluções úteis para consertar sua CPU 100% no Windows 10 .
Sem o acesso direto à memória, quando a CPU usa entradas / saídas programadas, ela geralmente fica totalmente ocupada durante toda a operação de leitura ou gravação, portanto, não pode realizar outras tarefas. Com o DMA, a CPU primeiro inicia a transferência, depois executa outras operações enquanto a transferência está em andamento e, finalmente, recebe uma interrupção do controlador DMA (DMAC) quando a operação é concluída.
O acesso direto à memória é útil sempre que a CPU não consegue acompanhar a taxa de transferência de dados ou quando a CPU precisa realizar um trabalho enquanto espera por transferências de dados de E / S relativamente lentas.
Vários sistemas de hardware adotam o acesso direto à memória, como controladores de unidade de disco, placas gráficas, placas de rede e placas de som. O DMA também é usado para transferência de dados no chip em processadores multi-core. Em comparação com computadores sem canais de acesso direto à memória, os computadores com canais DMA podem transferir dados entre dispositivos com muito menos sobrecarga de CPU.
O acesso direto à memória também pode ser usado para “memória para memória” para copiar ou mover dados na memória. Ele pode transferir operações de memória caras (como cópias grandes ou operações de coleta dispersa) da CPU para um mecanismo DMA dedicado. O DMA é importante nas arquiteturas de computação de rede no chip e memória.
Como funciona o acesso direto à memória?
Então, como funciona o Acesso direto à memória? O acesso direto à memória padrão (também chamado de DMA de terceiros) adota um controlador DMA. O controlador DMA pode produzir endereços de memória e iniciar ciclos de leitura ou gravação de memória. Ele cobre vários registros de hardware que podem ser lidos e escritos pela CPU.
Esses registros consistem em um registro de endereço de memória, um registro de contagem de bytes e um ou mais registros de controle. Dependendo dos recursos fornecidos pelo controlador de acesso direto à memória, esses registros de controle podem indicar alguma combinação de origem, destino, direção de transferência (leitura ou gravação no dispositivo de E / S), tamanho da unidade de transferência e / ou o número de bytes para transferir em um burst.
Para realizar operações de entrada, saída ou memória para memória, o processador host inicializa o controlador DMA com o número de palavras a serem transferidas e o endereço de memória a serem usados. Em seguida, a CPU comanda o dispositivo periférico para iniciar a transferência de dados.
Em seguida, o controlador de acesso direto à memória oferece endereços e linhas de controle de leitura / gravação para a memória do sistema. Cada vez que um byte de dados é preparado para ser transferido entre o dispositivo periférico e a memória, o controlador DMA incrementa seu registro de endereço interno até que um bloco de dados completo seja transferido.
Modos de operação
O acesso direto à memória funciona de maneira diferente em diferentes modos de operação.
Modo Burst
No modo burst, o bloco de dados completo é transmitido em uma sequência contínua. Uma vez que a CPU permite que o controlador DMA acesse o barramento do sistema, o controlador DMA irá transferir todos os bytes de dados no bloco de dados antes de liberar o controle dos barramentos do sistema de volta para a CPU, mas fará com que a CPU fique inativa por um muito tempo considerável. Este modo também é denominado “Modo de transferência em bloco”.
Modo Cycle Stealing
O modo de roubo de ciclo é usado em um sistema onde a CPU não pode ser desabilitada pelo período de tempo necessário para o modo de transferência em burst. No modo de roubo de ciclo, o controlador DMA obtém o acesso ao barramento do sistema utilizando os sinais BR (Solicitação de barramento) e BG (Concessão de barramento), que são iguais ao modo de burst. Esses dois sinais controlam a interface entre a CPU e o controlador DMA.
Por um lado, no modo de roubo de ciclo, a velocidade de transmissão do bloco de dados não é tão rápida quanto no modo burst, mas, por outro lado, o tempo ocioso da CPU não é tão longo quanto no modo burst.
Modo Transparente
O modo transparente leva mais tempo para transferir blocos de dados, mas também é o modo mais eficiente em termos de desempenho geral do sistema. No modo transparente, o controlador de acesso direto à memória transfere dados apenas quando a CPU realiza operações que não usam os barramentos do sistema.
A principal vantagem do modo transparente é que a CPU nunca para de executar seus programas e as transferências de acesso direto à memória são livres em termos de tempo, enquanto a desvantagem é que o hardware precisa determinar quando a CPU não está usando os barramentos do sistema, o que pode ser complicado. Isso também é chamado de “modo de transferência de dados DMA oculto”.