Пример #1
0
 private void LlenarFrames()
 {
     while (true)
     {
         if (Nuevos.Siguiente() != null)
         {
             if (Nuevos.Siguiente().nf <= FramesDisponibles(MemoriaReal))
             {
                 Proceso p = Nuevos.Dequeue();
                 AsignarFrames(p);
                 Listos.Enqueue(p);
                 p.estado        = "Listo";
                 p.TiempoLlegada = Tiempo;
             }
             else
             {
                 break;
             }
         }
         else
         {
             break;
         }
     }
 }
        public FormTablaProcesos(int Tiempo, Proceso Ejecucion, Cola Nuevos, Cola Listos, List <Proceso> Bloqueados, List <Proceso> Terminados)
        {
            InitializeComponent();
            this.Tiempo = Tiempo;

            while (Nuevos.Count > 0)
            {
                Nuevo.Add(Nuevos.Dequeue());
            }
            foreach (Proceso p in Nuevo)
            {
                Nuevos.Enqueue(p);
            }

            while (Listos.Count > 0)
            {
                Listo.Add(Listos.Dequeue());
            }
            foreach (Proceso p in Listo)
            {
                Listos.Enqueue(p);
            }
            RecuperarSuspendidos();

            this.Bloqueados = Bloqueados;
            this.Terminados = Terminados;
            this.ejecucion  = Ejecucion;

            cargarListas();
        }
Пример #3
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Stop();
            timer1.Interval = 500;
            Expulsar();

            while (teclas.Count > 0)
            {
                Teclazos(teclas.Dequeue());
            }
            LlenarFrames();


            cargarListas();


            if (ProcesosEnMemoria() != 0 || Nuevos.Count > 0 || NumSuspendidos > 0)
            {
                if (Ejecucion == null)
                {
                    if (Listos.Count >= 1)
                    {
                        Ejecucion = Listos.Dequeue();
                        Ejecucion.Respuesta();
                        Ejecucion.estado = "Ejecucion";
                        TomarApartados();
                        ReiniciaQuantum();
                    }
                }

                if (Ejecucion != null)
                {
                    Ejecucion.TiempoRestante--;
                    Ejecucion.TiempoTranscurrido++;
                    if (Ejecucion.TiempoRestante == 0 || Ejecucion.error)
                    {
                        Terminado(Ejecucion);
                        LimpiarFrames(Ejecucion);
                        Ejecucion = null;
                    }
                }


                foreach (Proceso p in Bloqueados)
                {
                    if (p.TiempoRestanteBloqueado > 0)
                    {
                        p.TiempoRestanteBloqueado--;
                        p.TiempoEspera++;
                        //p.TiempoEspera++;
                    }
                    else
                    {
                        p.estado = "Listo";
                        Listos.Enqueue(p);
                    }
                }
                foreach (Proceso p in Listos)
                {
                    if (Bloqueados.Contains(p))
                    {
                        Bloqueados.Remove(p);
                    }
                    else
                    {
                        p.TiempoEspera++;
                    }
                }
                //
                Tiempo++;
                //Expulsar();


                cargarListas();
                timer1.Start();
            }
        }