Pregunta

En una aplicación integrada, tenemos una tabla que describe los distintos rangos de direcciones que son válidos en nuestro tablero de destino.Esta tabla se utiliza para configurar la MMU.
El rango de direcciones RAM está marcado como almacenable en caché, pero otras regiones están marcadas como no almacenables en caché.¿Porqué es eso?

¿Fue útil?

Solución

Si tanto el hardware como el software acceden a una región de memoria simultáneamente (EX:registro de configuración de hardware o lista dispersa para DMA), esta región debe definirse como no almacenado en caché.Para DMA real, el búfer de memoria se puede definir como almacenado en caché y, en la mayoría de los casos, es recomendable que el búfer se almacene en caché para permitir que el nivel de aplicación acceda rápidamente a ese búfer.Es responsabilidad del controlador vaciar/invalidar el caché antes de pasar el búfer a DMA o la aplicación.

Pequeña actualización, arriba debe no es correcto en caso de que tengamos un hardware especializado, es decir.Interconexión de coherencia de caché (CCI) que sincronizará el acceso de varios bloques de hardware a la memoria.

Otros consejos

Esto se hace para que el procesador no utilice valores obsoletos debido al almacenamiento en caché.Cuando accede a la RAM almacenada en caché (normal), el procesador puede "recordar" el valor al que accedió.La próxima vez que mires esa misma ubicación de memoria, el procesador devolverá el valor que recuerda sin mirar en la RAM.Esto es almacenamiento en caché.

Si el contenido de la ubicación puede cambiar sin que el procesador lo sepa, como podría ser el caso si tiene un dispositivo con memoria asignada (una FPGA que devuelve algunos paquetes de datos, por ejemplo), el procesador podría devolver el valor "recordado" de la última vez, lo que estaría mal.

Para evitar este problema, marque ese espacio de direcciones como no almacenable en caché.Esto asegura que el procesador no intente recordar el valor.

Ninguna región de memoria utilizada para DMA u otras interacciones de hardware no debe almacenarse en caché.

¿Quizás se utiliza para E/S asignadas en memoria?

Algunas áreas, como Flash, se pueden leer en un ciclo, por lo que no es necesario almacenarlas en caché.

Los controladores modernos pueden usar caché L2 para DMA, lo que significa que preservan la coherencia de la región de memoria caché utilizada para los accesos a DMA.Esto también se denomina "transacciones de memoria que se pueden espiar" realizadas por el controlador (a través de DMA).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top