2016-11-30 1 views
0

Pour commencer, le premier cache a 16 blocs d'un mot. A titre d'exemple, j'utiliserai la référence de mémoire 0x03. L'index a 4 bits (0011). Il est clair que les bits sont égaux à 3mod16 (0011 = 0x03 = 3). Cependant, je suis confus en utilisant cette équation mod pour déterminer l'emplacement du bloc dans un cache avec des bits de décalage.Comment mapper une adresse de mémoire à un bloc lorsqu'il y a un décalage dans un cache mappé directement?

Le deuxième cache a une taille totale de huit blocs de deux mots. Cela signifie qu'il y a 1 bit de décalage. Comme il y a maintenant 8 blocs, il n'y a que 3 bits d'index. A titre d'exemple, je vais prendre la même référence mémoire de 0x03. Cependant, j'ai de la difficulté à mapper le bloc en utilisant l'équation de mod que j'ai utilisée auparavant. J'essaie 3mod8 qui est 3, mais dans ce cas, puisqu'il y a un bit de décalage, les bits d'index sont 001. 001 n'est pas égal à 3 alors qu'est-ce que j'ai fait de mal? Est-ce que mod ne fonctionne pas quand il y a des bits de décalage? J'avais l'impression que l'équation modale serait toujours égale aux bits d'index.

+0

Vous devez modifier l'index, pas l'adresse complète. –

+0

Je suis un peu confus. Je pensais que l'index était le mappage au bloc: S –

+0

Je voulais dire que vous devez modifier les bits au-dessus du décalage pour obtenir l'index. (c'est-à-dire pour retirer les bits d'étiquette). Le ou les bits de décalage n'ont aucun effet sur la ligne à laquelle une adresse est mappée dans le cache, de sorte qu'ils ne font pas partie du calcul. –

Répondre

2

Tout est dans l'adresse. Vous obtenez l'adresse, puis masquez le nombre de bits de la fin, pour les raisons suivantes.

  1. Nombre de mots dans la ligne de cache. Si vous avez 2 mots cacheline (prendre un peu, 4 mots, 2 bts, etc)
  2. Ensuite, combien d'entrées de cacheline vous avez. (Si 1024 est une cacheline, vous prenez 10 bits, ce 10 bits est votre index, les bits restants sont pour votre Tag)

Maintenant, vous devez aussi considérer 'WAY'. Si c'est un cache mappé direct, ci-dessus s'applique. Si c'est un cache associatif 2 voies, vous n'avez pas 1024 lignes, ce que vous avez 512 blocs avec chacun ayant 2 lignes en eux. Ce qui signifie que vous n'avez besoin que de 9 bits pour déterminer l'indice du bloc. Si c'est le cas, vous avez 256 blocs avec 4 lignes, ce qui signifie que vous n'avez besoin que de 8 bits pour votre index.

Dans un ensemble de cache associatif, l'index est là pour choisir un bloc, une fois qu'un bloc est choisi, l'utilisation peut utiliser une politique comme LRU pour remplir une entrée dans le cas d'un cache manqué. Les hits sont déterminés en comparant l'étiquette dans le bloc sélectionné.

La ligne de fond, l'emplacement du bloc n'est pas déterminé par l'adresse, seul un bloc est sélectionné par l'adresse et par la suite sa comparaison d'étiquettes pour trouver les données.