/// <summary> /// Simula a execução do escalonador /// </summary> public void Run() { CPUs cPUs = new CPUs(); int pos = 0; while (!TodosVazia() && pos < Todoscesss.Length) // Enquanto todas as filas de processos não estiverem vazias { //Console.WriteLine("\t\tProcessando Lista de Processos com Prioridade " + (pos + 1)); while (!Todoscesss[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)(Todoscesss[pos].Retirar()); // Retira o processo em execução da fila de processos //Console.WriteLine("Processando: " + processo.ToString()); if (this.suspend == true) { Controle.FilaProcessosSuspensos.Inserir(processo); //Adicionar no listView de processos suspensos } else { if (cPUs.getProcesso.QtdeCiclos <= 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()); this.suspend = false; } pos++; } }
public int CompareTo(object obj) { Processo auxProcesso = (Processo)obj; if (this.PID < auxProcesso.PID) { return(-1); } else if (this.PID == auxProcesso.PID) { return(0); } else { return(1); } }
/// <summary> /// Aloca o processo na fila de processos correta /// </summary> public void LeituraArquivo() { if (!File.Exists(Controle.nomeArquivo)) { //Exibir mensagem de erro "Arquivo não foi encontrado ou não existe." return; } //Fazer a leitura do arquivo e organizar entre as 10 filas using (StreamReader entrada = new StreamReader(Controle.nomeArquivo)) { string[] info; while (!entrada.EndOfStream) { info = entrada.ReadLine().Split(';'); try { if (info.Length == 4) { Processo processo = new Processo(Convert.ToInt32(info[0]), info[1], Convert.ToInt32(info[2]), Convert.ToInt32(info[3])); Controle.Escalonador.AdicionarProcesso(processo); Controle.AdicionarListView(processo); //Esse this é referente a quê? } else { //Exibir mensagem de erro "falta atributos" } } catch (Exception erro) { //Exibir mensagem de erro de conversão } } } }
/// <summary> /// Retira o processo na fila de processos /// </summary> /// <param name="processo">Processo que será retirado</param> public static void RetirarListView(Processo processo) { ListViewsFilasProcesso[processo.Prioridade - 1].Items.Remove(ListViewsFilasProcesso[processo.Prioridade - 1].FindItemWithText(Convert.ToString(processo.PID))); }