示例#1
0
 public Processo obterProximoProcessoRoundR()
 {
     if (listaProcesso.Count > 0)
     {
         Processo temp = listaProcesso.Find(x => x != null);                 //encontre o primeiro não nulo => encontre o primeiro elemento
         listaProcesso.Remove(temp);
         if (temp != null)
         {
             return(temp);
         }
     }
     throw new InvalidOperationException("Nova rodada!");
 }
示例#2
0
 public bool executar(Escalonador esc)
 {
     if (this.executando != esc.Executando)
     {
         this.executando = esc.Executando;
         inicio          = esc.Tempo;
         this.executando.executar(1);
     }
     else
     {
     }
     return((esc.Tempo - this.inicio) == this.quantum);
 }
示例#3
0
        public void GraficoSemPreempcao()
        {
            this.processo = script_main.escalonador.Executando;

            if (!script_main.escalonador.SemProcesso)
            {
                AtivaBarra(SaberLinha(), index);
            }
            else if (script_main.escalonador.ProcessosAEntrar == 0)
            {
                CancelInvoke("GraficoSemPreempcao");
            }
            script_main.escalonador.update();
            index++;
        }
示例#4
0
        public void updatePreemptivo()
        {
            tempo++;
            carregaProcesso(tempo);
            try
            {
                //if (algoritmo.executar (this)) {
                bool exec = algoritmo.executar(this);

                this.tempoPreempcaoIni = this.tempo;
                this.preempcao         = true;
                Debug.Log("Executou");
                //}
                if (this.preempcao)
                {
                    if ((this.tempo - this.tempoPreempcaoIni) == this.tempoPreempcao)
                    {
                        Processo temp;
                        temp = this.executando;
                        Debug.Log("Preempcao");
                        this.executando = algoritmo.obterProximoProcesso(this);
                        this.preempcao  = false;
                        if (!temp.Terminado)
                        {
                            this.listaProcesso.Add(temp);
                        }
                    }
                }
            }

            catch (InvalidOperationException)
            {
                if (this.executando.Terminado)
                {
                    semProcesso = true;
                }
            }
        }
示例#5
0
        public Processo obterProximoProcessoEDF()
        {
            IEnumerator <Processo> procEnum = listaProcesso.GetEnumerator();

            procEnum.MoveNext();
            Processo temp = procEnum.Current;

            if (listaProcesso.Count == 0)
            {
            }
            else
            {
                if (listaProcesso.Count == 1)
                {
                    temp = listaProcesso[0];
                    listaProcesso.Remove(temp);                    //remover
                    return(temp);
                }
                else if (listaProcesso.Count > 1)
                {
                    while (procEnum.MoveNext())
                    {
                        if (temp.deadline >= procEnum.Current.deadline)
                        {
                            temp = procEnum.Current;
                        }
                    }
                    listaProcesso.Remove(temp);                    //remover
                }
            }
            if (temp != null)
            {
                return(temp);
            }
            throw new InvalidOperationException("Não existem processos na fila de espera!");
        }
示例#6
0
        // int ind = 0;
        public void GraficoPreemptivo()
        {
            this.processo = script_main.escalonador.Executando; //pega o processo que ta executando na classe escalonador

            if (!script_main.escalonador.SemProcesso)
            {
                AtivaBarra(SaberLinha(), index);
                index++;
            }
            script_main.escalonador.updatePreemptivo();
            if ((this.processo.tempoExecucao - this.processo.tempoExecutado) >= 1)   //tempo de preempção
            {
                AtivaBarra(SaberLinha(), index);
                index++;
            }
            //script_main.escalonador.update();

            if (script_main.escalonador.ProcessosAEntrar == 0 && script_main.escalonador.listaProcesso.Count > 0)
            //if(script_main.escalonador.prioridades == null)
            {
                CancelInvoke("GraficoPreemptivo");
            }
            //ind++;
        }
示例#7
0
 public void inicializa()
 {
     carregaProcesso(0);
     this.executando = algoritmo.obterProximoProcesso(this);
 }
示例#8
0
 public void adicionaProcesso(Processo processo)
 {
     toBeLoaded.Add(processo);
 }
示例#9
0
 // Update is called once per frame
 void Update()
 {
     this.processo = script_main.escalonador.executando;
 }