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); } }
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(); } } }
public void sendToQueue(Processo a) { filaEspera.AddLast(a); }