ChrisOS Research ProjectOperating systems · language systems · graphics · machine emulation
DOCUMENTATION ARCHIVEMAIN BRANCH
ChrisOS/ChrisFS: estruturas on-disk, alocação e journal

ChrisFS: estruturas on-disk, alocação e journal

Papel do filesystem

Filesystem transforma um array de blocos em objetos persistentes nomeados, diretórios, metadata e regras de alocação. Correção precisa sobreviver aos limites de shutdown e às falhas cobertas pelo modelo de consistência.

ChrisFS é o filesystem nativo do workspace e instalação.

Superbloco

Superblock descreve geometria e versão. A fonte atual possui generation, clean flag, journal, total sectors, bitmap, inode region e data region.

Encoder grava campos little-endian de largura fixa e checksum. Decoder valida magic, versão, sector size, checksum e geometria antes de confiar nos offsets.

Geometria dinâmica

cfs_geom_for_count calcula bitmap conforme total de setores mantendo inode/journal fixos. Volume de 512 MiB preserva posições compatíveis com v4, enquanto volumes maiores suportados podem ampliar bitmap.

Inodes

Inode guarda tipo, tamanho, generation, ponteiros de dados, identidade/permissões e tempo.

O formato atual contém direct, indirect, double-indirect e triple-indirect.

inode
 ├── direct
 ├── indirect -> pointers
 ├── double -> pointers -> pointers
 └── triple -> três níveis

Diretórios e paths

Dirent associa nome a inode e tipo. Path resolution divide componentes e os procura em diretórios. Validação de nomes e profundidade é parte da segurança do parser de caminho.

Bitmap e alloc_hint

Bitmap registra unidades livres/ocupadas. alloc_hint evita reiniciar toda busca no começo, o que anteriormente tornava cópias grandes muito caras durante instalação.

Cache e journal

Cfs contém cache de setores com contadores de hit/miss. Journal fornece begin/log/commit/replay. Journal define uma política de transação; não significa ausência universal de corrupção.

A ordem entre escrita do log, commit e aplicação final determina recuperação após mount não limpo.

Locking

ChrisFS usa lock yielding e reentrante, com identidade por CPU no kernel. Não deve ser tomado em interrupt handler.

Permissões e fsck

O formato define bits read/write/execute/walk. cfs_fsck verifica invariantes cruzadas de metadata, ranges, alocação e estrutura.

Evolução de formato

Formato de filesystem é ABI persistente. Alterar struct C não basta. Encode/decode explícitos evitam depender de padding, alinhamento ou layout do compilador e tornam compatibilidade/migração decisões conscientes.

Registro do documento ID: chrisfs Reviewed source: da3df29cb397 Class: technical-chapter