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:
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:
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. |