¿Se congela por completo una CPU cuando se usa un DMA?

19

Tengo una pregunta bastante directa, pero no pude encontrar una respuesta en ninguna parte.

En un sistema Von-Neumann donde el código y los datos viven en la misma RAM, la CPU debe obtener todas sus instrucciones de la memoria. Ahora, para mover grandes cantidades de datos entre los componentes de la computadora, hay un controlador de acceso directo a memoria que permite que los periféricos tengan acceso a la RAM del sistema principal.

Mi pregunta es esta: si el DMA permite una transferencia de datos (posiblemente muy larga) entre, por ejemplo, el disco duro y la RAM, ¿eso no significa que la CPU no puede usar la RAM y, por lo tanto, no puede obtener su próxima instrucción?

En resumen, el DMA está destinado a reemplazar el procesador que arbitra todas las lecturas y escrituras de E / S, con el fin de liberar al procesador para hacer otras cosas. Sin embargo, si no puede obtener sus instrucciones de la RAM, no se ha liberado de todos modos.

¿Hay algún detalle que me falta aquí?

Gracias

Mahkoe
fuente
77
Si. El DMA rara vez se ejecuta en el ancho de banda completo de la memoria. Simplemente roba un ciclo (o una ráfaga de ciclos) de vez en cuando, controlado por la velocidad del dispositivo de E / S.
Dave Tweed
La computadora hogareña de Amiga resolvió esto al observar que la CPU utilizada en realidad solo accedía al bus dos ciclos, luego permanecía fuera del bus durante dos ciclos, cuando todavía funcionaba a toda velocidad. Los periféricos basados ​​en DMA (gráficos, audio, disco) usaron los ciclos intermedios. No es una respuesta a su pregunta, ya que la pregunta es hipotética y las computadoras siempre están arruinadas por detalles prácticos. :)
pipa
2
@pipe: Eso no suena bien. El Amiga utilizó una CPU M68K, que tiene un bus completamente asíncrono. Quizás esté pensando en el Apple II, que aprovechó el hecho de que su CPU 6502 solo usa el bus durante la mitad de cada ciclo de reloj, y usó la otra mitad para la salida de video, que también sirvió para mantener la DRAM actualizada.
Dave Tweed
44
Las CPU modernas tienen cachés que en promedio resuelven el 95% de los accesos a la memoria. Mientras la CPU no necesite RAM, DMA no está interfiriendo de todos modos.
MSalters
2
@DaveTweed Nope. Si observa los tiempos de bus para el 68000, cada "ciclo de bus" (lectura o escritura) se divide en 8 estados, tomando un mínimo de 4 ciclos de reloj reales, de los cuales solo algunos de ellos controlan el bus de datos. Sin embargo, esta multiplexación requiere un poco de hardware adicional, ya que impulsa el bus de direcciones todo el tiempo.
tubería

Respuestas:

18

Tiene razón en que la CPU no puede acceder a la memoria durante una transferencia DMA. Sin embargo, hay dos factores que, en combinación, permiten un aparente acceso paralelo a la memoria de la CPU y el dispositivo que realiza la transferencia DMA:

  • La CPU toma múltiples ciclos de reloj para ejecutar una instrucción. Una vez que ha obtenido la instrucción, que puede tomar uno o dos ciclos, a menudo puede ejecutar la instrucción completa sin más acceso a la memoria (a menos que sea una instrucción que acceda a la memoria, como una movinstrucción con un operando indirecto).
  • El dispositivo que realiza la transferencia DMA es significativamente más lento que la velocidad de la CPU, por lo que la CPU no tendrá que detenerse en cada instrucción, sino solo ocasionalmente cuando el dispositivo DMA esté accediendo a la memoria.

En combinación, estos dos factores significan que el dispositivo que realiza la transferencia DMA tendrá poco impacto en la velocidad de la CPU.

EDITAR: Olvidé mencionar que también existe el factor de la memoria caché de la CPU, que mientras el código que la CPU está ejecutando esté en la memoria caché, entonces no necesitará acceder a la memoria real para obtener instrucciones, por lo que no se realizará una transferencia DMA para interponerse (aunque si la instrucción necesita acceder a la memoria, obviamente tendrá lugar un acceso real a la memoria, posiblemente teniendo que esperar un descanso en el uso de la memoria del dispositivo DMA).

Micheal Johnson
fuente
44
Como enfoque adicional, algunos sistemas pueden ofrecer múltiples canales para acceder a la memoria. Se le puede permitir a la CPU usar un canal mientras el motor DMA funciona en el otro
Cort Ammon - Reinstalar Monica
1
@CortAmmon Creo que la memoria de doble canal generalmente se extiende por el espacio de direcciones físicas, por lo que, por ejemplo, si tiene 2 GB de RAM, el 1 GB inferior está en el primer canal y el 1 GB superior está en el segundo canal. En ese caso, si tanto la CPU como la DMA desean acceder a la misma área de memoria de 1 GB, estarán en el mismo canal y, por lo tanto, podrían entrar en conflicto.
Micheal Johnson el
No estoy seguro de si muchos sistemas reales alguna vez utilizaron una verdadera arquitectura VNM. El cuello de botella era demasiado estrecho. Realmente fue un dispositivo teórico utilizado en CS. Lo más cerca que puedo pensar es en un dispositivo de 16 bits de Texas de 1970 que tenía sus registros en RAM. Estoy pensando en una tarjeta gráfica donde se usa RAM de doble puerto. Los chips como ARM, especialmente los de gama alta, logran lo mismo en muchos buses internos (AHP, APB, Stacks). futureelectronics.com/en/memory/dual-ports.aspx idt.com/products/memory-logic/multi-port-memory/…
ChrisR
1
No pensé que la pregunta fuera sobre una CPU Von-Neumann estricta, sino más bien práctica, como la x86 o ARM, que son libremente Von-Neumann. En el caso de un estricto Von-Neumann, sin ningún registro interno, la capacidad de la CPU de seguir funcionando durante el DMA se reduce a mi segundo punto en mi respuesta, que el DMA no está utilizando todo el ancho de banda de la memoria.
Micheal Johnson
20

Si hay una única interfaz de memoria, habría hardware para arbitrar entre las solicitudes. Por lo general, se daría prioridad a un procesador sobre las E / S sin perder E / S, pero incluso con E / S siempre teniendo prioridad, el procesador tendría algunas oportunidades de acceder a la memoria porque las E / S tienden a tener menores demandas de ancho de banda y ser intermitentes.

Además, normalmente hay más de una interfaz para la memoria. Los procesadores de mayor rendimiento suelen tener cachés (si DMA no es coherente, los cachés ni siquiera tienen que ser indagados; incluso con la indagación, la sobrecarga generalmente sería pequeña debido a la diferencia de ancho de banda entre el caché y la memoria principal o (cuando el DMA se transfiere a L3) caché) entre caché L3 y caché L1), proporcionando una interfaz separada para acceder a la memoria. Los microcontroladores a menudo acceden a las instrucciones desde una memoria flash separada, lo que permite que la recuperación continúe durante la memoria DMA a la memoria en el chip, y a menudo tienen una memoria estrechamente acoplada con una interfaz independiente (permitiendo muchos accesos de datos para evitar conflictos de DMA).

Incluso con una única interfaz de memoria, el ancho de banda máximo generalmente será mayor que el ancho de banda utilizado normalmente. (Para la búsqueda de instrucciones, incluso un búfer pequeño con una carga de memoria más amplia que la media desde la memoria permitiría obtener instrucciones del búfer mientras otro agente está utilizando la interfaz de memoria, explotando la tendencia del código a no ramificarse).

También tenga en cuenta que debido a que un procesador accede a los datos, si hay una única interfaz de memoria, debe haber un mecanismo de arbitraje entre los accesos a los datos y los accesos a las instrucciones.

Si el procesador (con una sola interfaz de memoria) se vio obligado a implementar una copia desde un búfer de dispositivo de E / S a la memoria principal, también tendría que buscar instrucciones para realizar la copia. Esto podría significar dos accesos de memoria por palabra transferidos incluso en un ISA con operaciones de memoria-memoria (un ISA de almacenamiento de carga podría requerir tres accesos de memoria o más si no se proporciona direccionamiento de memoria posterior al incremento); eso es además del acceso de E / S que en los sistemas antiguos podría compartir la misma interfaz que la memoria principal. Un motor DMA no accede a las instrucciones en la memoria y, por lo tanto, evita esta sobrecarga.

Paul A. Clayton
fuente
2

Como solo hay un sistema de bus, que está bloqueado por el acceso a la memoria del DMA, la CPU no puede funcionar mientras el DMA está moviendo datos y, por lo tanto, se detiene.

La idea detrás de esto es la siguiente:

Si desea copiar datos consecutivos de la memoria, entonces la CPU tendría que hacer algo así:

Calcular dirección-> leer datos-> calcular nueva dirección (+ 1 palabra) -> leer datos ...

Mientras que el DMA realiza el cálculo de la nueva dirección en paralelo (según el modo) y, por lo tanto, es más rápido. Por lo tanto, el DMA puede funcionar con el rendimiento total del bus (teóricamente).

NeinDochOah
fuente
"dado que solo hay un sistema de bus único" ... no es una suposición segura para hacer con computadoras modernas que tienen su memoria y buses periféricos funcionando a diferentes velocidades, y con la traducción del protocolo entre ellos.
rackandboneman
3
En computadoras más antiguas: hubo una supervisión de diseño en el Apple II (¿o algún predecesor / prototipo del mismo?), Ya que literalmente detuvieron la CPU. Los registros en un 6502 se implementan como memoria dinámica. La forma en que detuvieron la CPU detuvo la actualización. La longitud máxima de DMA terminó muy, muy dependiente de la máquina.
rackandboneman
Dado que la pregunta era sobre la arquitectura de von neumann y DMA, esto suena más como una pregunta sobre microcontroladores (de nuevo se mencionan discos duros en el ejemplo). Además, como señala Paul A. Clayton, se vuelve aún más complicado cuando se considera el caché multinivel. También se podría pensar en una CPU donde múltiples códigos de operación están contenidos en una palabra y se ejecutan después de otra o CPU con caché propia, donde habría código que la CPU podría ejecutar, pero la salida tenía que ser almacenada ... así que sí Justo hay infinitas posibilidades.
NeinDochOah
2

En general, no.

En la mayoría de las arquitecturas del sistema, todas las solicitudes de acceso a la memoria tienen una prioridad asignada. Cuando hay más solicitudes simultáneas de memoria de las que el sistema puede manejar a la vez, las solicitudes con mayor prioridad se atienden primero. Las solicitudes de memoria iniciadas por la CPU generalmente reciben la mayor prioridad posible.

al anochecer
fuente
0

En general no.

Algunos sistemas están seguros, solo un maestro a la vez. Un diseño un poco más antiguo si ese es el caso (incluso los diseños antiguos a menudo tenían soluciones paralelas). Un tipo moderno de bus, aunque cada bus (dirección, escritura de datos, lectura de datos) opera de manera independiente y tiene una etiqueta o id por ciclo de reloj para mostrar a qué transacción se asocia ese ciclo de reloj. Por lo tanto, puede tener muchas / muchas transacciones en vuelo al mismo tiempo en ambas direcciones, con diferentes transacciones barajadas juntas en los buses de datos de lectura o escritura. Quien vaya a continuación se basará en la prioridad, no existe una regla que indique que las transacciones en el autobús tendrían que realizarse en el orden en que se presentan las instrucciones del software, el procesador puede determinar que puede comenzar algunas antes que otras, y, naturalmente, las respuestas volverán en diferentes órdenes, dependiendo de cuán cerca y rápido sea el objetivo. Del mismo modo, las recuperaciones no están en orden, la predicción de ramificación dispara las recuperaciones de aspecto aleatorio cada vez que se siente.

Una transacción dma grande requeriría mucho más ancho de banda de bus, pero decir que el procesador se detiene, no necesariamente el caso, también depende de la arquitectura y el código. El código puede tener una instrucción que dice bloqueo hasta que suceda este evento / señal de transferencia, y luego asegúrese de que el procesador termine lo que puede hacer en la tubería y luego se bloquee. Pero eso o algunas arquitecturas pueden no requerir que se bloquee, no es realmente sabio hacerlo de todos modos, tanto ancho de banda desperdiciado. ¿Cuál sería el punto de dma de todos modos si no funciona en paralelo, solo codifique la transferencia en un bucle, las capturas agregan algunos ciclos tal vez, dependiendo de la arquitectura, no son tan costosas como la sobrecarga lógica de dma, la potencia, etc. Comprenda cómo dma funciona para la arquitectura y el sistema particular en el que se encuentra y decide si vale la pena usarlo,

No hay una respuesta genérica sobre cómo funciona dma, depende en gran medida del diseño del sistema y de todos los componentes dentro del sistema.

viejo contador de tiempo
fuente