Пример #1
0
        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());
        }
Пример #2
0
        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);
        }
Пример #3
0
        //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);
            }
        }
Пример #4
0
        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;
            }
        }