Mapa genérico

Este projeto faz parte do PPOS v2.

O núcleo do SO gerencia diversos objetos para os programas do usuário, como arquivos aberto, threads, semáforos, etc. O programa acessa esses objetos através identificadores únicos (Unique IDentifiers - UIDs), geralmente números inteiros positivos, gerados pelo núcleo quando o objeto é criado.

Este projeto visa construir uma pequena biblioteca em C com operações básicas para gerenciar mapas de objetos, que associam ponteiros de objetos a UIDs inteiros. O mapa a ser implementado é genérico, ou seja, é um mapa de ponteiros void * para inteiros, onde cada elemento é um ponteiro para um dado cujo tipo não é conhecido pela biblioteca. O mapa não armazena os dados, mas somente os ponteiros para eles.

Um mapa de tamanho SIZE registra cada objeto sob um identificador único (UID), que varia entre 0 e SIZE-1 de forma crescente (0, 1, 2, …). Ao registrar um novo objeto deve ser usado o próximo UID livre, com comportamento circular caso não existam mais UIDs livres no final do mapa.

Mapa genérico

As principais operações em um mapa são:

  • map_create: cria um novo mapa (vazio)
  • map_destroy: destrói um mapa (mas não destrói os objetos em si; o responsável por destruí-los é quem os criou)
  • map_put: adiciona um objeto ao mapa e retorna um UID
  • map_get: informa o objeto associado a um UID
  • map_del: retira o objeto do mapa e libera o seu UID
Esta biblioteca será utilizada em vários outros projetos, portanto capriche na sua implementação!

Os arquivos necessários a este projeto estão em tad-vazio.tgz:

  • map.h : interface da biblioteca
  • map.c : implementação da biblioteca (a implementar)
  • testa-map.c : programa de teste
  • testa-map.txt : saída esperada do programa de teste
  • makefile : para a compilação

Os seguintes requisitos devem ser atendidos:

  • A implementação deve ser feita em C no padrão C99 no arquivo map.c.
  • Com exceção de map.c, os arquivos fornecidos não devem ser alterados.
  • O código deve funcionar corretamente com o programa de teste.
  • A saída do programa de teste deve ser igual à saída esperada (veja make test).
O processo de correção substitui os arquivos do projeto pelas versões originais, com exceção da implementação do aluno em map.c. Assim, alterações feitas nos demais arquivos serão destruídas.

Envie somente o arquivo map.c através do Moodle.

  • Dependências:
    • Conhecimento da linguagem C.
  • ppos-v2/mapa_generico.txt
  • Última modificação: 2026/07/29 20:46
  • por maziero