En informática , el robo de ciclos es tradicionalmente un método para acceder a la memoria (RAM) o al bus de la computadora sin interferir con la CPU. Es similar al acceso directo a memoria (DMA) que permite a los controladores de E/S leer o escribir en la RAM sin la intervención de la CPU. La explotación inteligente de tiempos específicos de la CPU o del bus puede permitir que la CPU funcione a toda velocidad sin demoras si los dispositivos externos acceden a la memoria sin participar activamente en la actividad actual de la CPU y completan las operaciones antes de cualquier posible conflicto con la CPU.
El robo de ciclos era común en plataformas más antiguas, primero en supercomputadoras que usaban sistemas complejos para cronometrar su acceso a la memoria, y luego en las primeras microcomputadoras donde el robo de ciclos se usaba tanto para periféricos como para controladores de pantalla . Es más difícil de implementar en plataformas modernas porque a menudo hay varias capas de memoria que se ejecutan a diferentes velocidades y el acceso suele estar mediado por la unidad de administración de memoria . En los casos en que se necesita la funcionalidad, los sistemas modernos a menudo usan RAM de doble puerto que permite el acceso de dos sistemas, pero esto tiende a ser costoso.
En referencias más antiguas, el término también se utiliza para describir los sistemas DMA tradicionales en los que la CPU se detiene durante las transferencias de memoria. En este caso, el dispositivo está robando ciclos a la CPU, por lo que tiene el sentido opuesto al uso más moderno.
En los modelos más pequeños de IBM System/360 y System/370 , el almacén de control contiene microcódigo tanto para la arquitectura del procesador como para la arquitectura del canal. Cuando un canal necesita servicio, el hardware roba ciclos del microcódigo de la CPU para ejecutar el microcódigo del canal.
Algunos procesadores fueron diseñados para permitir el robo de ciclos, o al menos lo soportaban fácilmente. Este fue el caso de los sistemas Motorola 6800 y MOS 6502 debido a una característica de diseño que significaba que la CPU solo accedía a la memoria cada dos ciclos de reloj. El uso de RAM que funcionaba dos veces más rápido que el reloj de la CPU permitía que un segundo sistema intercalara sus accesos entre las CPU cronometrándose cada dos ciclos de reloj. Esto se usó ampliamente para actualizar la pantalla usando la memoria principal como un framebuffer . La RAM común de finales de la década de 1970 funcionaba a 2 MHz, por lo que la mayoría de las máquinas tenían una CPU que funcionaba alrededor de 1 MHz. BBC Micro se aseguró un suministro de RAM de 4 MHz que permitió que su CPU funcionara a 2 MHz.
Otra solución común era utilizar bancos de memoria separados que almacenaban instrucciones frente a datos, o más de un conjunto de datos. En estos casos, los sistemas de E/S pueden acceder a su memoria de datos mientras el procesador está utilizando un banco diferente. Un ejemplo es el Zilog Z80 , cuya línea M1 indica que el procesador está leyendo instrucciones; si esas instrucciones están en un banco diferente, o más comúnmente en la ROM , los sistemas de E/S pueden acceder a la RAM sin interferir con el procesador.
El robo de ciclos es difícil de lograr en los sistemas modernos debido a muchos factores, como la segmentación , donde los elementos concurrentes y de precarga acceden constantemente a la memoria, lo que deja pocos tiempos de inactividad predecibles para acceder a la memoria. DMA es el único método formal y predecible para que los dispositivos externos accedan a la RAM.
Este término es menos común en la arquitectura informática moderna (por encima de 66-100 MHz), donde los distintos buses y controladores externos generalmente funcionan a diferentes velocidades y las operaciones internas de la CPU ya no están estrechamente acopladas a las operaciones del bus de E/S.
Un robo de ciclo inesperado por parte del radar de encuentro durante el descenso casi provocó que se abortara el aterrizaje del Apolo 11 , pero el diseño de la computadora de guía permitió que el aterrizaje continuara descartando tareas de baja prioridad.
El "robo de ciclo" del IBM 1130 es en realidad DMA porque el reloj de la CPU se detiene durante el acceso a la memoria. Varios controladores de E/S acceden a la RAM de esta manera. Se autoarbitran a través de un esquema de prioridad fijo. La mayoría de los controladores controlan deliberadamente el acceso a la RAM para minimizar el impacto en la capacidad del sistema para ejecutar instrucciones, pero otros, como los adaptadores de vídeo gráfico, funcionan a mayor velocidad y pueden ralentizar el sistema.
El concepto de robo de ciclos del 1130 permite que el programa de la CPU inicie una operación en un dispositivo de E/S y luego continúe con el programa principal mientras el dispositivo de E/S realiza su operación. Cada dispositivo de E/S que funciona de esta manera toma (roba) un ciclo de la CPU cuando es necesario.
La CPU está "ocupada" sólo un ciclo mientras se transfiere un carácter de datos. La frecuencia con la que los dispositivos roban ciclos depende del tipo de dispositivo.
Dado que la CPU es mucho más rápida que cualquier dispositivo de E/S del sistema, la CPU puede estar realizando otra función, como aritmética, al mismo tiempo que se realiza una operación de E/S. De hecho, varias operaciones de E/S pueden superponerse entre sí y con otras funciones de la CPU. [1]
El robo de ciclos ha sido la causa de una importante degradación del rendimiento en máquinas como la Sinclair QL , donde, por razones económicas, la RAM de vídeo no tenía doble acceso . En consecuencia, a la CPU M68008 se le negó el acceso al bus de memoria cuando el "controlador maestro" ZX8301 accedía a la memoria, y la máquina tuvo un rendimiento deficiente en comparación con máquinas que utilizaban procesadores similares a velocidades similares.