Hola,
No entiendo como la dirección de memoria en la que comienza la matriz A 0X00100000 se llega a traducir en (TAG|LINEA|BYTE):
0000 0000 0001 000|0 0000 0000 000|0 0000
Gracias.
Hola,
No entiendo como la dirección de memoria en la que comienza la matriz A 0X00100000 se llega a traducir en (TAG|LINEA|BYTE):
0000 0000 0001 000|0 0000 0000 000|0 0000
Gracias.
Primero tenes que ver cómo se va a decodificar una dirección de memoria en sus componentes TAG, LINEA y BYTE.
Para ello tenes que ver cómo está dispuesta la memoria cache. La letra en este caso dice que se tiene una memoria cache de 128Kbytes, de correspondencia directa y líneas de 32 bytes.
Del dato de la cantidad de bytes por línea obtenemos la cantidad de bits que se precisan para el campo BYTE (es la cantidad de bits necesaria para direccionar los 32 bytes) o sea 5 bits.
Del dato del tamaño de la cache 2^17 bytes y la cantidad de bytes por línea obtenemos la cantidad de líneas en la cache. Esto es 2^17bytes dividido 2^5 bytes/línea nos da 2^12 líneas. Es decir que el campo LINEA tiene 12 bits (necesarios para direccionar una línea)
El resto de bits de la direccion de memoria se utiliza para identificar el bloque, es decir se usa como TAG. 32 bits - 5 bits - 12 bits = 15 bits. Es decir que el tag será de 15 bits.
TAG(15 bits)|LINEA(12 bits)|BYTE(5 bits)
Ahora podes decodificar la dirección de interés (matriz A comienza en 0x1000000) como pusiste en tu pregunta.
Saludos,
Gustavo
Gracias Gustavo por tu respuesta.
Paradójicamente quizás lo más complicado de entender que es lo que me explicaste anteriormente lo había razonado así y me ha servido para verificarlo.
Mi duda que quizás sea lo más trivial de este problema es como:
0X00100000 = 0000 0000 0001 000|0 0000 0000 000|0 0000 ¿?
Como es que:
0000 0000 0001 000 es el TAG ¿?
0 0000 0000 000 LINEA ¿?
0 0000 BYTE ¿?
Gracias Gustavo.