Question

Dans une application intégrée, nous disposons d’un tableau décrivant les différentes plages d’adresses valides sur le tableau cible. Cette table est utilisée pour configurer la MMU.
La plage d'adresses RAM est marquée comme pouvant être mise en cache, mais les autres régions sont marquées comme ne pouvant pas être mises en cache. Pourquoi est-ce?

Était-ce utile?

La solution

Si le matériel et le logiciel accèdent simultanément à une région mémoire (EX: registre de configuration matérielle ou liste de diffusion générale pour DMA), cette région doit être définie comme non mise en cache. Pour le DMA réel, le tampon de mémoire peut être défini comme étant en cache, et dans la plupart des cas, il est conseillé de mettre le tampon en cache pour permettre un accès rapide au niveau de l'application à ce tampon. Il incombe au conducteur de vider / invalider le cache avant de transmettre le tampon à DMA ou à l'application.

Une petite mise à jour, au-dessus de must , n'est pas correcte si nous disposons d'un matériel spécialisé, à savoir CCI (Cache Coherency Interconnect), qui synchronisera l'accès de divers blocs matériels à la mémoire.

Autres conseils

Ceci est fait pour que le processeur n'utilise pas de valeurs périmées en raison de la mise en cache. Lorsque vous accédez à la RAM en mémoire cache (normale), le processeur peut "se rappeler". la valeur à laquelle vous avez accédé. La prochaine fois que vous consulterez le même emplacement mémoire, le processeur renverra la valeur dont il se souvient sans consulter la RAM. Ceci est la mise en cache.

Si le contenu de l'emplacement peut changer sans que le processeur ne le sache, comme ce pourrait être le cas si vous avez un périphérique mappé en mémoire (un FPGA renvoyant des paquets de données par exemple), le processeur pourrait renvoyer la valeur "mémorisée". de la dernière fois, ce qui serait faux.

Pour éviter ce problème, vous marquez cet espace d'adressage comme non cacheable. Cela garantit que le processeur n'essaie pas de mémoriser la valeur.

Aucune région de mémoire utilisée pour DMA ou d'autres interactions matérielles ne doit être mise en cache.

Peut-être qu'il est utilisé pour les E / S mappées en mémoire?

Certaines zones telles que Flash peuvent être lues en un cycle, il n'est donc pas nécessaire de les mettre en cache.

Les contrôleurs modernes peuvent utiliser le cache L2 pour DMA, ce qui signifie qu'ils préservent la cohérence de la région de mémoire en cache utilisée pour les accès DMA. Ceci est également appelé "transactions de mémoire pouvant être surveillées". effectuée par le contrôleur (via DMA).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top