Ejemplo n.º 1
0
        private void setActual()
        {
            if (ProcesosListos.Count > 0)
            {
                Quantum       = 0;
                ProcesoActual = ProcesosListos.Dequeue();

                if (Memoria.getSizeProceso(ProcesoActual.Numero) < ProcesoActual.Tamano / (double)MAX_MARCO)
                {
                    List <clsMarco> Virtual = MemoriaVirtual.getProcess(ProcesoActual.Numero);
                    if (Memoria.canAccess(Virtual.Count * MAX_MARCO))
                    {
                        foreach (clsMarco M in Virtual)
                        {
                            Memoria.addMarco(MemoriaVirtual.removeMarco(M.ID));
                        }
                    }
                    else
                    {
                        int        LeftVirtual = 0, NumProceso = 0;
                        List <int> Procesos = Memoria.getDistinctProcess().ToList();

                        while (LeftVirtual < Virtual.Count)
                        {
                            List <clsMarco> Principal = Memoria.getProcess(Procesos[NumProceso]);
                            int             len       = Principal.Count - 1;

                            if (len > 0 && Principal[len].Proceso != ProcesoActual.Numero)
                            {
                                clsMarco M = Memoria.removeMarco(Principal[len].ID);
                                Memoria.addMarco(MemoriaVirtual.removeMarco(Virtual[LeftVirtual].ID));
                                MemoriaVirtual.addMarco(M);
                                LeftVirtual++;
                            }

                            if (++NumProceso >= Procesos.Count)
                            {
                                NumProceso = 0;
                            }
                        }
                    }
                    pnlPaginas.Invalidate();
                }

                if (ProcesoActual.Respuesta == -1)
                {
                    ProcesoActual.Respuesta = Counter - ProcesoActual.Llegada;
                }

                ProcesoActual.Estado = "En Ejecucion";
                Memoria.changeStatus(ProcesoActual.Numero, 2);
            }
            else
            {
                ProcesoActual = null;
            }
        }
Ejemplo n.º 2
0
        private void Procesar()
        {
            while (ProcesosNuevos.Count > 0 && Memoria.canAccess(ProcesosNuevos.First().Tamano))
            {
                clsProceso P = ProcesosNuevos.Dequeue();
                P.Llegada = Counter;
                P.Estado  = "Listo";
                ProcesosListos.Enqueue(P);
                Memoria.addProcess(P);
                CountProcesos++;
                dgSiguiente.DataSource = SetSiguiente(ProcesosNuevos);
            }

            if (ProcesoActual != null && ProcesoActual.TR > 0)
            {
                lblCounter.Text = (++Counter).ToString();
                txtTR.Text      = (--ProcesoActual.TR).ToString();
                txtTT.Text      = (ProcesoActual.TME - ProcesoActual.TR).ToString();
                lblQuantum.Text = (++Quantum).ToString();
            }
            else if (ProcesoActual != null)
            {
                AddConcluido();
                pnlPaginas.Invalidate();
            }
            else if (ProcesosListos.Count > 0)
            {
                setActual();
                pnlPaginas.Invalidate();
            }
            else
            {
                lblCounter.Text = (++Counter).ToString();
            }

            if (ProcesosListos.Count + ProcesosNuevos.Count + ProcesosBloqueados.Count + ProcesosSuspendidos.Count == 0 && ProcesoActual == null)
            {
                timer1.Stop();
                MessageBox.Show("Se han concluido todos los procesos", "Concluido", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            lblCounterLote.Text = ProcesosNuevos.Count.ToString();
            lblSuspendidos.Text = ProcesosSuspendidos.Count.ToString();
            setData(ProcesoActual);
            ProcessBloqueados();

            if (Quantum >= MAX_QUANTUM)
            {
                ProcesoActual.Estado = "Listo";
                ProcesosListos.Enqueue(ProcesoActual);
                Memoria.changeStatus(ProcesoActual.Numero, 1);
                setActual();
            }
        }
Ejemplo n.º 3
0
        private void ProcessBloqueados()
        {
            ProcesosBloqueados.Select(c => { c.Bloqueado++; return(c); }).ToList();

            if (ProcesosBloqueados.Count > 0 && ProcesosBloqueados.First().Bloqueado > 9)
            {
                clsProceso Unblock = ProcesosBloqueados.Dequeue();
                ProcesosListos.Enqueue(Unblock);
                Memoria.changeStatus(Unblock.Numero, 1);
            }

            dgBloqueados.DataSource = SetBloqueados(ProcesosBloqueados);
        }
Ejemplo n.º 4
0
        private void AddConcluido()
        {
            if (ProcesoActual == null)
            {
                return;
            }

            ProcesoActual.Estado       = "Concluido";
            ProcesoActual.Finalizacion = Counter;
            ProcesoActual.Concluido    = true;
            Memoria.removeProcess(ProcesoActual.Numero);
            Concluidos.Add(ProcesoActual);
            CountProcesos--;

            ProcesoActual = null;
        }
Ejemplo n.º 5
0
 private void setData(clsProceso P)
 {
     if (P != null)
     {
         txtOp.Text      = P.Operacion;
         txtNumero.Text  = P.Numero.ToString();
         txtTME.Text     = P.TME.ToString();
         txtTT.Text      = (P.TME - P.TR).ToString();
         txtTR.Text      = (P.TR).ToString();
         lblQuantum.Text = Quantum.ToString();
     }
     else
     {
         txtOp.Text      = "";
         txtNumero.Text  = "";
         txtTME.Text     = "";
         txtTT.Text      = "";
         txtTR.Text      = "";
         lblQuantum.Text = "";
     }
     dgActual.DataSource     = SetListos(ProcesosListos);
     dgConcluidos.DataSource = SetConcluidos(Concluidos);
     DrawPages();
 }
Ejemplo n.º 6
0
        private void PressKey(Keys K)
        {
            switch (K)
            {
            case Keys.I:     //Interrupcion
                if (timer1.Enabled && ProcesoActual != null)
                {
                    ProcesoActual.Bloqueado = 0;
                    ProcesoActual.Estado    = "Bloqueado";
                    ProcesosBloqueados.Enqueue(ProcesoActual);
                    Memoria.changeStatus(ProcesoActual.Numero, 3);
                    setActual();
                    setData(ProcesoActual);
                }
                break;

            case Keys.E:     //Error
                if (timer1.Enabled && ProcesoActual != null)
                {
                    ProcesoActual.Resultado = "Error";
                    ProcesoActual.Servicio  = ProcesoActual.TME - ProcesoActual.TR;
                    ProcesoActual.TR        = 0;
                    Procesar();
                }
                break;

            case Keys.P:     //Pausa
                timer1.Stop();
                lblTitle.Text = "Procesos en Pausa";
                break;

            case Keys.C:     //Continuar
                timer1.Start();
                lblTitle.Text = "Procesos en Ejecución";
                break;

            case Keys.N:     //Nuevo
                if (timer1.Enabled)
                {
                    ProcesosNuevos.Enqueue(new clsProceso(R));
                    dgSiguiente.DataSource = SetSiguiente(ProcesosNuevos);
                    Procesar();
                }
                break;

            case Keys.T:     //Tabla BCP
                if (timer1.Enabled)
                {
                    timer1.Stop();
                    List <clsProceso> BCP = new List <clsProceso>();
                    BCP.AddRange(Concluidos);

                    if (ProcesoActual != null)
                    {
                        BCP.Add(ProcesoActual);
                    }

                    BCP.AddRange(ProcesosListos);
                    BCP.AddRange(ProcesosBloqueados);
                    BCP.AddRange(ProcesosNuevos);
                    BCP.AddRange(ProcesosSuspendidos);

                    foreach (clsProceso p in BCP)
                    {
                        if (!p.Concluido)
                        {
                            p.Finalizacion = Counter;
                            p.Servicio     = p.TME - p.TR;
                        }
                    }

                    frmConcluido Ventana = new frmConcluido(Counter, BCP, false);
                    this.Hide();
                    Ventana.ShowDialog();
                    this.Show();
                    dgActual.Focus();
                    timer1.Start();
                }
                break;

            case Keys.M:     //Tabla paginas
                if (timer1.Enabled)
                {
                    timer1.Stop();
                    frmTablaPaginas Paginas = new frmTablaPaginas(Memoria, MemoriaVirtual);
                    this.Hide();
                    Paginas.ShowDialog();
                    this.Show();
                    timer1.Start();
                }
                break;

            case Keys.S:     //Suspendido
                if (ProcesosBloqueados.Count > 0)
                {
                    clsProceso Suspendido = ProcesosBloqueados.Dequeue();
                    Memoria.removeProcess(Suspendido.Numero);
                    MemoriaVirtual.removeProcess(Suspendido.Numero);
                    Suspendido.Estado = "Suspendido";
                    ProcesosSuspendidos.Enqueue(Suspendido);
                    pnlPaginas.Invalidate();
                    GuardarSuspendidos();
                }
                break;

            case Keys.R:     //Regresa Suspendido
                if (ProcesosSuspendidos.Count > 0 && Memoria.canAccess(ProcesosSuspendidos.First().Tamano))
                {
                    clsProceso Suspendido = ProcesosSuspendidos.Dequeue();
                    Memoria.addProcess(Suspendido, 3);
                    Suspendido.Estado = "Bloqueado";
                    ProcesosBloqueados.Enqueue(Suspendido);
                    GuardarSuspendidos();
                }
                break;

            case Keys.U:     //Memoria Virtual
                if (timer1.Enabled)
                {
                    foreach (int i in Memoria.getDistinctProcess())
                    {
                        List <clsMarco> Virtual = Memoria.getProcess(i);
                        int             len     = Virtual.Count - 1;

                        if (len > 0 && Virtual[len].Estatus != 2 && MemoriaVirtual.canAccess(1))
                        {
                            MemoriaVirtual.addMarco(Memoria.removeMarco(Virtual[len].ID));
                        }
                    }
                }
                pnlPaginas.Invalidate();
                break;
            }
        }