Exemplo n.º 1
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);
            }
        }