public Processo PegaProximo()
 {
     if (this.ListaFila.Count == 0)
     {
         return(null);
     }
     else
     {
         Processo Retorno = this.ListaFila[0];
         this.ListaFila.RemoveAt(0);
         return(Retorno);
     }
 }
Beispiel #2
0
        private static void LerArquivos()
        {
            string[] arquivo = File.ReadAllLines("processos.txt");
            foreach (string linha in arquivo)
            {
                string[] aux        = linha.Split(';');
                int      pid        = int.Parse(aux[0]);
                string   nome       = aux[1];
                int      prioridade = int.Parse(aux[2]);
                int      numciclos  = int.Parse(aux[3]);

                Processo NovoProcesso = new Processo(pid, nome, prioridade, numciclos);

                FilasPrioridade[prioridade - 1].InserirUltimo(NovoProcesso);

                Console.WriteLine($@"Processo de id {pid} inserido na fila de prioridade {prioridade}");
            }
        }
Beispiel #3
0
        void executaThread()
        {
            //3 - Cria os processos
            List <Processo> processos = new List <Processo>();
            List <TextBox>  textboxes = new List <TextBox>();
            List <Label>    labels    = new List <Label>();

            Processo processo1 = new Processo();

            processo1.setInput(textBox2.Text);
            processos.Add(processo1);
            textboxes.Add(textBox5);
            labels.Add(label4);
            processo1.ciclos = Convert.ToInt32(textBox8.Text);
            finalizado(processos[0].finalizado);

            Processo processo2 = new Processo();

            processo2.setInput(textBox3.Text);
            processos.Add(processo2);
            textboxes.Add(textBox6);
            labels.Add(label5);
            processo2.ciclos = Convert.ToInt32(textBox9.Text);
            finalizado(processos[1].finalizado);

            Processo processo3 = new Processo();

            processo3.setInput(textBox4.Text);
            processos.Add(processo3);
            textboxes.Add(textBox7);
            labels.Add(label6);
            processo3.ciclos = Convert.ToInt32(textBox10.Text);
            finalizado(processos[2].finalizado);

            //4 - Calcula a matriz de saída para o txt
            qntProcessos = processos.Count() + 1;
            qntColunas   = calculaTamanhoTotal(processos) + 1;
            matriz       = new string[qntProcessos, qntColunas];


            escalonaProcessos(processos, Convert.ToInt32(textBox1.Text), 0, textboxes);
            controlesDesbloquear();
        }
Beispiel #4
0
        public void InserirUltimo(Processo x)
        {
            Nodo NovoNodo = new Nodo();

            NovoNodo.dado = x;
            if (raiz == null)
            {
                NovoNodo.seguinte = NovoNodo;
                NovoNodo.anterior = NovoNodo;
                raiz = NovoNodo;
            }
            else
            {
                Nodo ultimo = raiz.anterior;
                NovoNodo.seguinte = raiz;
                NovoNodo.anterior = ultimo;
                raiz.anterior     = NovoNodo;
                ultimo.seguinte   = NovoNodo;
            }
        }
        /// <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++;
            }
        }
Beispiel #6
0
 public Processo Remover(int pos)
 {
     if (pos <= Contar())
     {
         if (pos == 1)
         {
             if (Contar() == 1)
             {
                 Processo aux = raiz.dado;
                 raiz = null;
                 return(aux);
             }
             else
             {
                 Processo aux    = raiz.dado;
                 Nodo     ultimo = raiz.anterior;
                 raiz            = raiz.seguinte;
                 ultimo.seguinte = raiz;
                 raiz.anterior   = ultimo;
                 return(aux);
             }
         }
         else
         {
             Nodo aux = raiz;
             for (int f = 1; f <= pos - 1; f++)
             {
                 aux = aux.seguinte;
             }
             Processo auxp     = aux.dado;
             Nodo     anterior = aux.anterior;
             aux = aux.seguinte;
             anterior.seguinte = aux;
             aux.anterior      = anterior;
             return(auxp);
         }
     }
     return(null);
 }
        /// <summary>
        /// Simulation of the process execution
        /// </summary>
        /// <param name="p">Process to be executed</param>
        /// <returns>Returns 1, if the process was completed;
        /// Returns -1, if the process was not completed.</returns>
        private int CPU(Processo p)
        {
            int aux = 1; // represents how much of the quantum was completed

            while (aux <= Quantum && p.QtdeCiclos > 0)
            {
                p.DiminuirQtdeCiclos();
                Thread.Sleep(sleep); // Simula o tempo gasto pela CPU
                aux++;
            }

            if (p.QtdeCiclos == 0)
            {
                return(1);
            }
            else
            {
                p.DiminuirPrioridade();
            }

            return(-1);
        }
Beispiel #8
0
        private static void Processar()
        {
            for (int i = 0; i < FilasPrioridade.Length; i++)
            {
                for (int j = 0; j < 20 - i && j < FilasPrioridade[i].Contar(); j++)
                {
                    Processo processo = FilasPrioridade[i].Remover(1);

                    ExecutarProcesso(processo);
                    if (processo.Numciclos > 0)
                    {
                        Console.WriteLine($@"Processo {processo.Pid} retornado para fila de espera de prioridade {processo.Prioridade}");
                        FilasPrioridade[processo.Prioridade - 1].InserirUltimo(processo);
                    }
                    else
                    {
                        Console.WriteLine($@"Processo {processo.Pid} encerrou sua execução");
                    }
                }
            }

            Console.WriteLine("Todos os processos encerraram sua execução");
        }
Beispiel #9
0
 private static void PromoverProcesso(Processo processo)
 {
     processo.Prioridade--;
     FilasPrioridade[processo.Prioridade - 1].InserirUltimo(processo);
     Console.WriteLine($@"Processo {processo.Pid} promovido para fila de prioridade {processo.Prioridade}");
 }
Beispiel #10
0
 private static void RebaixarProcesso(Processo processo)
 {
     processo.Prioridade++;
     FilasPrioridade[processo.Prioridade - 1].InserirUltimo(processo);
     Console.WriteLine($@"Processo {processo.Pid} rebaixado para fila de prioridade {processo.Prioridade}");
 }
Beispiel #11
0
 private static void ExecutarProcesso(Processo processo)
 {
     Console.WriteLine($@"Executando processo {processo.Pid}");
     Thread.Sleep(100);
     processo.Numciclos--;
 }
 public void Insere(Processo Processo)
 {
     this.ListaFila.Add(Processo);
 }