public void AgregarProcesoListaEjecucion(String id_proceso_espera) { String nombre_proceso = ""; //busco el nombre del proceso que estaba en espera foreach (Proceso proceso in lstProcesos) { if (proceso.Id_proceso.Equals(id_proceso_espera)) { nombre_proceso = proceso.Nombre_proceso; break; } } //agrego el proceso que estaba en espera, a la lista de procesos en ejecucion Proceso_Ejecucion proceso_ejecucion = new Proceso_Ejecucion(id_proceso_espera, nombre_proceso); lstProcesosEnEjecucion.Add(proceso_ejecucion); }
private void Evento_Labels_Disco_Duro(object sender, EventArgs e) { Label etiqueta = (Label)sender; String id_proceso = etiqueta.Name; String nombre_proceso = "Proceso " + etiqueta.Name.Replace("P", ""); //quito la P y la reemplazo por nada para que solo me de el numero if (VerificarProcesosEjecucion(id_proceso) == false) //verifico si el proceso esta en la lista de procesos en ejecucion { if (ObtenerTamanioProceso(id_proceso) <= ObtenerEspacioLibre()) //verificar si hay espacio libre en la memoria ram { //envio el proceso a la memoria RAM EnviarProcesoARam(id_proceso); //vuelvo a cargar los marcos en la RAM, con la nueva información pnlMarcos.Controls.Clear(); CrearMarcosRAM(); //creo la lista de procesos en ejecucion proceso_ejecucion = new Proceso_Ejecucion(id_proceso, nombre_proceso); lstProcesosEnEjecucion.Add(proceso_ejecucion); //agrego los elementos de la lista de procesos de ejecucion al listbox lbProcEjecucion.Items.Clear(); foreach (Proceso_Ejecucion proceso in lstProcesosEnEjecucion) { lbProcEjecucion.Items.Add(proceso); } //ahora mandar a cambiar el bit de validez en la tabla de paginas foreach (Proceso p in lstProcesos) { if (p.Id_proceso.Equals(id_proceso)) //busco el bit de validez y lo cambio por 1, que signifca que pasa a ejecución { p.Proceso_utilizado = 1; pnlTablaPaginas.Controls.Clear(); //limpio el panel de todo lo que contiene CrearTablaDePaginas(); //Vuelvo a cargar el panel con la nueva información } } } else { int contador_espera = 0; //valido que no se agregue el elemento a la lista, para que no se repitan en la lista de procesos en espera foreach (Proceso_Espera proceso_espera in lstProcesosEnEspera) { if (proceso_espera.Id_proceso.Equals(id_proceso)) { agregar_elemento = false; break; } contador_espera++; if (contador_espera == lstProcesosEnEspera.Count) { agregar_elemento = true; break; } } if (agregar_elemento == true) //si no existe el elemento en la lista de procesos en espera, que lo agregue { proceso_espera = new Proceso_Espera(id_proceso, nombre_proceso); lstProcesosEnEspera.Add(proceso_espera); lbProcEspera.Items.Clear(); foreach (Proceso_Espera proceso in lstProcesosEnEspera) { lbProcEspera.Items.Add(proceso); } } MessageBox.Show("¡El proceso es demasiado grande para ejecutarse. Pulse intercambiar páginas para hacer Swap.!", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning); btnIntercambiarPaginas.Enabled = true; } } else { MessageBox.Show("El proceso se encuentra en ejecución. Seleccione un proceso que no se esté ejecutando.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }