pregunta de caché de mapeo directo

0

He estado haciendo la siguiente pregunta en lo que pensé que era la forma correcta. Después de leer un poco más, ahora estoy un poco confundido y agradecería alguna aclaración. Anteriormente, solo estaba usando un caché de 4 líneas y grabando éxitos / errores basados en los números binarios que se muestran.

Después de leer un poco más, descubrí que la dirección (que comprende las partes de línea y etiqueta juntas) proporciona el número de bloque en la memoria principal, lo que significa que debería haber 16 ranuras en la memoria.

En lo que respecta a la lectura utilizando el mapeo directo, la primera línea de caché debe contener los valores de los bloques de memoria principal 0,4,8,12 y así sucesivamente para cada línea. Esto me confunde, ya que pensé que cuando la etiqueta era diferente a la que estaba almacenada en ese momento, lo tomaría como una falla y buscaría. ¿Alguien me puede explicar esto?

lo siento si esto es difícil de entender.

    
pregunta dmnte

4 respuestas

1

Su caché tiene 4 bloques de 4 bytes por bloque cada uno == > El tamaño del caché es de 16 bytes. Cada bloque de caché (4 bytes) almacena una palabra (4 bytes). Por lo tanto, no hay bits de selección de bytes. (En esta máquina, la unidad direccionable más pequeña es una palabra de 4 bytes.)

Se toman directamente dos bits de la dirección de palabra para abordar estos 4 bloques, por eso se llama un caché asignado directamente. No se establece claramente en la pregunta qué dos bits de los cuatro bits de dirección se deben utilizar, pero generalmente se utilizan los bits más significativos (por encima de los bits de selección de bytes no existentes) de la dirección de palabra. Estos bits también se denominan bits de índice. Esto deja los dos bits superiores para la etiqueta.

La memoria tiene \ $ 2 ^ 4 = 16 \ $ palabras y, por lo tanto, se divide en 16 bloques. El bloque de caché 0 podría almacenar los bloques de memoria 0, 4, 8 y 12 porque los dos bits menos significativos (= índice) son "00" binarios en todas estas direcciones de bloque de memoria. El bloque de caché 1 podría almacenar los bloques de memoria 1, 5, 9 y 13 porque el índice es binario "01" aquí. Y así sucesivamente.

La memoria de etiquetas (tabla) se dirige con el mismo índice. Si la etiqueta almacenada en el índice particular coincide con la de la dirección de palabra, entonces tenemos un hit. De lo contrario, fallaremos y el bloque se cargará de la memoria a la memoria caché en el bloque indexado y la línea de la etiqueta se actualizará. No hay más búsquedas porque tenemos caché de mapeo directo. Cada bloque de memoria se asigna solo a un bloque de caché seleccionado por los bits de índice.

Al analizar el rastreo de direcciones se obtiene: EDIT corrección de errores

Address   Index   Tag_Table[Index] Before / After
0111      11      empty / 01  -> Miss
1010      10      empty / 10  -> Miss
0010      10      10    / 00  -> Miss, because another tag
1010      10      00    / 10  -> Miss, because another tag
0111      11      01    / 01  -> Hit
0100      00      empty / 01  -> Miss
0100      00      01    / 01  -> Hit
1010      10      10    / 10  -> Hit
0100      00      01    / 01  -> Hit  (fixed!)
0010      10      10    / 00  -> Miss, because another tag

Por lo tanto, la tasa de aciertos es 4/10 = 40% en este ejemplo.

    
respondido por el Martin Zabel
0

El tamaño de la palabra es 4. por lo que hay 16/4 = 4 bloques. Los bloques están numerados por las direcciones más significativas, que también son el contenido de la etiqueta. Al menos dos direcciones importantes seleccionan un byte dentro de un bloque, por lo que son irrelevantes aquí. La secuencia es  miss (bloque 1) miss (2) miss (0) hit (2)   golpe (1) golpe (1) golpe (1) golpe (2)   golpear (1) golpear (0) Tres fallos, siete hits, diez accesos. 7/10 = 70%. El bloque 3 permanece inválido.

    
respondido por el Some Nut Job
0

Tamaño de caché de 16 bytes / tamaño de bloque de 4 bytes = 4 líneas.

Por lo tanto, la dirección de palabra de 4 bits se divide en
{2 bits de dirección de etiqueta, 2 bits de dirección de línea} para un caché asignado directamente

Seguimiento manual de lo que sucede (con el esquema menos utilizado recientemente):
01,11 - miss - 01,11 en caché
10,10 - miss - 10,10 en caché
00,10 - miss - 00,10 en caché - 10,10 purgado
10,10 - miss - 10,10 en caché - 00,10 purgado
01,11 - golpear
01,00 - miss - 01,00 cached
...

    
respondido por el rioraxe
0

En primer lugar, en una memoria caché asignada directamente, no hay nada que buscar. Esa es la razón principal por la que tal cosa sería utilizada. Cuando se produce un acceso a la memoria, la memoria caché asigna la dirección a un bloque. Luego se compara la etiqueta. Si coincide, es un golpe. De lo contrario es un fallo. Eso es lo que significa mapeado directo: no hay ningún conjunto allí para una búsqueda asociativa. (O, si lo desea, el tamaño establecido es 1).

El ejemplo que se le pide que resuelva es aún más simple, porque el tamaño del bloque es igual al tamaño de la palabra. El caché de 16 bytes contiene cuatro bloques y cuatro palabras. Esto significa que cada palabra es independiente: acceder y reemplazar una palabra no tiene efecto en ninguna palabra adyacente.

Esta es la razón por la cual la pregunta le da la secuencia de direcciones a las que se accede en código binario. Es un ejercicio de cómo entiendes bien el código binario, no de cómo entiendes los cachés.

La principal dificultad está en traducir al decimal: 7, 10, 2, 10, 7, 4, 4, 10, 4, 2. Una vez que tenemos eso, podemos ver claramente el patrón de acceso.

A continuación, tenemos que reducir cada una de estas direcciones módulo 4 para determinar a qué palabra / bloque se asigna: 7: 3, 10: 2, 2: 2, 10: 2, 7: 3, 4: 0, 4 : 0, 10: 2, 4: 0, 2: 2. (Aquí, puede ayudar mirar hacia atrás, hacia la representación binaria, donde tomamos los dos bits menos significativos). 7 va al bloque / palabra 3, 10 va a 2, y así sucesivamente.

Bien, 7: 3 es una falta, porque el caché está vacío, y hace que el bloque [3] mantenga 7. 7. 10: 2 es una falta, y así sucesivamente. Podemos hacer un gráfico que rastrea el estado del caché a medida que avanzan los accesos:

  ACCESS        0    1    2    3       MISS  NOTES
    7         [ -    -    -    7 ]      X
   10         [ -    -   10    7 ]      X
    2         [ -    -    2    7 ]      X    2 replaces 10 at [2]
   10         [ -    -   10    7 ]      X   10 replaces 2 at [2]
    7         [ -    -   10    7 ]           7 matched at [3]
    4         [ 4    -    2    7 ]      X
    4         [ 4    -    2    7 ]           4 matched at [0]
   10         [ 4    -   10    7 ]      X   10 fights with 2 again at [2]
    4         [ 4    -   10    7 ]           4 matched again
    2         [ 4    -    2    7 ]           2 replaces 10 at [2]

Todo lo que se asigna directamente es cuando el tamaño de palabra es el mismo que el tamaño de bloque: solo estamos reduciendo la dirección módulo 4 para determinar la ubicación en el caché. Si la dirección en la ubicación coincide con la que se tiene acceso, es un acierto, de lo contrario es un error: y la dirección a la que se accede sobrescribe la de la caché. (Por supuesto, la memoria caché no necesita la dirección completa; ¡solo los bits de la etiqueta! Esto se debe a que, por ejemplo, la dirección 6 no se puede asignar a la ranura [2]. Cuando la ranura [3] recuerda que ahora tiene la dirección 7, realmente necesita el 01 bits superior de 0111 , que son la etiqueta. El 11 inferior coincide estáticamente con el [3]. La etiqueta es aquellos bits de la dirección que son relevantes para identificar a qué área de la memoria pertenece la entrada de caché a.

¿Cuál es la tasa de éxito? 4 hits de 10 accesos: 40%. Mira, incluso el denominador está configurado para un cálculo de porcentaje fácil.

Si el caché estuviera organizado en bloques de varias palabras (digamos dos palabras), sería un poco más complicado. El acceso a 10, que se asigna a [2] no solo llevaría los datos de 10 a [2], sino que también traería los datos de 11 a [3]. Luego, el bloque [2..3] se etiquetará para indicar que contiene 10..11.

    
respondido por el Kaz

Lea otras preguntas en las etiquetas