static void testar() { ListaCircular listaCircular = new ListaCircular(); Processos A = new Processos(1, "Primeiro", 1, 1); Processos B = new Processos(2, "Segundo", 1, 1); Processos C = new Processos(3, "Terceiro", 1, 1); Processos D = new Processos(4, "Quarto", 1, 1); Processos E = new Processos(5, "Quinto", 1, 1); Processos F = new Processos(6, "Sexto", 1, 1); listaCircular.Inserir(A); listaCircular.Inserir(B); listaCircular.Inserir(C); listaCircular.Inserir(D); listaCircular.Inserir(E); listaCircular.Inserir(F); Console.WriteLine("Antes de retirar"); Console.WriteLine(listaCircular.ToString()); while (!listaCircular.Vazia()) { Console.WriteLine("Retirou: " + listaCircular.Retirar()); Console.WriteLine("Retirou: " + listaCircular.Retirar()); Console.WriteLine(listaCircular.ToString()); } Console.WriteLine("Vazia"); Console.WriteLine(listaCircular.ToString()); }
public void Run(int quantum) { this.Quantum = quantum; int pos = 0; while (!Vazio() && pos < 10) { Console.WriteLine("\t\tProcessando Lista de Processos com Prioridade " + (pos + 1)); while (!Todos[pos].Vazia()) { Processos processo = (Processos)(Todos[pos].Retirar()); Console.WriteLine("Processando: " + processo.ToString()); if (Process(processo, ref pos) > 0) { Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine("Processo Finalizado"); Console.ForegroundColor = ConsoleColor.White; } else { AdicionarProcesso(processo); Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("Processo não Finalizado"); Console.ForegroundColor = ConsoleColor.White; } Console.WriteLine("Estado Fila " + (pos + 1) + " \n" + Todos[pos].ToString()); } pos++; } Console.WriteLine("\nO total de ciclos utilizado pelos processos é de " + this.TempoTotal + " sendo que deveria usar " + this.TempoTerminoEsperado); }
//public int Processar(Processos processo) //{ // //int quantidadeTempo = processo.QtdeCiclos - this.Quantum; // //int tempoTotalQuantum = this.Quantum * 500; // //return Process(processo); // //if (quantidadeTempo == 0) // //{ // // //processo finalizado -> retirar o processo da fila // // //processo.DiminuirQtdeCiclos(this.Quantum); // // //Thread.Sleep(tempoTotalQuantum); // // //TempoTotal += Quantum; // // Process(processo); // // return 1; // //} // //else if(quantidadeTempo < 0) // //{ // // //processo finalizado antes do tempo -> retirar o processo da fila // // //processo.DiminuirQtdeCiclos(processo.QtdeCiclos); // // //tempoTotalQuantum *= processo.QtdeCiclos / this.Quantum; //redefinição do quantum gasto // // //Thread.Sleep(tempoTotalQuantum); // // //TempoTotal += processo.QtdeCiclos; // // Process(processo); // // return 1; // //} // //else//quantidade > 0 // //{ // // //processo não finalizou -> Continua na fila // // //processo.DiminuirQtdeCiclos(this.Quantum); // // //Thread.Sleep(tempoTotalQuantum); // // //TempoTotal += Quantum; // // Process(processo); // // //mudar Prioridade??? ----> retirar da lista, mudar a prioridade e adicionar ao escalonador // // if (TempoTotal >= TempoDeEsperaMaximo) // // processo.AumentarPrioridade(); // // else // // processo.DiminuirPrioridade(); // // return -1; // //} //} private int Process(Processos process, ref int pos) { int aux = 1; while (aux <= Quantum && process.QtdeCiclos > 0) { process.DiminuirQtdeCiclos(1); //Thread.Sleep(1000); TempoTotal++; aux++; } if (process.QtdeCiclos == 0) { return(1); } else { //Gambiarra no tempo de espera maximo if (TempoTotal >= TempoTerminoEsperado * 3 / 4) { process.AumentarPrioridade(); pos--; } else { process.DiminuirPrioridade(); } return(-1); } }
public void AdicionarProcesso(Processos processo) { if (processo.QtdeCiclos <= 10) { TempoTerminoEsperado += processo.QtdeCiclos; } else { TempoTerminoEsperado += 10; } switch (processo.Prioridade) { case 1: Todos[0].Inserir(processo); break; case 2: Todos[1].Inserir(processo); break; case 3: Todos[2].Inserir(processo); break; case 4: Todos[3].Inserir(processo); break; case 5: Todos[4].Inserir(processo); break; case 6: Todos[5].Inserir(processo); break; case 7: Todos[6].Inserir(processo); break; case 8: Todos[7].Inserir(processo); break; case 9: Todos[8].Inserir(processo); break; case 10: Todos[9].Inserir(processo); break; default: break; } }