2012-04-29 15 views
5

Mis disculpas si este es el stackexchange incorrecto para esto; simplemente parecía el más cercano a un lugar que podría ser de ayuda para la arquitectura de la computadora. Para un problema de tarea en los sistemas informáticos se me preguntó:Caché asignada directa Hit/Miss

Consider three direct mapped caches X, Y, and Z each interpreting an 
8-bit address slightly differently according to the {tag:setIdx:byteOffset} 
format specified. For each address in the reference stream, indicate whether the 
access will hit (H) or miss (M) in each cache. 

        C1  C2  C3 
Address Formats: {2:2:4} {2:3:3} {2:4:2} 

Address References in Binary: 00000010, 00000100... 

supone que tengo que decir si cada una de las referencias de direcciones dará como resultado impredecible, pero no sé por dónde empezar.

Para los formatos, pensé que la etiqueta significaba la etiqueta de los datos en un bloque de caché, setIdx significaba la cantidad de bits para representar los diferentes bloques en un caché, y el desplazamiento era el byte particular dentro de un bloque que puede elegir.

Siento que no entiendo lo que es un golpe o una falta. Pensé que había 3 tipos: obligatorio, capacidad y conflicto. ¿Cómo sabría cuál es una falla obligatoria si no sé qué hay en el caché? ¿Cómo puedo saber la capacidad de la memoria caché dados los formatos de etiqueta?

Gracias por cualquier pista o sugerencia.

Respuesta

3

Tome C1 por ejemplo, tiene 2 bits para setIdx, y 4 bits para byteOffset.

Así que este caché tendrá 2^2 = 4 bloques (00, 01, 10 y 11), y cada bloque tendrá 2^4 = 16 bytes.

La referencia de dirección ahora puede dividirse en formato C1: {} 00 00 0010

caché Suponiendo está vacío por defecto, la primera búsqueda dará lugar a un fallo. Sin embargo, la memoria caché ahora tendrá el bloque "00" cargado con la etiqueta "00".

La siguiente referencia {00 00 0100} buscará el bloque "00", verá que la etiqueta también es "00", tenemos un golpe.

+0

Cuál es el desplazamiento de bytes a continuación? – KWJ2104

+0

el desplazamiento del byte es qué tan grande es un bloque. Por ejemplo, utilizando la misma referencia que la anterior, suponiendo que C1 tiene {00 00 0010} cargado en el bloque {00}, este bloque contiene memoria {00 00 0000} a {00 00 1111}. Sin embargo, si intenta buscar {01 00 0010}, se perderá porque la etiqueta es diferente. (También supongo que se trata de un mapeo asociativo conjunto de 1 vía) –

1

No creo que tenga un golpe. Aunque la dirección 00 00 0100 buscaría el mismo bloque, estaría buscando una dirección diferente en la memoria. En una caché asignada directamente, los aciertos son solo causa al intentar acceder a la misma dirección en la memoria en el mismo bloque en instrucciones consecutivas. La dirección en la memoria viene dada por la dirección de byte y no por el número de bloque. Un caché mapeado directo reemplazará el contenido de un bloque siempre que no intente acceder a la misma dirección en el bloque. Si 00 00 0100 preceden a otro 00 00 0100, entonces habrá un golpe en un caché mapeado directo.

En un caché asociado, la dirección de memoria está dada por el número de bloque y no por la dirección de byte para que aquí se genere un acierto.

El número de bloque viene dado por planta (Dirección de byte/Bytes por bloque) mod (número de bloques)

+0

Generalmente, las cachés cargan un bloque entero en una falla no solo en los bytes solicitados. (Algunas memorias caché usan sectorización, proporcionando más de un bit válido por bloque, pero ningún procesador convencional proporciona un bit válido por byte o incluso por fragmento de 4 bytes. Además, con la DRAM actual, la longitud mínima de ráfaga es 4, utilizando la función de ráfaga que puede reducir el rendimiento, por lo que una interfaz de 64 bits proporciona una transferencia de * mínimo * 32 bytes). –

+0

@ PaulA.Clayton. ¿Puedes echarle un vistazo a esta pregunta de almacenamiento en caché también? http: // stackoverflow.com/questions/30555623/how-many-bits-are-in-the-address-field-for-a-directly-mapped-cache – committedandroider