Sistemas de Arquivos
Um sistema de arquivos é o componente do sistema operacional que organiza dados persistentes em arquivos e diretórios nomeados em dispositivos de armazenamento, gerenciando como os dados são dispostos, localizados, protegidos e mantidos consistentes.
Definition
Um sistema de arquivos é o método e as estruturas de dados que um sistema operacional utiliza para armazenar, organizar, nomear, recuperar e proteger dados persistentes em um dispositivo de armazenamento, apresentando arquivos e diretórios a aplicações enquanto gerencia o layout e a consistência no dispositivo.
Scope
Este tópico abrange a abstração e interface de arquivos, estruturas de diretórios, métodos de alocação (contígua, encadeada, indexada) e gerenciamento de espaço livre, estruturas de metadados como inodes, journaling e consistência em caso de falha, e o cache de buffer. Ele trata de como o sistema operacional transforma o armazenamento bruto em um namespace confiável e nomeado. Exclui os próprios dispositivos de armazenamento físico (dispositivos de armazenamento secundário) e o gerenciamento da memória principal do sistema operacional (gerenciamento de memória).
Core questions
- Como os arquivos são nomeados, organizados em diretórios e acessados?
- Como os dados de um arquivo são alocados e localizados no dispositivo de armazenamento?
- Quais metadados o sistema de arquivos mantém e como o espaço livre é gerenciado?
- Como o sistema de arquivos se mantém consistente em caso de falhas?
Key concepts
- abstração e interface de arquivos
- diretórios e namespaces
- inodes e metadados
- métodos de alocação (contígua, encadeada, indexada)
- gerenciamento de espaço livre
- journaling e consistência em caso de falha
- cache de buffer
- controle de acesso e permissões
Key theories
- Consistência em caso de falha
- Como uma falha pode interromper atualizações em várias etapas, os sistemas de arquivos utilizam técnicas como journaling (registrando as alterações pretendidas antes de aplicá-las) ou copy-on-write para garantir que, após uma falha, o sistema de arquivos possa ser restaurado a um estado consistente.
Mechanisms
Um sistema de arquivos mapeia o fluxo de bytes lógico de cada arquivo para blocos no dispositivo, registrando o mapeamento e os atributos em estruturas de metadados, como inodes e diretórios. Os métodos de alocação determinam como os blocos são atribuídos e rastreados, e as estruturas de espaço livre registram os blocos disponíveis. Um cache de buffer mantém blocos usados recentemente na memória, e o journaling ou copy-on-write garante que atualizações interrompidas deixem o sistema de arquivos em um estado recuperável e consistente.
Clinical relevance
Os sistemas de arquivos são a forma como quase todos os dados persistentes são armazenados e recuperados, portanto, seu desempenho e confiabilidade são críticos para bancos de dados, aplicações e usuários. As escolhas de design em torno de metadados, cache e consistência em caso de falha determinam a durabilidade e a recuperação após falhas, e sistemas de arquivos amplamente utilizados, como ext4, NTFS e ZFS, incorporam décadas desses trade-offs.
History
Sistemas de arquivos hierárquicos com diretórios e o modelo de inode foram estabelecidos pelo UNIX por volta de 1970. O Berkeley Fast File System melhorou o layout e o desempenho, e o journaling e os designs log-structured na década de 1990 abordaram a consistência em caso de falha e o desempenho de escrita. Sistemas de arquivos copy-on-write, como ZFS e Btrfs, integraram posteriormente somas de verificação e snapshots para uma integridade mais robusta.
Debates
- Journaling versus copy-on-write para consistência
- O journaling registra as alterações pretendidas antes de aplicá-las, enquanto o copy-on-write escreve novos dados em locais novos e troca atomicamente os ponteiros; cada um oferece consistência em caso de falha com diferentes trade-offs de desempenho, espaço e integridade, e ambos são usados em sistemas modernos.
Key figures
- Ken Thompson
- Dennis Ritchie
- Marshall Kirk McKusick
- Abraham Silberschatz
Related topics
Seminal works
- silberschatz2018
- tanenbaum2014os
Frequently asked questions
- O que é um inode?
- Um inode é uma estrutura de metadados que descreve um arquivo: seu tamanho, propriedade e permissões, carimbos de data/hora e ponteiros para os blocos de armazenamento que contêm seus dados. Os diretórios mapeiam nomes legíveis por humanos para inodes, separando o nome de um arquivo de sua representação no dispositivo.
- Como o journaling protege contra falhas?
- Antes de modificar as estruturas do sistema de arquivos, um sistema de arquivos com journaling registra as alterações pretendidas em um log. Se uma falha interromper a atualização, ao reiniciar, o sistema reproduz ou descarta as alterações registradas, restaurando um estado consistente em vez de deixar o sistema de arquivos corrompido.