/// <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); } }
public Node(Requisition req) { this.Req = req; this.Next = null; }