14 votes

Pourquoi une région de la mémoire serait-elle marquée comme non mise en cache ?

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 ?

18voto

Benoit Points 12985

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.

6voto

bmdhacks Points 9074

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

5voto

Ilya Points 2279

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.

1voto

Nicholas Riley Points 26161

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

1voto

J.Xin Points 31

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X