Dans une application embarquée, nous disposons d'une table décrivant les différentes plages d'adresses valides sur notre carte cible. Cette table est utilisée pour configurer la MMU.
La plage d'adresses de la RAM est marquée comme pouvant être mise en cache, mais d'autres régions sont marquées comme ne pouvant pas être mises en cache. Comment cela se fait-il ?
Réponses
Trop de publicités?Cela permet au processeur de ne pas utiliser de valeurs périmées en raison de la mise en cache. Lorsque vous accédez à la mémoire vive (ordinaire) mise en cache, le processeur peut "se souvenir" de 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 avoir à chercher dans la RAM. C'est ce qu'on appelle la mise en cache.
Si le contenu de l'emplacement peut changer sans que le processeur le sache, comme cela pourrait être le cas si vous avez un dispositif à mémoire mappée (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 cachable. Cela garantit que le processeur n'essaiera pas de se souvenir de la valeur.
Si une région de mémoire est accédée simultanément par le matériel et le logiciel (EX : registre de configuration du matériel ou liste de diffusion pour le DMA), cette région doit être défini comme non mis en cache. Pour le DMA réel, le tampon de mémoire peut être défini comme étant mis en cache et, dans la plupart des cas, il est conseillé que le tampon soit mis en cache pour permettre à l'application d'accéder rapidement à ce tampon. Il est de la responsabilité du pilote de vider/invalider le cache avant de passer le tampon au DMA ou à l'application.
Petite mise à jour, ci-dessus doit n'est pas correct si nous disposons d'un matériel spécialisé, à savoir le Cache Coherency Interconnect (CCI), qui synchronise l'accès des différents blocs matériels à la mémoire.
En tenant compte de la cohérence du cache. Supposons qu'il y ait un emplacement X dans la mémoire qui peut être accédé par des périphériques utilisant le DMA, donc le processeur ne sera pas averti quand les périphériques écrivent une nouvelle valeur dans X. Si le processeur a mis en cache le contenu de X avant, quand le processeur aura besoin de la valeur, il la prendra dans le cache. Dans ce cas, l'ordinateur obtient une valeur périmée. De même, les périphériques utilisant le DMA peuvent lire une valeur périmée.
De wiki Accès direct à la mémoire
- Réponses précédentes
- Plus de réponses