Skip to content

JulianaZambon/basic-Software

Repository files navigation

Basic Software

Alocador de Memória Personalizado

Este projeto foca na implementação de um alocador de memória em linguagem Assembly, seguindo os princípios e desafios apresentados no livro Execução de Programas: Como funcionam carregadores, ligadores e interpretadores de Bruno Müller Junior. O objetivo é desenvolver um gerenciador de heap que otimize a alocação e desalocação de memória, além de fornecer uma visualização detalhada do seu estado.

Seção 6.1 – Implementação do Algoritmo 6.3

Implemente o algoritmo proposto na Seção 6.1.2 do livro
Execução de Programas: Como funcionam carregadores, ligadores e interpretadores — Bruno Müller Junior, em linguagem Assembly.

Abaixo, o programa original em C correspondente ao Algoritmo 6.3, que imprime os endereços de alocações sucessivas:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv) {
    void *a;
    int i;

    for (i = 0; i < 100; i++) {
        a = malloc(100);
        strcpy(a, "TESTE");
        printf("%p %s\n", a, (char *)a);
        free(a);
    }

    return 0;
}

Seção 6.2 – Variações do Gerenciador de Memória

Implemente as seguintes variações no gerenciador de memória:

  • a) Faça a fusão de nós livres.
  • d) Utilize duas listas separadas:
    • Uma lista com os nós livres.
    • Uma lista com os nós ocupados.

O livro apresenta problemas graves como: "se os nós livres puderem ser divididos quando o tamanho for menor que o tamanho do bloco, podem ser criados vários nós de tamanho muito pequeno. Se forem muitos nós pequenos, podem ser criados muitos “buracos” na heap, o que é chamado fragmentação."

Sugestões do livro: "criar duas listas ligadas, uma contendo somente os nós livres e outra contendo somente os nós ocupados."

Seção 6.4 – Impressão do Mapa da Memória

Implemente um procedimento que imprime um mapa da região da heap. As regras de exibição são:

  • Cada byte da parte gerencial do nó deve ser impresso com o caractere: #
  • Os bytes do bloco de dados devem ser impressos conforme o estado:
    • Se estiver livre, use o caractere: -
    • Se estiver ocupado, use o caractere: +

Instruções de Compilação e Execução

Para compilar e testar o alocador, siga os passos abaixo no terminal:

  1. Compile o arquivo assembly: nasm -f elf64 alocador.asm -o alocador.o

  2. Compile o código C e o objeto assembly: gcc -no-pie avalia.c alocador.o -o meuAlocador_teste

  3. Execute o programa e direcione a saída para um arquivo: meuAlocador_teste > saida.txt