/*public bool fitIn(LinkedList<pagina> importantes,pagina inserting) * { * LinkedList<pagina> naoNecessarias = new LinkedList<pagina>(); * foreach(pagina page in paginas) * { * if (!importantes.Contains(page)) * { * naoNecessarias.AddLast(page); * } * } * if(naoNecessarias.Count ) * }*/ public particao searchSmaller(int tamanho) { particao smaller = null; foreach (pagina page in paginas) { particao a = page.searchSmaller(tamanho); if (a == null) { continue; } else if (a.tamanho == tamanho) { return(a); } else { if (smaller == null) { smaller = a; } else if (smaller.tamanho > a.tamanho && a.tamanho > tamanho) { smaller = a; } } } return(smaller); }
public particao mold(particao W, int tamanhoDesejado) { particao moldada = new particao(ram, hd, escalonador, W.tamanho - tamanhoDesejado, Convert.ToString(++identificadorProxParticao), this); W.paginaPai.particoes.AddAfter(W.paginaPai.particoes.Find(W), moldada); W.tamanho = tamanhoDesejado; W.molded = true; return(W); }
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 particao searchSmaller(int tamanho) { particao smaller = null; foreach (particao part in particoes) { if (part.usando == null) { if (part.tamanho == tamanho) { return(part); } else if (smaller == null && part.tamanho > tamanho) { if (!part.molded) { return(mold(part, tamanho)); } else { smaller = part; } } else if ((part.tamanho > tamanho) && (part.tamanho < smaller.tamanho)) { if (part.molded) { smaller = part; } else { return(mold(part, tamanho)); } } } } return(smaller); }