Example #1
0
 public void abortProcess(Processo a)
 {
     foreach (Processador c in processadores)
     {
         if (c.rodando == a)
         {
             c.rodando = null;
         }
     }
     if (filaEspera.Contains(a))
     {
         filaEspera.Remove(a);
     }
     ram.deAllocateMemory(a);
     filaAbortados.AddLast(a);
 }
        public bool allocateMemory(Processo a, int tamanho)
        {
            particao found = searchSmaller(tamanho);

            if (found != null)
            {
                found.usando = a;
                a.blocos_de_memoria.AddLast(found);
                found.memoria_usada = tamanho;
                return(true);
            }
            else
            {
                //deAllocateMemory(a);
                a.status = 2;
                return(false);
            }
        }
Example #3
0
 public void work()
 {
     runLFU();
     foreach (Processador c in processadores)
     {
         if (c.rodando == null)
         {
             if (filaEspera.Count > 0)
             {
                 Processo novo = filaEspera.First();
                 filaEspera.RemoveFirst();
                 if (novo.blocos_de_memoria.Count == 0)
                 {
                     if (!ram.allocateMemory(novo, 10))
                     //if (!ram.allocateMemory(novo, randomizer.Next(1, 11)))// alocacao inicial
                     {
                         abortProcess(novo); // se chegou aqui deu ruim e nao tinha memoria
                     }
                 }
                 if (ram.checarBlocos(novo))
                 {
                     c.rodando = novo;
                 }
             }
         }
         else
         {
             if (randomizer.Next(1, 11) == 1)
             {
                 if (!ram.allocateMemory(c.rodando, 10))
                 //if (!ram.allocateMemory(c.rodando, randomizer.Next(1, 11))) // alocacao dinamica
                 {
                     abortProcess(c.rodando); // se chegou aqui deu ruim e nao tinha memoria
                 }
             }
             c.work();
         }
     }
 }
Example #4
0
 public void sendToQueue(Processo a)
 {
     filaEspera.AddLast(a);
 }