/// <summary> /// Simula a execução do escalonador /// </summary> public void Run() { int pos = 0; while (!TodosVazia() && pos < Todos.Length) // Enquanto todas as filas de processos não estiverem vazias { Console.WriteLine("\t\tProcessando Lista de Processos com Prioridade " + (pos + 1)); while (!Todos[pos].Vazio()) // Enquanto uma fila especifica não estiver vazia { Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine("\nTroca de contexto..."); Console.ForegroundColor = ConsoleColor.White; Thread.Sleep(tContexto); // Simulando o tempo gasto pela troca de contexto Processo processo = (Processo)(Todos[pos].Retirar()); // Retira o processo em execução da fila de processos Console.WriteLine("Processando: " + processo.ToString()); if (CPU(processo) > 0) // Se o retorno da CPU for maior que 0, o processo foi finalizado { Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine("Processo Finalizado"); Console.ForegroundColor = ConsoleColor.White; } else // O processo não terminou { AdicionarProcesso(processo); // Adiciona o processo em uma nova fila de prioridade (prioridade -1) Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("Processo REBAIXADO para prioridade {0}", processo.Prioridade); Console.ForegroundColor = ConsoleColor.White; } Console.WriteLine("\n\t\tProcessando Lista de Processos com Prioridade " + (pos + 1)); Console.WriteLine("\n" + Todos[pos].ToString()); } pos++; } }