DMA (Direct Memory Access) é uma funcionalidade implementada nos processadores e sistemas computacionais em geral, com o objetivo melhorar o desempenho e aumentar a velocidade do processamento de dados. 

No geral, o processo consiste em ler ou gravar dados diretamente em um periférico sem a necessidade de ocupar o processador com essa tarefa. É um processo muito útil principalmente em sistemas que tem pouco poder de processamento, e por isso se popularizou rapidamente com a chegada dos computadores pessoais. 

Um exemplo prático e muito claro da utilidade do DMA é o monitor. A quantidade de dados a ser processados para mostrar uma imagem na tela em tempo real é muito grande. Se apenas o processador do PC trabalhasse para realizar essa tarefa, provavelmente, ao colocarmos um vídeo para rodar, não conseguiríamos fazer mais nada. Porém, como podemos perceber, não é bem isso que acontece...Vamos explicar o porquê.


8JLWR2p.png
Existe um componente chamado Controlador de DMA (DMAC - DMA Controller).
 
O DMAC, como mostrado na imagem, trabalha paralelo a CPU. Ele é o responsável por controlar todo esse processo de gravação ou leitura de dados com uma interferência mínima da CPU. 
No vídeo abaixo é mostrado o passo-a-passo de como o processo funciona (em inglês):

https://www.youtube.com/watch?v=gT4O79UAS1w

Resumidamente, o DMAC deve ser previamente definido com alguns dados para seu correto funcionamento, são eles:

  1. Endereço da Fonte
  2. Posição Inicial da memória
  3. Quantidade de Bytes

Com esses dados o DMAC envia um pedido de interrupção a CPU, que cede ao DMAC o controle do fluxo de dados do periférico a ser utilizado, por exemplo um leitor de DVD. Então esse tráfego passa a ser controlado diretamente pelo DMAC, que quando termina a tarefa(de gravação ou leitura) envia um novo pedido de interrupção a CPU, para informar que a mesma já pode retomar o controle do fluxo de dados que havia cedido anteriormente.
fHFMzsq.png

Dessa forma, a CPU economiza em tempo de processamento, tornando as tarefas realizadas por esses processos bem mais rápidas.

Em Microcontroladores esse é um recurso muito importante. Tendo em vista que sua capacidade de processamento normalmente é bastante limitada, se comparada a um PC, o DMA torna os Microcontroladores muito mais robustos e funcionais. Porém, não são todos os microcontroladores que possuem essa capacidade, normalmente apenas os mais novos ou os criados com alguns fins específicos (como os tocadores de MP3). Para ter certeza, é necessário verificar o datasheet.

No Arduino, uma das placas de prototipagem mais comuns, o DMA só foi satisfatoriamente implementado em duas placas : 

  1. Arduino DUE(http://www.arduino.cc/en/Main/ArduinoBoardDue)
  2. Arduino Zero (http://www.arduino.cc/en/Main/ArduinoBoardZero)


Nos links abaixo podem ser encontrados mais alguns conteúdos sobre DMA:


Dma nos pcs atuais:
http://answers.microsoft.com/pt-br/windows/wiki/windows_8-hardware/o-que-%C3%A9-dma-e-como-habilit%C...


DMA - hardware.com.br
http://www.hardware.com.br/livros/hardware-manual/dma-acesso-direto-memoria.html

Apresentação sobre DMA (documento anexado na conteúdo)
https://www.inf.pucrs.br/marcon/ArquiteturaDeComputadoresII/MaterialDeAula/Aulas/Aula%2006/Modos%20de%20Transferencia%20(DMA).ppt.


Atividades recentes