Skip to content

About

Hub dos projetos de Organização de Sistemas de Arquivos: serialização, packing, Árvore B, índices primário e invertido e motor de busca.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

Organização em Sistemas de Arquivos

Hub acadêmico que correlaciona os laboratórios e trabalhos da disciplina de Organização em Sistemas de Arquivos: representação de registros, persistência binária, acesso por offset, índices e recuperação de informação.

O mapa abaixo foi revisado contra o conteúdo real das branches principais. Ele corrige descrições históricas que trocavam o papel de LAB05 e LAB07.

Mapa dos repositórios

Módulo Conteúdo verificável Estado da auditoria
TP I packing binário de registro de tamanho fixo build e execução validados; formato nativo não portável
TP II registros variáveis por delimitador ou descritor build e execução validados; comprimentos precisam de limites
LAB04 livros binários + índice id → offset em BST ownership normal libera nós; BST pode degenerar
LAB05 motor de busca com índice primário e invertido RAII no núcleo; desserialização e caminhos precisam de validação
LAB06 Árvore B parametrizada defeitos conhecidos de bounds/dupla liberação
LAB07 segunda cópia/iteração da Árvore B não é motor de busca; mesmos riscos do LAB06

Os READMEs de cada módulo registram comandos, complexidade e preocupações específicas.

Encadeamento conceitual

registro lógico
  ├── tamanho fixo (TP I)
  └── variável: delimitador/descritor (TP II)
           ↓
arquivo binário + offset (LAB04)
           ├── BST em memória
           └── índice primário
                  ↓
        Árvore B balanceada (LAB06/LAB07, ainda a corrigir)
                  ↓
      índice invertido + recuperação (LAB05)

Os números dos laboratórios refletem a história das entregas, não necessariamente uma progressão linear. O hub organiza os conceitos sem fingir que todo módulo consome diretamente o código do anterior.

Conceitos e trade-offs

Registros fixos e variáveis

  • tamanho fixo simplifica cálculo de offset, mas desperdiça espaço e trunca campos;
  • delimitadores são legíveis, mas exigem escape quando aparecem no conteúdo;
  • descritores permitem saltar registros, porém precisam validar tamanho, versão e corrupção.

Índices

  • hash oferece acesso O(1) médio em memória, sem ordenação;
  • BST simples oferece busca média O(log n), mas pior caso O(n);
  • Árvore B mantém altura O(log_t n) e é adequada a páginas/blocos, desde que suas invariantes e ownership estejam corretos;
  • índice invertido transforma termo → documentos, mas cresce com todas as ocorrências e exige estratégia de ordenação/compressão.

Formato binário

Persistir int, long ou size_t pela representação nativa acopla o arquivo a ABI e endianness. Um formato durável deve declarar:

  1. magic number e versão;
  2. inteiros de largura fixa;
  3. ordem de bytes;
  4. tamanho máximo de registro;
  5. checksum ou detecção de truncamento;
  6. política de encoding para texto.

Memória e segurança

O conjunto mistura estilos:

  • TP I/II e LAB05 usam principalmente string, vector e mapas com RAII;
  • LAB04 aloca nós manualmente, mas possui destruição recursiva;
  • LAB06/LAB07 têm propriedade duplicada de filhos e operações que transferem ponteiros sem atualizar o dono, podendo causar double free e ponteiros pendentes.

Para os módulos com árvores:

make clean
make CXXFLAGS="-Wall -Wextra -std=c++11 -Iinclude -fsanitize=address,undefined"

Sanitizers detectam parte dos defeitos, mas testes de invariantes continuam necessários.

Usar este hub

Clone com submódulos:

git clone --recurse-submodules https://github.com/jotavsevla/OSA-projects.git
cd OSA-projects
git submodule update --init --recursive

Cada submódulo tem seu próprio comando de compilação no README. O hub não fornece um build monolítico.

Prioridades de evolução

  1. corrigir ownership e invariantes de LAB06/LAB07;
  2. consolidar as duas cópias da Árvore B ou documentar sua diferença;
  3. validar comprimentos e streams em todos os leitores binários;
  4. versionar o formato de arquivo;
  5. adicionar datasets mínimos e testes de round-trip;
  6. criar CI que compile cada módulo com warnings e sanitizers;
  7. manter o hub e o portfólio alinhados aos repositórios reais.

Contexto

Código desenvolvido para fins acadêmicos. O hub é a porta de entrada recomendada no perfil do GitHub, enquanto os módulos preservam a análise detalhada.

About

Hub dos projetos de Organização de Sistemas de Arquivos: serialização, packing, Árvore B, índices primário e invertido e motor de busca.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors