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.
| 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.
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.
- 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.
- hash oferece acesso
O(1)médio em memória, sem ordenação; - BST simples oferece busca média
O(log n), mas pior casoO(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.
Persistir int, long ou size_t pela representação nativa acopla o arquivo a ABI e endianness. Um formato durável deve declarar:
- magic number e versão;
- inteiros de largura fixa;
- ordem de bytes;
- tamanho máximo de registro;
- checksum ou detecção de truncamento;
- política de encoding para texto.
O conjunto mistura estilos:
- TP I/II e LAB05 usam principalmente
string,vectore 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.
Clone com submódulos:
git clone --recurse-submodules https://github.com/jotavsevla/OSA-projects.git
cd OSA-projects
git submodule update --init --recursiveCada submódulo tem seu próprio comando de compilação no README. O hub não fornece um build monolítico.
- corrigir ownership e invariantes de LAB06/LAB07;
- consolidar as duas cópias da Árvore B ou documentar sua diferença;
- validar comprimentos e streams em todos os leitores binários;
- versionar o formato de arquivo;
- adicionar datasets mínimos e testes de round-trip;
- criar CI que compile cada módulo com warnings e sanitizers;
- manter o hub e o portfólio alinhados aos repositórios reais.
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.