# Acesso direto à memória

O termo DMA é um acrónimo para a expressão em inglês Direct memory access. O DMA permite que certos dispositivos de hardware num computador acessem a memória do sistema para leitura e escrita independentemente da CPU. Muitos sistemas utilizam DMA, incluindo controladores de disco, placas gráficas, de rede ou de som.O acesso direto da memória é usado igualmente para transferência de dados de núcleos em processadores multi-core, em especial nos sistema-em-microplaquetas do processador, onde seu elemento de processamento é equipado com uma memória local ,e o acesso direto da memória é usado para transferir dados entre a memória local e a memória principal. Os computadores que têm os canais de acesso direto à memória podem transferir dados aos dispositivos com muito menos perdas gerais de processamento do que computadores sem uma via de acesso direto à memória. Similarmente um elemento de processamento dentro de um processador multi-core pode transferir dados para e de sua memória local sem ocupar seu tempo de processamento e permitir a simultaneidade de transferência de dados. Sem acesso direto da memória, usando a modalidade programada de entrada/saída (E/S) para uma comunicação com os dispositivos periféricos, ou as instruções da troca no caso dos núcleos multi-core, o processador central é ocupado inteiramente para a leitura ou escrita da operação, e assim não se torna possível executar o outro afazer. Com acesso direto da memória, o processador central executa transferências, faz outras operações enquanto alguma transferência estiver em andamento, recebe uma interrupção do controlador de acesso direto da memória uma vez que a operação foi feita.

## Princípio

O DMA é uma característica essencial dos computadores modernos. Normalmente o único componente que acessa a memória RAM da máquina é o processador. O recurso DMA permite que outros componentes também acessem a memória RAM diretamente, como discos rígidos, o que aumenta o desempenho na transferência de grande quantidade de dados. De outra maneira, a CPU teria que copiar todos os dados da fonte até o destino. Isto é tipicamente mais lento do que copiar blocos de dados dentro da memória, já que o acesso a dispositivo de I/O através de barramentos periféricos é mais lento que a RAM. Durante a cópia dos dados a CPU ficaria indisponível para outras tarefas.
Uma transferência por DMA essencialmente copia um bloco de memória de um dispositivo para outro. A CPU inicia a transferência, mas não executa a transferência. Para os chamados third party DMA, como é utilizado normalmente nos barramentos ISA, a transferência é realizada pelos controladores DMA que são tipicamente parte do chipset da placa mãe. Projetos mais avançados de barramento, como o PCI, tipicamente utilizam bus-mastering DMA, onde o dispositivo toma o controle do barramento e realiza a transferência de forma independente.
Um uso típico do DMA ocorre na cópia de blocos de memória da RAM do sistema para um buffer de dispositivo. Estas operações não bloqueiam o processador que fica livre para realizar outras tarefas. Transferências DMA são essenciais para sistemas embarcados de alto desempenho. Também é fundamental na implementação de drivers de periféricos, roteamento de pacotes de rede, execução de áudio e vídeo por streaming Existem 8 portas de DMA e, como acontece com os pedidos de interrupção, dois dispositivos não podem compartilhar o mesmo canal DMA, caso contrário haverá um conflito. Os 8 canais DMA são numerados de 0 a 7, sendo nos canais de 0 a 3 a transferência de dados feita a 8 bits e nos demais a 16 bits. O uso de palavras binárias de 8 bits pelos primeiros 4 canais de DMA visa manter compatibilidade com periféricos mais antigos.
Justamente por serem muito lentos, os canais de DMA são utilizados apenas por periféricos lentos, como drives de disquete, placas de som e portas paralelas padrão ECP. Periféricos mais rápidos, como discos rígidos, utilizam o Bus Mastering, uma espécie de DMA melhorado.
O Canal 2 de DMA é nativamente usado pela controladora de disquetes. Uma placa de som geralmente precisa de dois canais de DMA, um de 8 e outro de 16 bits, usando geralmente o DMA 1 e 5. O DMA 4 é reservado à placa mãe. Ficamos então com os canais 3, 6 e 7 livres. Caso a porta paralela do micro seja configurada no Setup para operar em modo ECP, precisará também de um DMA, podemos então configurá-la para usar o canal 3,

## Memória cache problema de coerência

DMA pode guiar para memória cache problemas de coerência. Imagine um CPU equipado com uma memória cache e uma memória externa que possam ser acessadas diretamente por dispositivos usando DMA. Quando o CPU acessa a localização X na memória, o corrente valor está armazenado em outro local na cache. Subseqüentemente operações serão efetuadas com o valor X tais como disposição e atualização, a memória cache copia X. Se a cache não é esguichado à memória antes do fim próxima vez que um dispositivo tenta acessar X, o dispositivo capta um stale valor de X.
Da mesma forma, se a memória cache copiar de X , o valor corrente não é o correto pois quando um dispositivo escreve um novo valor na memória, depois a CPU opera um valor incorreto de X.
Esta edição pode ser endereçada de duas maneiras no projeto de sistema: os sistemas posição-coerentes executam um método no hardware por meio de que o dispositivo externo escreve é sinalizado ao controlador do esconderijo qual executa então uma invalidação da posição-esconderijo (para o acesso direto da memória lê) ou resplendores (para o acesso direto da memória escreve) as linhas da posição na pergunta. Os sistemas sem coerência deixam este processo ao software, onde o Sistema Operacional deve então se assegurar de que as linhas da posição estejam niveladas antes que alguma transferência parta utilizando acesso direto da memória, e que estejam estes acessos se já decorridos sejam invalidados antes que uma escala da memória afetada por transferência durante acesso direto da memória comprometida. O Sistema Operacional deve certificar-se de que a escala da memória não seja comprometida por nenhuma das linhas correntes. A última aproximação introduz algumas despesas gerais à operação do acesso direto da memória, porque a maioria do hardware exige que um laço invalide individualmente cada linha da posição-esconderijo.
Os híbridos igualmente existem, onde a posição-esconderijo L2 secundário é coerente quando o posição-esconderijo L1 (tipicamente na CPU) for controlado pelo software.

## Exemplos

Por exemplo, um controlador DMA ISA de um PC tem 16 canais DMA dos quais 7 estão disponíveis para a CPU. Cada canal DMA é associado com um registador de endereço de 16-bit e um registador contador de 16-bit. Para iniciar uma transferência o driver do dispositivo inicializa o endereço e o contador com a direcção da transferência, leitura ou escrita. Ele instrui o hardware DMA para iniciar a transferência. Quando a transferência é completa o dispositivo interrompe a CPU.
Um tipo de DMA conhecido como scatter-gather permite transferências em múltiplas áreas de memória em uma única transação. Isto é equivalente ao encadeamento de múltiplas requisições simples de DMA. Novamente, a motivação é libertar a CPU de múltiplas interrupções de I/O.
A requisição DMA é chamada de DMARQ e o acknowledge(confirmação) de DACK. Estes símbolos são geralmente vistos em esquemas de hardware que utilizam DMA. Eles representam os sinais eletrônicos trocados entre a CPU e o controlador DMA.
Motor DMA
Como exemplo de motor DMA incorporado em um processador de propósito geral, são os novos chipsets Intel Xeon, que incluem uma tecnologia chamada DMA I/O Acceleration Technology(I/OAT) destinado a melhorar o desempenho de rede(Gigabit Ethernet).