Acceso directo á memoria

Na Galipedia, a Wikipedia en galego.

O acceso directo a memoria, tamén coñecido polo acrónimo DMA, do inglés Direct Memory Access, é unha técnica empregada polos periféricos dun ordenador para acelerar o funcionamento deste.

Funcionamento e características[editar | editar a fonte]

En lugar de involucrar á CPU nas transferencias de información entre a memoria e un periférico, un compoñente electrónico específico, o controlador de DMA, encárgase de coordinar este movemento de datos sen a intervención do microprocesador. Deste xeito, as transferencias de información non consumen tempo de microprocesador. É unha solución moi utilizada para aumentar a concorrencia entre a UCP e os periféricos debido á lentitude destes últimos.

Cando se utilizaba entrada/saída programada, a UCP solicitaba un dato ó periférico, esperaba a que estivese dispoñible e o copiaba a memoria ou a un rexistro segundo o necesitase. Isto implicaba un desaproveitamento moi alto da UCP, polo que xurdiu a proposta de utilizar entrada/saída por interrupcións, na que a UCP solicitaba un dato e continuaba coa execución doutro proceso, para ser interrompida cando o dato estivese dispoñible, eliminando esa espera activa. A solución proposta para o acceso directo a memoria pasa por que o controlador do dispositivo sexa un pouco máis complexo, o suficiente como para ser quen de deixar bloques de datos en memoria sen necesidade de ser atendida pola UCP, obtendo así unha concorrencia máxima. Así, só serán necesarios os servizos da unidade central para realizar a petición e para atender á súa finalización.

Para que todo isto sexa posible, as peticións da UCP ao controlador do dispositivo a utilizar deben indicar polo menos tres datos: a dirección no dispositivo do primeiro dato a ler, a cantidade de datos a ler e a dirección de memoria principal onde almacenar eses datos. Este esquema é moi sinxelo e está suxeito a moitas posibles variacións dependendo do dispositivo co que se traballe, que podería requirir máis ou menos datos.

O controlador do dispositivo debe ser capaz de facer roubos de ciclo, que non son máis que solicitudes de utilización dos buses para acceder á memoria. A UCP pode actuar interrompendo a execución do ciclo en curso ou esperando a que esta finalice. En calquera caso, no próximo ciclo o controlador poderá utilizar o bus para acceder a memoria. O acceso pode ser para transferir un só dato ou en ráfaga (intercambio de varios datos coa memoria nun só roubo de ciclo).

A utilización de acceso directo a memoria permite alcanzar taxas de aproveitamento da CPU próximas ao 99%. A utilización de roubo de ciclo illado ou en ráfagas non ten grande influencia na ocupación da CPU, aínda que si inflúe no tempo que tardan os datos en seren transferidos a memoria ou dende ela.