Exemple #1
0
 public void deleteProceso(proceso pro)
 {
     if (pro != null && procesos != null)
     {
         deleteProceso(procesos.IndexOf(pro));
     }
 }
Exemple #2
0
 private void setProceso(proceso pro)
 {
     MessageBox.Show("Proceso guardado: " + pro.toString());
     pro.setSave();
     ram += pro.getMemoria();
     procesos.Add(pro);
 }
Exemple #3
0
 public int getIndex(proceso pro)
 {
     if (pro != null)
     {
         return(procesos.IndexOf(pro));
     }
     return(-1);
 }
Exemple #4
0
 //Analiza que un proceso pueda caber en memoria para su inserción
 public Boolean analizarProceso(proceso pro, string metodo)
 {
     if (metodo == "Siguiente Hueco")
     {
         return(siguienteHueco(pro));
     }
     else if (metodo == "Peor Hueco")
     {
         return(peorhueco(pro));
     }
     return(false);
 }
Exemple #5
0
            private proceso nextProceso(int inicio, int final = 2000)
            {
                proceso pro = null;

                for (int j = 0; j < procesos.Count(); j++)
                {
                    if ((procesos.ElementAt(j).getDireccionInicio() < final && procesos.ElementAt(j).getDireccionInicio() > inicio) || (procesos.ElementAt(j).getDireccionInicio() == inicio))
                    {
                        pro   = procesos.ElementAt(j);
                        final = pro.getDireccionInicio();
                    }
                }
                return(pro);
            }
Exemple #6
0
            private bool peorhueco(proceso pro)         //PEOR HUECO
            {
                List <proceso> listaHuecos = new List <proceso>();
                int            temporalMem = 0;

                for (int i = 0; i < 2000; i++)
                {
                    if (nextProceso(i) == null)
                    {
                        listaHuecos.Add(new proceso("hueco", "0", (2000 - i).ToString(), "0"));
                        listaHuecos.Last().setDireccionInicio(i);
                        listaHuecos.Last().setDireccionFinal(listaHuecos.Last().getMemoria() + listaHuecos.Last().getDireccionInicio());
                        i = listaHuecos.Last().getDireccionFinal();
                        break;
                    }
                    else if (nextProceso(i).getDireccionInicio() > i)
                    {
                        listaHuecos.Add(new proceso("hueco", "0", (nextProceso(i).getDireccionInicio() - i).ToString(), "0"));
                        listaHuecos.Last().setDireccionInicio(i);
                        listaHuecos.Last().setDireccionFinal(listaHuecos.Last().getMemoria() + listaHuecos.Last().getDireccionInicio());
                        i = listaHuecos.Last().getDireccionFinal() - 1;
                    }
                    else
                    {
                        i = nextProceso(i).getDireccionFinal();
                    }
                }

                for (int i = 0; i < listaHuecos.Count(); i++)
                {
                    if (listaHuecos.ElementAt(i).getMemoria() > temporalMem)
                    {
                        temporalMem = listaHuecos.ElementAt(i).getMemoria();
                        pro.setDireccionInicio(listaHuecos.ElementAt(i).getDireccionInicio());
                        pro.setDireccionFinal(listaHuecos.ElementAt(i).getDireccionFinal());
                    }
                }
                if (pro.getDireccionInicio() <= 1999 && pro.getDireccionFinal() >= 0)
                {
                    insertarProceso(pro, pro.getDireccionInicio());
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
Exemple #7
0
        private void leer(List <proceso> procesos)
        {
            //Abrimos el archivo seleccionado
            System.IO.StreamReader file = new System.IO.StreamReader(openFileDialog1.OpenFile());
            openFileDialog1.OpenFile().Close();
            string line;

            while (!file.EndOfStream && (line = file.ReadLine()) != null)
            {
                string[] substrings = line.Split(' ');

                if (int.Parse(substrings[2]) <= 2000)
                {
                    proceso proc = new proceso(substrings[0], substrings[1], substrings[2], substrings[3]);

                    procesos.Add(proc);
                }
            }
        }
Exemple #8
0
 public void insertarProceso(proceso pro, int inicio)
 {
     pro.setDireccionInicio(inicio);
     pro.setDireccionFinal(inicio + pro.getMemoria() - 1);
     setProceso(pro);
 }
Exemple #9
0
            private bool siguienteHueco(proceso pro)
            {
                if (pro.getMemoria() <= 2000)
                {
                    //A PARTIR DESDE LA POSICION INICIAL
                    if (procesos.Count > 0)
                    {
                        for (int i = procesos.Last().getDireccionFinal(); i + pro.getMemoria() <= 2000; i++)
                        {
                            for (int j = 0; procesos.Count() == 0 || j < procesos.Count(); j++) //Recorremos todos los procesos
                            {
                                if (procesos.Count() == 0)
                                {
                                    insertarProceso(pro, i);
                                    return(true);
                                }
                                else if (procesos.ElementAt(j).getDireccionInicio() <= i && procesos.ElementAt(j).getDireccionFinal() >= i) //Encontrado proceso al inicio de la busqueda
                                {
                                    i = procesos.ElementAt(j).getDireccionFinal();
                                }
                                else if (nextProceso(i) != null)                                     //Hay un proceso desde la ubicación actual hasta la final
                                {
                                    if (nextProceso(i).getDireccionInicio() - i >= pro.getMemoria()) //hay espacio!
                                    {
                                        insertarProceso(pro, i);
                                        return(true);
                                    }
                                    else //No hay espacio, así que saltamos a la ubicación final del proceso
                                    {
                                        i = nextProceso(i).getDireccionFinal();
                                    }
                                }
                                else if (nextProceso(i) == null)      //no hay proceso desde la ubicación actual
                                {
                                    if (2000 - i >= pro.getMemoria()) //Cabe en el espacio restante
                                    {
                                        insertarProceso(pro, i);
                                        return(true);
                                    }
                                    else //No cabe en el espacio restante
                                    {
                                        return(false);
                                    }
                                }
                            }
                        }
                    }



                    //HASTA LA POSICION INICIAL
                    for (int i = 0; i + pro.getMemoria() <= 2000; i++)
                    {
                        for (int j = 0; procesos.Count() == 0 || j < procesos.Count(); j++) //Recorremos todos los procesos
                        {
                            if (procesos.Count() == 0)
                            {
                                insertarProceso(pro, i);
                                return(true);
                            }
                            else if (procesos.ElementAt(j).getDireccionInicio() <= i && procesos.ElementAt(j).getDireccionFinal() > i) //Encontrado proceso al inicio de la busqueda
                            {
                                i = procesos.ElementAt(j).getDireccionFinal();
                            }
                            else if (nextProceso(i) != null)                                     //Hay un proceso desde la ubicación actual hasta la final
                            {
                                if (nextProceso(i).getDireccionInicio() - i >= pro.getMemoria()) //hay espacio!
                                {
                                    insertarProceso(pro, i);
                                    return(true);
                                }
                                else //No hay espacio, así que saltamos a la ubicación final del proceso
                                {
                                    i = nextProceso(i).getDireccionFinal();
                                }
                            }
                            else if (nextProceso(i) == null)      //no hay proceso desde la ubicación actual
                            {
                                if (2000 - i >= pro.getMemoria()) //Cabe en el espacio restante
                                {
                                    insertarProceso(pro, i);
                                    return(true);
                                }
                                else //No cabe en el espacio restante
                                {
                                    return(false);
                                }
                            }
                        }
                    }



                    //FIN DE LOS FOR
                }
                return(false);
            }