/// <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++;
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        /// <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
                    }
                }
            }
        }
Exemple #4
0
 /// <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)));
 }