Back to TILs

DMA Direct Memory Access

Date: 2022-11-19Last modified: 2023-02-17

Table of contents

DMA (Direct memory access) is an alternative method of communication to I/O ports that permits the device to transfer data directly, without the CPU’s attention. The system can request that the data be fetched into a particular memory region and continue with other tasks until the data is ready. This may result in lower CPU requirements for the I/O activity, which can improve system performance.

DMA Channels

To support DMA, the x86 architecture implements several DMA channels. To find out what DMA channels your system uses, you can use the cat /proc/dma command:

cat /proc/dma
2: floppy
4: cascade

As you can see from the output above, the DMA channels 2 and 4 are in use.

https://www.vivaolinux.com.br/topico/Iniciantes-no-Linux/Nao-entendi-a-saida-do-~cat-proc-dma

Os DMA’s são canais de acesso a memória sem intervenção do processador. São praticamente um legado do ISA. Existem 8 canais de DMA que foram implementados ao longo da história. O canal 4, especificamente, funciona com 16 bits e está praticamente relacionado ao DMA1 e ao DMA2. A cascata(cascade) se remete ao mecanismo do canal. Esse mecanismo é que permite que um canal DMA solicite o bus. Uma vez o dispositivo conectado, ele é responsável pela alocação da informação de endereçamento no bus em vez do DMA. É usado na implementação do “Bus Mastering”. Quando um canal DMA em modo cascade recebe o controle do bus, ele não aloca endereços nem sinais I/O de controle no bus, como geralmente ocorre.

Steps in DMA Transfer

FIXME slide 11

Operation modes

Burst Mode

Neste modo, o periférico que recebe acesso ao barramento irá transferir as informações necessárias de uma única vez, para então liberar as pistas para a CPU novamente. Ainda que permita que o processo de transferência atinja altas velocidades, a desvantagem desse modo é que o processador deixa de trabalhar até que o envio seja concluído.

Cycle Stealing

No “roubo de ciclo”, em tradução livre, a transferência de dados é realizado lentamente, aguardando a conclusão de cada ciclo de processamento da CPU. Basicamente, o DMAC solicita acesso ao barramento para o processador e, após concedido, um byte de informação é transferido. O controle das pistas é então devolvido à CPU, e uma nova solicitação é realizada a cada ciclo, até que todos os dados sejam enviados.

Transparent Mode

Similar ao Burst Mode, o Transparent Mode dá acesso total do barramento ao periférico que enviará ou receberá informações. No entanto, há uma diferença importante: a CPU continuará operando normalmente, em tarefas que não exijam acesso ao barramento. O controle das pistas retorna ao processador assim que a transferência dos dados é finalizada.

References