Translation lookaside buffer
Le translation lookaside buffer, ou TLB, est une mémoire cache du processeur utilisée par l'unité de gestion mémoire (MMU) dans le but d'accélérer la traduction des adresses virtuelles en adresses physiques.
Utilité
modifierSans TLB, le processeur doit consulter la table des pages à chaque fois qu'une adresse virtuelle est utilisée. Lorsque la table des pages est stockée en mémoire, avec plusieurs niveaux d'indirection, cela ralentit considérablement les accès mémoire. Par exemple, dans le mode protégé de l'Intel 80386, l'accès à une adresse virtuelle implique trois accès à la mémoire vive : un premier accès pour lire une entrée dans un répertoire de table de pages (page directory), un second pour lire une entrée dans une table de pages (page table), et enfin un troisième pour accéder à la donnée[1]. À partir du Pentium Pro, en mode PAE avec des pages de 4 Kio, il existe même un niveau d'indirection supplémentaire[2], soit en tout quatre accès mémoire.
Le TLB mémorise les derniers couples (page, cadre) correspondant aux dernières pages auxquelles le processeur a dû accéder, ce qui permet d'améliorer grandement les temps d'accès à la mémoire. Le TLB du 80386 comporte 32 entrées[1].
Prise en charge par le système d'exploitation
modifierLe système d'exploitation doit être conscient de l'existence du TLB, car s'il modifie la table des pages en mémoire, la MMU n'en est pas avertie par défaut. Les processeurs fournissent donc des instructions pour invalider sélectivement des entrées du TLB, ou bien vider complètement le TLB.
Sur le 80386, l'adresse du page directory est stockée dans le registre CR3. Lorsque CR3 est modifié, cela signifie que les associations entre adresses virtuelles et adresses physiques ont changé, donc les entrées du TLB sont obsolètes. Le processeur vide donc systématiquement le TLB lors de chaque écriture dans le registre CR3. Sur 80386, il s'agit en réalité de la seule façon d'invalider des entrées du TLB ; il n'existe pas de méthode plus sélective. Ainsi, lorsqu'une entrée de table de page change, le système d'exploitation doit réécrire dans CR3 sa propre valeur[1], avec des instructions du type[3] :
mov %cr3, %ax
mov %ax, %cr3
L'un des bits des entrées de la table de pages est appelé le bit global. Si celui-ci vaut 1, la page correspondante ne sera pas retirée du TLB même si on change la valeur de CR3. Ce bit est principalement utilisé pour les pages de mémoire utilisées par le système d'exploitation, puisque celles-ci doivent être accessibles à tout moment.
À partir du processeur 80486 l'opcode "invlpg" permet de signaler que les caractéristiques d'une page en particulier ont été modifiés[4]. Cette page est alors retirée du TLB si elle y était présente.
Notes et références
modifier- Michael Tischer, La bible PC, programmation système, 4e édition. Micro Application, 1994.
- How PAE X86 Works — Microsoft Technet.
- En syntaxe AT&T.
- (en) Documentation officielle des instructions des processeurs IA-32