private void calcularPromediosRR() { //Para recuperar los valores al final Proceso[] listRoundRobin = new Proceso[numProcesos]; respaldarLista(ref listRoundRobin); Console.WriteLine(tiempoProcesos[0].tiempoProcesamiento); //matriz de sumas de espera y respuesta, indice 0 en las filas es para espera, 1 para respuesta y el 2 para el valor anteterior con el que se calculará la espera int[,] esperaRespuesta = new int[3, numProcesos]; int iteraciones = 0; getNumeroDeVueltas(ref iteraciones); int totalEspera = 0; int totalRespuesta = 0; int cmax = 0; int indices = numProcesos; for (int i = 0; i < iteraciones; i++) { for (int j = 0; j < numProcesos; j++) { if (listRoundRobin[j].tiempoProcesamiento > this.Quantum) { //Cada que entre esperaRespuesta[0, j] += cmax - esperaRespuesta[2, j]; cmax += this.Quantum; esperaRespuesta[2, j] = cmax; LabelsEspeciales labelRR = new LabelsEspeciales(listRoundRobin[j].numeroProceso, this.Quantum, cmax, j); listRoundRobin[j].tiempoProcesamiento -= this.Quantum; flPanelGanttRR.Controls.Add(labelRR); } else if (listRoundRobin[j].tiempoProcesamiento > 0) //Igual o menor se deja en 0 su valor { esperaRespuesta[0, j] += cmax - esperaRespuesta[2, j]; cmax += listRoundRobin[j].tiempoProcesamiento; //Llegados a este punto será la última instancia, cuando ya acabó el proceso, ya no se ejecutará otra vez esperaRespuesta[1, j] = cmax; LabelsEspeciales labelRR = new LabelsEspeciales(listRoundRobin[j].numeroProceso, listRoundRobin[j].tiempoProcesamiento, cmax, j); listRoundRobin[j].tiempoProcesamiento = 0; flPanelGanttRR.Controls.Add(labelRR); } } } Console.WriteLine(tiempoProcesos[0].tiempoProcesamiento); flPanelGanttRR.WrapContents = false; calcularTotalEsperaRespuesta(ref totalEspera, ref totalRespuesta, esperaRespuesta); lblCmaxRR.Text = "Cmax: " + cmax; lblEsperaRR.Text = "Promedio espera: " + Math.Round(((double)totalEspera / numProcesos), 4); lblRespuestaRR.Text = "Promedio respuesta: " + Math.Round(((double)totalRespuesta / numProcesos), 4); }
//Llena la tabla para FCFS private void btnGenerarProcesos_Click(object sender, EventArgs e) { //Si se presiona el botón con los mismos valores que ya se calcularon no se debe de hacer nada if (numProcesos != (int)udNumProcesos.Value || timeMax != (int)udNumTimeMax.Value) { flpTabla.SelectedIndex = 0; numProcesos = (int)udNumProcesos.Value; timeMax = (int)udNumTimeMax.Value; //Se limpian todas las tablas cada vez que se generan nuevos valores flPanelTablaFCFS.Controls.Clear(); flpTablaSJF.Controls.Clear(); flpTablaLJF.Controls.Clear(); flpTablaRR.Controls.Clear(); Random aleatorio = new Random(); lblProcesos.Text = "| "; //Se limpia la lista que guarda todos los procesos anteriores tiempoProcesos.Clear(); for (int i = 0; i < numProcesos; i++) { int num = aleatorio.Next(1, timeMax); Proceso proceso = new Proceso(i + 1, num); tiempoProcesos.Add(proceso); lblProcesos.Text += "P" + (i + 1) + " = " + num + " | "; LabelsEspeciales labelProceso = new LabelsEspeciales(i + 1); flPanelTablaFCFS.Controls.Add(labelProceso); LabelsEspeciales labelTiempo = new LabelsEspeciales(num); flPanelTablaFCFS.Controls.Add(labelTiempo); if (i % 2 == 0) { labelProceso.BackColor = Color.FromArgb(96, 192, 205); labelTiempo.BackColor = Color.FromArgb(96, 192, 205); } } //Se limpian todos los paneles de diagramas de Gantt flPanelGanttFCFS.Controls.Clear(); flPanelGanttSJF.Controls.Clear(); flPanelGanttLJF.Controls.Clear(); flPanelGanttRR.Controls.Clear(); calcularPromediosFCFS(0); panelActivo[0] = true; //ShortestJobFirst panelActivo[1] = false; //LargestJobFirst panelActivo[2] = false; //RoundRobin panelActivo[3] = false; } }
//Llenas las tablas SJF, LJF, RR public void llenarTabla(ref FlowLayoutPanel contenedorTabla, List <Proceso> procesos) { for (int i = 0; i < numProcesos; i++) { LabelsEspeciales labelProceso = new LabelsEspeciales(procesos[i].numeroProceso); contenedorTabla.Controls.Add(labelProceso); LabelsEspeciales labelTiempo = new LabelsEspeciales(procesos[i].tiempoProcesamiento); contenedorTabla.Controls.Add(labelTiempo); if (i % 2 == 0) { labelProceso.BackColor = Color.FromArgb(96, 192, 205); labelTiempo.BackColor = Color.FromArgb(96, 192, 205); } } }