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(); }
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(); } }