public void deleteProceso(proceso pro) { if (pro != null && procesos != null) { deleteProceso(procesos.IndexOf(pro)); } }
private void setProceso(proceso pro) { MessageBox.Show("Proceso guardado: " + pro.toString()); pro.setSave(); ram += pro.getMemoria(); procesos.Add(pro); }
public int getIndex(proceso pro) { if (pro != null) { return(procesos.IndexOf(pro)); } return(-1); }
//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); }
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); }
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); } }
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); } } }
public void insertarProceso(proceso pro, int inicio) { pro.setDireccionInicio(inicio); pro.setDireccionFinal(inicio + pro.getMemoria() - 1); setProceso(pro); }
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); }