/// <summary>
        /// Inserção das requisições na memória seguindo o algoritmo First Fit.
        /// </summary>
        /// <param name="requisicao">Requisição</param>
        /// <returns>Boolean True se a requisição foi inserida com sucesso, False caso falhe.</returns>
        public bool AddFirstFit(Requisition requisicao)
        {
            Node node = new Node(requisicao);

            if (Count() == 1)
            {
                Node atual = Head;
                if (atual.Req.tipoRequisicao == 'I' && atual.Req.getQtdeMemoriaDisponivel() > requisicao.qtdeMemoriaRequisitada)
                {
                    node.Req.enderecoInicialBlocoMemoria  = atual.Req.enderecoInicialBlocoMemoria;
                    node.Req.enderecoFinalBlocoMemoria    = node.Req.enderecoInicialBlocoMemoria + node.Req.qtdeMemoriaRequisitada;
                    atual.Req.enderecoInicialBlocoMemoria = node.Req.enderecoFinalBlocoMemoria;
                    atual.Req.setQtdeMemoriaDisponivel();
                    node.Next = atual;
                    Head      = node;
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                Node atual = Head;
                atual = Head.Next;
                Node anterior = Head;
                while (atual != null)
                {
                    if (anterior.Req.tipoRequisicao == 'I' && anterior.Req.getQtdeMemoriaDisponivel() >= requisicao.qtdeMemoriaRequisitada)
                    {
                        Node nodeAux = CriarNovoNo(anterior.Req);
                        SetRequisicaoUtilizada(anterior.Req, node.Req);
                        Node novoNode = CriarNovoNo(nodeAux.Req);
                        novoNode.Req.enderecoInicialBlocoMemoria = anterior.Req.enderecoFinalBlocoMemoria;
                        novoNode.Req.setQtdeMemoriaDisponivel();

                        novoNode.Next = anterior.Next;
                        anterior.Next = novoNode;
                        return(true);
                    }
                    else if (atual.Next == null)
                    {
                        if (atual.Req.tipoRequisicao == 'I' && atual.Req.getQtdeMemoriaDisponivel() >= requisicao.qtdeMemoriaRequisitada)
                        {
                            Node nodeAux = CriarNovoNo(atual.Req);
                            SetRequisicaoUtilizada(atual.Req, node.Req);

                            node = CriarNovoNo(nodeAux.Req);
                            node.Req.enderecoInicialBlocoMemoria = atual.Req.enderecoFinalBlocoMemoria;
                            node.Req.setQtdeMemoriaDisponivel();
                            node.Next = null;

                            atual.Next = node;
                            return(true);
                        }
                        else
                        {
                            break;
                        }
                    }
                    else
                    {
                        atual    = atual.Next;
                        anterior = anterior.Next;
                    }
                }
                return(false);
            }
        }
Example #2
0
 public Node(Requisition req)
 {
     this.Req  = req;
     this.Next = null;
 }