RAM y copia / movimiento de datos

1

Me preguntaba acerca de la copia / movimiento de datos en la RAM y no pude evitar nada sobre la posibilidad de que la memoria RAM realice operaciones básicas de memoria, como copiar / mover memoria, si no es necesario que la CPU Si conocemos los datos que se están copiando / moviendo, ¿no nos beneficiaríamos si tuviéramos una única instrucción que pudiera comunicarse con la RAM de esta manera?

    
pregunta Joshua Waring

2 respuestas

1

La copia de memoria a memoria puede considerarse un desperdicio para algunos (como se mencionó en un comentario anterior), pero se realiza todo el tiempo, por ejemplo, las funciones memcpy y an md strcpy en C programas. También memset, para llenar la memoria y strcmp para comparar cadenas.

Creo que lo más cerca que encontrarás de una memoria de movimiento de una sola instrucción es el MOVS (familia de cadenas de movimiento) en el conjunto de instrucciones 8086.

En todos los casos, la dirección de origen se configura en los registros [DS: SI] o [DS: ESI], y la dirección de destino se configura en los registros [ES: DI] o [ES: EDI].

Una vez configurado, el instrucción individual MOVSB copia el byte en [DS: SI] o [DS: ESI] a [ES: DI] o [ES: EDI], y luego aumenta o disminuciones (según el indicador de dirección: aumenta si la marca está desactivada, disminuye si está configurada) SI y DI (o ESI y EDI).

Lo que hace que esta instrucción sea tan poderosa es que puede ser precedida por una instrucción REP, que repite la siguiente instrucción la cantidad de veces contenida en el registro CX. Las variaciones permiten que se termine antes en función de un indicador cero (gee, como el cero al final de una cadena C).

Así que puedes pensar que el combo REP / MOVSB es una implementación de dos instrucciones de la parte de bucle de la función memcpy. Por supuesto, el trabajo todavía está siendo realizado por la CPU, no por el controlador de memoria en sí, pero es mucho más simple que tener que escribir un bucle de instrucciones.

Además de MOVSB, existen otras variaciones para copiar palabras (2 bytes) y palabras dobles (4 bytes) a la vez.

También hay una instrucción STOS que, con el prefijo REP, almacena un valor constante en la memoria (adivina qué, memset) y el combo CMPS / REP que compara dos áreas de la memoria (es decir, strcmp).

Como alguien señaló, en los procesadores con DMA, puede configurar los registros de origen, destino y conteo y luego dejar que el DMA haga el trabajo como el combo REP / MOVSB descrito anteriormente, para realizar una función de memoria sin el procesador. estar involucrado. Pero no creo que los DMA tengan la capacidad de detener una copia en un byte cero (corríjame si estoy equivocado), por lo que no podrían hacer una copia de seguridad. Lo mismo para memset y strcmp.

    
respondido por el tcrosley
2

Esto se ha hecho, principalmente en el contexto de gráficos.

Una de las primeras variantes fueron los chips Blitter utilizados en varios videojuegos y computadoras en los años 80, lo que permite copiar y simplificar Procesamiento sin involucrar a la CPU. Estos chips también tenían operaciones de enmascaramiento que permitieron omitir algunos elementos de la operación.

El inconveniente es que, dado que estos comparten el acceso a la RAM, esto cambiaría la sincronización mientras se ejecutaba la operación, desacelerando la ejecución en la CPU principal y haciendo que los tiempos de ejecución sean impredecibles, por lo que el código sensible a la sincronización dejaría de funcionar.

Cualquier tarjeta gráfica con memoria dedicada se comporta esencialmente como una RAM especial con operaciones de blitter incluidas desde el punto de vista de la CPU. Varios proveedores, el más famoso Tseng Labs (comprado más tarde por ATI) también hicieron RAM especial ( SGRAM ) eso podría ejecutar operaciones simples como XOR (usadas para dibujar bordes de ventanas durante operaciones de arrastre) o rellenar bloques en una sola operación.

Para la RAM del sistema, tener un patrón de acceso predecible es más importante para un buen rendimiento del sistema que para el trabajo de descarga, por lo que es más eficiente realizar copias desde la CPU, donde pueden programarse y fusionarse con otros accesos en una sola Controlador RAM, que en una unidad separada.

    
respondido por el Simon Richter

Lea otras preguntas en las etiquetas