Acceso directo á memoria
Na Galipedia, a wikipedia en galego.
O acceso directo a memoria (DMA, do inglés Direct Memory Access) é 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 disponible 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 disponible, 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 traballemos, que podería requerir 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 ésta finalice. En calquer 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 cercanas a o 99%. A utilización de roubo de ciclo aislado ou en ráfagas non ten grande influenza na ocupación da CPU, aínda que sí inflúe no tempo que tardan os datos en seren transferidos a memoria ou dende ela.