예제 #1
0
        public Simulacion(List <List <string> > hilillos, int quantumIngresado, bool esDespacio)
        {
            InitializeComponent();

            memoria             = new Memoria();
            colaContextos       = new Queue <Contexto>();
            contextosTerminados = new List <Contexto>();

            // var sync = new Barrier(participantCount: CANTIDAD_NUCLEOS); //Barrera para sincronizar

            sync = new Barrier(CANTIDAD_NUCLEOS, (foo) =>
            {
                reloj++;
                //lblReloj.Invoke(new Action(() => lblReloj.Text = reloj.ToString()));
                //lblReloj.Refresh();
                Console.WriteLine("Reloj: " + reloj);
            });     //Barrera para sincronizar

            this.hilillos  = hilillos;
            quantum        = quantumIngresado;
            ejecucionLenta = esDespacio;    // ejecución lenta = true; ejecución rápida = false.
            reloj          = 0;
            CargarInstrucciones();

            busDatos         = new BusDatos(memoria);
            busInstrucciones = new BusInstrucciones(memoria);

            n0 = new Nucleo(sync, ref busDatos, ref busInstrucciones, 0, quantumIngresado, ref colaContextos, ref contextosTerminados);
            n1 = new Nucleo(sync, ref busDatos, ref busInstrucciones, 1, quantumIngresado, ref colaContextos, ref contextosTerminados);
        }
예제 #2
0
        /*
         * Constructor de la clase
         */
        public Nucleo(Barrier barrera, ref BusDatos bd, ref BusInstrucciones bi, int id, int quantumInicial, ref Queue <Contexto> colaContextos, ref List <Contexto> contextosTerminados)
        {
            Sync     = barrera;
            busDatos = bd;
            busDatos.SetNucleo(id, this);
            busInstrucciones = bi;
            busInstrucciones.SetNucleo(id, this);
            identificador            = id;
            quantum                  = quantumInicial;
            this.quantumInicial      = quantumInicial;
            this.colaContextos       = colaContextos;
            this.contextosTerminados = contextosTerminados;
            contextoEnEjecucion      = null;

            nucleos = new List <Nucleo>();

            cacheDatos         = new CacheDatos();
            cacheInstrucciones = new CacheInstrucciones();
        }