/*
  * Escribir bloque de caché a memoria
  */
 public void BloqueAMem(BloqueCacheInstrucciones bloqueCache, int nBloque)
 {
     for (int i = 0; i < 4; i++)
     {
         memoriaPrincipal.SetPalabraInstruccion(nBloque, i, bloqueCache.GetPalabra(i));
     }
 }
Exemple #2
0
        /*
         * Carga las instrucciones en la memoria y crea los contextos para cada hilillo
         * Si no hay espacio suficiente, muestra un error y termina la ejecución de la simulación
         */
        public void CargarInstrucciones()
        {
            int indiceInstruccion = DIRECCION_INICIO_INSTRUCCION;
            int indicePalabra     = 0;
            int idContexto        = 0;

            foreach (List <string> lineasHilillos in hilillos)
            {
                //Crear el contexto y encolarlo en la cola de contextos
                Contexto contexto = new Contexto(indiceInstruccion, idContexto, reloj); //Un contexto por hilillo
                colaContextos.Enqueue(contexto);
                idContexto++;

                //Parsear lineas para guardarlas en memoria
                foreach (string linea in lineasHilillos)
                {
                    if (indicePalabra >= 4)
                    {
                        indicePalabra = 0;
                    }

                    //Generar palabra para guardar en el bloque
                    string[] partesLinea     = linea.Split(' ');
                    int      codigoOperacion = Int32.Parse(partesLinea[0]);
                    int      rX = Int32.Parse(partesLinea[2]);
                    int      rY = Int32.Parse(partesLinea[1]);
                    int      rZ = Int32.Parse(partesLinea[3]);

                    int[] palabra = { codigoOperacion, rX, rY, rZ };

                    //Guardar palabra
                    int bloqueDestino = GetNumeroBloque(indiceInstruccion);
                    if (!memoria.SetPalabraInstruccion(bloqueDestino, indicePalabra, palabra))
                    {
                        MessageBox.Show("No hay memoria suficiente para cargar el programa. Intente de nuevo con un programa más pequeño", "Error cargando los hilillos", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        Application.Exit();
                    }

                    //Aumentar índices
                    indiceInstruccion += 4;
                    indicePalabra++;
                }
            }
        }