[ Foro de C ]
Buenas amigos, tengo un pequeño problema, en la uni me han mandado un pequeño proyecto que debo realizar en C, el detalle es el siguiente yo tengo muy poca (casi nada) de experiencia/conocimiento en C y a parte no cuento con un compañero para que me apoye, por lo que he pensado que quizás alguien del foro podría ayudarme ha entender que debo hacer y/o como debo hacerlo, el enunciado es medio largo espero me disculpen y al/los que me quiera ayudar estaré enormemente agradecido, sin mas que decir aquí el enunciado:
Resumen:
Es este proyecto, usted deberá implementar una simulación de una memoria principal y una caché de nivel 1. El objetivo es comprender tanto el funcionamiento de la caché como su estructura. Principalmente se debe simular tanto el movimiento de líneas de caché como la lectura y escritura de datos en estos dos niveles de la jerarquía de memoria.
Especificaciones:
Parte I (Recepción de parámetros)
Usted debe iniciar el proyecto analizando y entendiendo la estructura básica de la caché y la memoria principal. Recuerde que ambos niveles de memoria pueden ser simulados a través de un array lineal de datos. El programa, primeramente deberá recibir tres parámetros:
./sim <MP> <L1> <Bloque>
Donde:
MP hace referencia al número de bits necesarios para direccionar la memoria principal.
LI hace referencia al número de bits necesarios para direccionar la cache de nivel 1.
Bloque hace referencia al número de bits necesarios para direccionar el bloque.
Importante: Usted debe hacer uso de los parámetros de la línea de comandos (argc,argv) de lo contrario su proyecto no será corregido.
Ejemplo de entrada:
./sim 24 19 4
Memoria principal de 16MB
Caché L1 de 512KB
Bloque de 16Bytes
Una vez obtenidos los primeros datos de entrada, usted deberá estructurar tanto su memoria principal como su caché definiendo las unidades necesarias para el almacenamiento y movimiento de los datos.
Parte II (Carga de datos)
El estado de los dos niveles de memoria descritos anteriormente estarán guardados en dos archivos de texto, es decir que usted deberá cargarlos sobre las estructuras definidas de modo que pueda trabajar sobre cierto estado seguro. Cada archivo es una secuencia de caracteres. Asuma que cada vez que el programa se ejecuta, la caché está inicialmente vacía. Dichos archivos tienen el nombre de:
?main.txt? (Hace referencia a la memoria principal)
?cache_l1.txt? (Hace referencia a la caché L1)
Parte III (Recepción y ejecución de instrucciones)
Se definirán tres instrucciones que el programa ejecutará en un ciclo infinito. El formato de correspondencia que usted usará es correspondencia directa. Estas instrucciones se definen de la siguiente manera:
RD (Operación de lectura en caché)
Estructura:
RD <Correspondencia>
Ejemplo:
RD 000000000000000000000001
La operación RD leerá un byte de la línea de caché correspondiente en caso de que haya un acierto y mostrará por pantalla el mensaje <ACIERTO>, en caso contrario deberá traer el bloque correspondiente desde memoria principal, simplemente hará caching de la línea, al haber un fallo de caché se mostrará el mensaje <FALLO>.
Recuerde que debe asegurarse de que cada línea de caché sea válida y de que las etiquetas de la correspondencia y la línea coincidan para determinar que hay un acierto (O Fallo) de caché.
WR (Operación de escritura en memoria principal)
Estructura:
WR <Correspondencia>
Ejemplo:
WR 000000000000000000000001 0
La operación WR escribirá un byte en la dirección física especificada en la memoria principal e invalidará la línea de caché que contiene dicho byte de modo que los datos ya no sean válidos.
UP (Operación de escritura)
Estructura:
UP
Ejemplo:
UP
La operación UP guardará el estado de la memoria principal y la caché en sus respectivos archivos. Luego de realizar lo especificado, escribirá un mensaje por pantalla:
OK
Consideraciones:
El direccionamiento será por Byte, por lo que las operaciones de RD y WR leerán o escribirán un Byte, esto quiere decir que la palabra es de 1 Byte.
Antes de definir las estructuras, estudie la organización de la caché de modo que pueda entender la manera en que se realiza el movimiento de datos. Recuerde que el formato de correspondencia directa es:
| Etiqueta | Linea | Palabra |
Use la siguiente organización como referencia:
Bloque
| Etiqueta | Linea | Palabra |
Por lo que puede tomar en cuenta que Bloque puede referenciar a un bloque de memoria principal.
Ejemplo de prueba:
Archivo: main.txt
11111111111111112222222222222222333333333333333344444444444444445
555555555555555666666666666666677777777777777778888888888888888
Archivo: cache_l1.txt
00000000000000000000000000000000
Ejecución:
./sim 7 5 4
RD 0000000
RD 1000001
WR 1110000 x
WR 1111111 f
RD 1110000
RD 1011010
WR 1010001 r
WR 1001010 g
RD 1010111
RD 1010111
RD 1001010
RD 1001010
UP
Salida (Pantalla):
FALLO
FALLO
FALLO
FALLO
FALLO
ACIERTO
FALLO
ACIERTO
OK
Estado final Archivo (main.txt)
11111111111111112222222222222222333333333333333344444444444444445
555555555g555556r666666666666667777777777777777x88888888888888f
Estado final Archivo (cache_l1.txt)
5555555555g555556r66666666666666
Si tienen alguna pregunta o alguna interrogante no duden en escribir, cualquier ayuda seria genial, de antemano gracias y espero contar con su ayuda.
Jose.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)