/*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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #4
0
        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);
        }