[ Foro de C ]

Ayuda Proyecto en C

30-Mar-2016 02:03
Jose Urdaneta
0 Respuestas

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.)