Cela dépend à la fois du processeur (pas seulement de la série de processeurs, cela peut varier d’un modèle à l’autre) et des systèmes d’exploitation, mais il existe des principes généraux. Qu'un processeur soit multicœur n'a pas d'impact direct sur cet aspect; le même processus peut être exécuté simultanément sur plusieurs cœurs (s'il est multithread) et la mémoire peut être partagée entre les processus. La synchronisation du cache est donc inévitable, quel que soit le déroulement du changement de contexte.
Lorsqu'un processeur recherche un emplacement de mémoire dans le cache, s'il existe une MMU , il peut utiliser l'adresse physique ou l'adresse virtuelle de cet emplacement (parfois même une combinaison des deux, mais ce n'est pas vraiment pertinent ici).
Avec les adresses physiques, peu importe le processus accédant à l'adresse, le contenu peut être partagé. Il n'est donc pas nécessaire d'invalider le contenu du cache lors d'un changement de contexte. Si les deux processus mappent la même page physique avec des attributs différents, cela est géré par la MMU (agissant en tant que MPU (unité de protection de la mémoire)). L'inconvénient d'un cache à adresse physique est que la MMU doit s'asseoir entre le processeur et le cache, de sorte que la recherche dans le cache est lente. Les caches L1 ne sont presque jamais des adresses physiques; les caches de niveau supérieur peuvent être.
La même adresse virtuelle peut désigner différents emplacements de mémoire dans différents processus. Par conséquent, avec un cache virtuellement adressé, le processeur et le système d'exploitation doivent coopérer pour s'assurer qu'un processus trouvera la bonne mémoire. Il existe plusieurs techniques courantes. Le code de commutation de contexte fourni par le système d'exploitation peut invalider la totalité du cache. c'est correct mais très coûteux. Certaines architectures de CPU disposent dans leur ligne de cache d’un ASID (identificateur d’espace d’adresse), de la version matérielle d’un ID de processus, également utilisé par la MMU. Cela sépare efficacement les entrées de cache de différents processus et signifie que deux processus mappant la même page auront des vues incohérentes de la même page physique (il existe généralement une valeur ASID spéciale indiquant une page partagée, mais ceux-ci doivent être vidés s'ils ne sont pas mappés à la même adresse dans tous les processus où ils sont mappés). Si le système d'exploitation veille à ce que différents processus utilisent des espaces d'adressage ne se chevauchant pas (ce qui empêche parfois l'utilisation de la mémoire virtuelle, mais peut parfois l'être), les lignes de cache restent valides.
La plupart des processeurs ayant une MMU ont également un TLB . Le TLB est un cache de mappages d'adresses virtuelles en adresses physiques. Le TLB est consulté avant les recherches dans les caches à adresse physique, afin de déterminer l'adresse physique rapidement lorsque cela est possible; le processeur peut lancer la recherche en mémoire cache avant la fin de la recherche TLB, car les lignes de mémoire cache candidates peuvent souvent être identifiées à partir des bits centraux de l'adresse, entre les bits déterminant le décalage dans une ligne de la mémoire cache et les bits déterminant la page. Les caches à adresse virtuelle contournent le TLB en cas de réussite du cache, bien que le processeur puisse lancer la recherche du TLB pendant qu'il interroge le cache, en cas d'erreur.
Le TLB lui-même doit être géré lors d'un changement de contexte. Si les entrées TLB contiennent un ASID, elles peuvent rester en place. le système d'exploitation n'a besoin de vider les entrées TLB que si leur ASID a changé de sens (par exemple, parce qu'un processus s'est terminé). Si les entrées TLB sont globales, elles doivent être invalidées lors du basculement vers un contexte différent.
Le cache est généralement inconscient d'un changement de contexte. Seule la séquence d'adresses de mémoire consultées détermine les lignes de cache à remplacer.
La politique de remplacement est généralement une heuristique dépendant du fabricant et de la microarchitecture particulière. Le problème est que l'heuristique ne permet pas de prédire l'avenir, l'adresse et donc la ligne de cache seront ensuite utilisées.
L'heuristique peut être aussi simple que LRU (moins récemment utilisé). Mais avec les CPU modernes, les heuristiques sont plus complexes.
Jetez un coup d'œil aux architectures Intel® 64 et IA-32 - Manuel du développeur du logiciel Volume 3 Le chapitre 11 explique le cache mémoire et les mécanismes de contrôle du cache. AMD l’a inscrit au chapitre 7 du Manuel du programmeur d’architecture AMD64, volume 2: Programmation système . Pour les processeurs basés sur ARM, il semble que les PDF ne soient disponibles que pour les clients enregistrés.
la source