Page prec.
Eléments des répertoires de tables de pages
Fin de page Page suiv.
Divers

Mémoire cache

    La mémoire dynamique (DRAM : Dynamic Random Access Memory), étant la plus économique, constitue la plus grande partie de la mémoire principale. Son principal inconvénient est cependant qu'elle est lente par rapport aux possibilités du processeur 80386. Inversement, la mémoire dite statique (SRAM : Static Random Access Memory), est d'accès beaucoup plus rapide, mais beaucoup plus chère que la précédente. Le compromis est réalisé en utilisant une mémoire cache de taille réduite en SRAM, qui constitue un tampon entre le processeur et la mémoire DRAM. Ce cache doit conserver les octets mémoire qui ont la plus grande probabilité d'être nécessaires au processeur au cours des prochains cycles. Les deux principes utilisés sont ceux de la localité ou de proximité : les adresses mémoires qui ont la plus grande probabilité d'être accédées sont celles qui ont été accédées dans le passé le plus récent. Ceci est d'autant plus vrai que la taille du cache est plus grande. D'autre part, parmi les adresses mémoires qui n'ont pas été accédées, les plus probables sont au voisinage de celles qui viennent d'être accédées. Cela permet le chargement par anticipation des mémoires cache.

    Sur l'iAPX 386, la mémoire cache et son contrôleur sont extérieurs au processeur, mais l'unité de gestion mémoire (unité de segmentation + unité de pagination) est dans le processeur. La mémoire cache considère donc des adresses physiques et non des adresses virtuelles.

    En fait il n'existe pas un seul cache, mais un système de plusieurs caches, correspondant à une fragmentation de la mémoire physique. En général, il existe un cache pour 16 Mo de mémoire physique. Une taille raisonnable de mémoire cache est de 64 Ko, ce qui représente 1/256ème du bloc.

    Le principe de proximité conduit à considérer la mémoire principale comme un ensemble de blocs dont la taille peut varier en général de 2 à 16 octets. Cela signifie que, lorsqu'un octet particulier est requis par le processeur, ce sont les n octets du bloc qui le contient qui sont chargés simultanément. Dans les deux exemples ci-dessous nous considérerons des blocs de 4 octets. Puisque le cache ne contient qu'une partie des informations stockées dans la mémoire principale, il doit contenir deux sortes d'informations : l'information contenue dans la mémoire elle-même bien sûr, mais aussi l'adresse de la mémoire physique qui contient cette information.

    Nous allons étudier trois méthodes d'organisation des caches mémoire : la mémoire cache totalement associative, la mémoire cache à accès direct et une solution intermédiaire, la mémoire cache à accès direct partiellement associative.

Mémoire cache totalement associative

    La mémoire cache est formée de deux parties : les contenus des blocs de 4 octets et les adresses de ces blocs. En fait, puisque le cache correspond à un fragment de 16 Mo de mémoire physique, il suffit de 24 bits pour coder l'adresse. De plus, puisqu'il s'agit de blocs de 4 octets, les deux bits de plus faible poids sont nuls, donc ne sont pas stockés (figure ci-dessous) :


Mémoire cache totalement associative

    Au total, 22 bits d'adresse sont mémorisés, qui représentent un index. Lorsqu'une adresse physique est nécessaire au processeur, l'index de 22 bits en est extrait et il est recherché par comparaison dans toute la table. S'il est présent, la valeur associée est obtenue immédiatement.  S'il est absent, le bloc de 4 octets qui le contient doit être chargé à partir de la mémoire DRAM.

    Cette méthode est inapplicable dans la pratique car les recherches séquentielles seraient trop longues (de l'ordre de N/2 comparaisons pour une taille N).

Mémoire cache à accès direct

    Cette méthode, beaucoup plus performante, est fondée sur l'utilisation d'une fonction de hashcode très simple : la clé d'accès est constituée des 16 bits de faible poids de l'adresse physique (en fait les 14, du bit 2 au bit 16, les bits 0 et 1 étant nuls). Il y a donc 256 adresses mémoire qui ont la même clé : ce sont toutes les adresses du même fragment de 16 Mo de la mémoire, qui ont les 16 premiers bits identiques et qui ne diffèrent que par les bits 16 à 23. La valeur de cet octet (octet 2 de l'adresse physique) est donc stockée dans la mémoire cache pour s'assurer qu'il s'agit bien de l'adresse cherchée (figure ci-dessous) :


Mémoire cache à accès direct

    Supposons par exemple que l'adresse physique 00 01 FF FEh soit nécessaire au processeur. Elle est décomposée en quatre parties :

   0    0    0    1    F    F    F    E
0000 0000 0000 0001 1111 1111 1111 1110
  • l'octet de gauche 00h, qui indique qu'il s'agit du premier cache mémoire,
  • le numéro 0lh du bloc de 64 Ko qui contient cette adresse (octet 2 de l'adresse),
  • les 14 bits constituant la clé d'accès (valeur de la fonction de hash-code) : 1111 1111 1111 11, qui représentent l'adresse FFFCh du bloc des quatre octets qui correspondent à cette adresse (les deux bits de droite sont absents donc posés à 0),
  • les 2 bits de droite 10 qui indiquent l'octet recherché dans le bloc de 4 octets.
  •     La lecture dans la mémoire cache de l'adresse de 8 bits correspondant à la clé FFFCh indique que le numéro de bloc (01h) est le bon. La valeur 24682468h est dont immédiatement obtenue.

        Supposons maintenant que l'adresse 00 01 00 00 09h soit recherchée par le processeur.  La valeur de la fonction de hash-code est 00 08h, et le bloc de 64 Ko qui correspond à cette clé dans la mémoire cache a pour numéro 00h, alors que l'octet 2 de l'adresse cherchée est 01h. Cela signifie que l'adresse correspondante n'est pas dans le cache. Elle doit donc être chargée à partir de la mémoire DRAM.

    Mémoire cache à accès direct partiellement associative

        Cette organisation est une solution intermédiaire entre les deux précédentes : pour un même système de cache (octet 3 de l'adresse physique) il existe plusieurs caches parallèles, donc plusieurs valeurs correspondant à la même fonction de hash-code. Après calcul de cette dernière, le contrôleur de la mémoire cache passe en revue les différents caches pour savoir si l'un d'entre eux contient le numéro de bloc cherché. Par exemple, si 2 caches fonctionnent en parallèle, les 16 Mo de DRAM sont maintenant découpés en 512 blocs de 32 Ko, numérotés de 000h à 1FFh. La valeur de hashcode sera donc codée sur 13 bits au lieu de 14. A une même valeur correspondent deux tables d'adresses physiques, cette fois codées sur 9 bits. Le découpage de l'adresse physique correspond dans ce cas au schéma suivant :

    Mémoire cache pour la pagination

        Le processeur 80386 contient une mémoire cache à accès direct partiellement associative, à 4 voies, qui permettent de mémoriser l'adresse de base de 32 pages.


    Page préc.
    Eléments des répertoires de tables de pages
    Début de page Page suiv.
    Divers
    Dernière mise à jour : 08/07/2001