6.2. Direct Memory Access (DMA)
 
Como foi descrito anteriormente, o programmed I/O tinha um defeito: requeria um overhead desnecessário, assim como a participação do CPU. Claramente, uma solução seria tirar o CPU da transferência de dados entre o disco e o sistema, e ter o disco e a memória a comunicar directamente. Direct Memory Access ou DMA, é o termo genérico usado para referir o protocolo onde um dispositivo periférico transfere informação directamente de, ou para a memória, sem que o processador do sistema seja requerido para realizar a transacção.

Diferentes DMA modes foram definidos para a interface IDE/ATA, estando agrupados em duas categorias. O primeiro grupo single word, isto é, cada transferência move somente uma word de informação. Existem três single word modes:

DMA Mode Cycle Time (nanoseconds) Maximum Transfer Rate (MB/s) Defining Standard
Single Word Mode 0 960 2.1 ATA
Single Word Mode 1 480 4.2 ATA
Single Word Mode 2 240 8.3 ATA

Como descrito no PIO, a taxa de transferência máxima é o dobro da razão inversa do cycle time.

Obviamente, estas taxas de transferência não são muito impressionantes comparadas com standards de hoje. Os single word modes foram rapidamente ultrapassados pelos multiword modes. Como o nome indica, ocorrem várias transferências em rápidas sucessões, uma word após a outra, salvaguardando assim o overhead de cada transferência individual. A seguir são apresentados os diversos multiword modes:

DMA Mode Cycle Time (nanoseconds) Maximum Transfer Rate (MB/s) Defining Standard
Multiword Mode 0 480 4.2 ATA
Multiword Mode 1 150 13.3 ATA-2
Multiword Mode 2 120 16.7 ATA-2


Como os multiword modes são mais eficientes e têm uma taxa de transferência mais elevada, os single word modes foram rapidamente abandonadas.

Existem duas formas de realizar as transferências DMA: Da maneira convencional, também denominada third-party DMA e a first-party DMA. Na third-party DMA, a transferência é controlada por “terceiros”, um controlador inserido na motherboard. Este método já não é utilizado devido à baixa velocidade destes controladores. Na first-party DMA, os periféricos inseridos na transacção controlam todo o fluxo da informação, não havendo necessidade da intervenção de “terceiros”. A este processo designa-se de bus mastering, pois enquanto estão a ocorrer transacções, os dispositivos intervenientes são “donos” do bus. O bus mastering permite que o disco e a memória trabalhem sem a necessidade de um controlador ou do suporte do CPU. Permite também ter uma baixa taxa de utilização do CPU durante as transferências.