Sistema de ficheiros
Em computação, sistema de ficheiros (português europeu) ou sistema de arquivos (português brasileiro) é a forma de organização de dados em algum meio de armazenamento de dados em massa, frequentemente feito em discos magnéticos. Ele controla como os dados são armazenados e recuperados, possibilitando ao sistema operacional decodificar os dados armazenados e lê-los ou gravá-los. Sem um sistema de arquivos, as informações colocadas em um meio de armazenamento seriam um grande corpo de dados, sem nenhuma maneira de dizer onde uma parte da informação termina e a próxima começa. Ao separar os dados em pedaços e dar um nome a cada peça, a informação é facilmente isolada e identificada. Tomando seu nome a partir do modo como os sistemas de informação baseados em papel são nomeados, cada grupo de dados é chamado de "arquivo". A estrutura e as regras lógicas usadas para gerenciar os grupos de informações e seus nomes são chamadas de "sistema de arquivos".
Antes do advento dos computadores, o termo sistema de arquivos era usado para descrever um método de armazenamento e recuperação de documentos em papel. Em 1961, o termo estava sendo aplicado ao arquivamento computadorizado ao lado do significado original. Em 1964, já era de uso geral. Fazendo analogias, tal organização assemelha-se a uma biblioteca escolar. O bibliotecário organiza os livros conforme um padrão, cuja busca, convenientemente, procura deixar mais fácil, sem ocupar muitas prateleiras e assegurando a integridade deste. Ainda, certamente, organiza os livros segundo suas características (assunto, censura, etc.). Depois de organizados, ou durante a organização, o bibliotecário cria uma lista com todos os livros da biblioteca, com seus assuntos, localizações e códigos respectivos. Aplicando a analogia à informática, o sistema operacional seria o bibliotecário da "biblioteca de dados" do computador, o disco de armazenamento. Exatamente igual à organização de uma biblioteca, o sistema operacional guarda os dados nos espaços vazios do disco, rotulando-os com um FCB (File Control Block, Bloco de Controle de Arquivo) e ainda criando uma lista com a posição deste dado, chamada de MFT (Master File Table, Tabela de Arquivos Mestre). Sabendo a posição do arquivo a ser aberto/gravado, o sistema operacional solicita a leitura desta, decodifica/codifica e realiza a abertura/gravação do dado.
Um sistema de arquivos consiste em duas ou três camadas. Às vezes, as camadas são explicitamente separadas e, às vezes, as funções são combinadas. O sistema de arquivos lógico é responsável pela interação com o aplicativo do usuário. Ele fornece a interface de programação de aplicações (API) para operações de arquivo - OPEN, CLOSE, READ, etc. e passa a operação solicitada para a camada abaixo para processamento. O sistema de arquivos lógico "gerencia as entradas da tabela de arquivos abertos e os descritores de arquivos por processo." Esta camada fornece "acesso a arquivos, operações de diretório, segurança e proteção". A segunda camada opcional é o sistema de arquivos virtual. "Esta interface permite o suporte para múltiplas instâncias simultâneas de sistemas de arquivos físicos, cada um dos quais é chamado de implementação de sistema de arquivos." A terceira camada é o sistema de arquivos físico. Esta camada está relacionada com o funcionamento físico do dispositivo de armazenamento (por exemplo, disco). Ele processa blocos físicos que estão sendo lidos ou gravados. Ele lida com o gerenciamento de buffer e de memória e é responsável pelo posicionamento físico de blocos em locais específicos no meio de armazenamento. O sistema de arquivos físico interage com os drivers de dispositivo ou com o canal para controlar o dispositivo de armazenamento.
Gerenciamento de espaço
Observação: isto aplica-se somente a sistemas de arquivos usados em dispositivos de armazenamento. Os sistemas de arquivos alocam o espaço de maneira granular, geralmente várias unidades físicas no dispositivo. O sistema de arquivos é responsável por organizar os arquivos e diretórios e manter o controle de quais áreas da mídia pertencem a qual arquivo e quais não estão sendo usadas. Por exemplo, no Apple DOS do início dos anos 80, os setores de 256 bytes em disquetes de 140 kilobytes usavam um mapa de trilha/setor. Isso resulta em espaço não utilizado quando um arquivo não é um múltiplo exato da unidade de alocação, às vezes referido como espaço de folga. Para uma alocação de 512 bytes, o espaço médio não utilizado é de 256 bytes. Para clusters de 64 KB, o espaço médio não utilizado é de 32 KB. O tamanho da unidade de alocação é escolhido quando o sistema de arquivos é criado. Escolher o tamanho da alocação com base no tamanho médio dos arquivos que se espera estar no sistema de arquivos pode minimizar a quantidade de espaço inutilizável. Frequentemente, a alocação padrão pode fornecer uso razoável. Escolher um tamanho de alocação que seja muito pequeno resulta em sobrecarga excessiva se o sistema de arquivos contiver arquivos na maioria muito grandes.
Nomes de arquivo
Um nome de arquivo é usado para identificar uma localização de armazenamento no sistema de arquivos. A maioria dos sistemas de arquivos possuem restrições de comprimento de nomes de arquivo. Em alguns sistemas de arquivos, nomes de arquivos não são sensíveis a caixa (isto é, os nomes MEUARQUIVO e meuarquivo referem-se ao mesmo arquivo), em outros, os nomes de arquivos são sensíveis a caixa (isto é, os nomes MEUARQUIVO, MeuArquivo e meuarquivo referem-se a três arquivos separados). A maioria dos sistemas de arquivos modernos permitem que nomes de arquivos contenham uma grande variedade de caracteres do conjunto de caracteres Unicode. Entretanto, eles podem possuir restrições no uso de certos caracteres especiais, impedindo-os de serem usados dentro de nomes de arquivos. Esses caracteres podem ser usados para indicar um dispositivo, tipo de dispositivo, prefixo de diretório, separador de caminho de arquivo ou tipo de arquivo.
Diretórios
Os sistemas de arquivos geralmente possuem diretórios (também chamados de pastas) que permitem ao usuário agrupar arquivos em coleções separadas. Isso pode ser implementado associando o nome do arquivo a um índice em uma tabela de conteúdos ou a um inode em um sistema de arquivos do tipo Unix. As estruturas de diretórios podem ser planas (ou seja, lineares) ou permitir hierarquias nas quais os diretórios podem conter subdiretórios. O primeiro sistema de arquivos a suportar hierarquias arbitrárias de diretórios foi usado no sistema operacional Multics. Os sistemas de arquivos nativos de sistemas semelhantes ao Unix também suportam hierarquias de diretórios arbitrários, como, por exemplo, o Hierarchical File System da Apple e seu sucessor HFS+ no Mac OS clássico, o sistema de arquivos FAT no MS-DOS 2.0, e versões posteriores, e no Microsoft Windows, o sistema de arquivos NTFS na família Windows NT de sistemas operacionais e o ODS-2 (On-Disk Structure-2) e níveis mais altos do sistema de arquivos Files-11 no OpenVMS.
Metadados
Outras informações de escrituração contábil normalmente são associadas a cada arquivo dentro de um sistema de arquivos. O comprimento dos dados contidos em um arquivo pode ser armazenado como o número de blocos alocados para o arquivo ou como uma contagem de bytes. A hora em que o arquivo foi modificado pela última vez pode ser armazenada como o registro de data e hora do arquivo. Os sistemas de arquivos podem armazenar o horário de criação do arquivo, a hora em que ele foi acessado pela última vez, a hora em que os metadados do arquivo foram alterados ou a hora em que o arquivo foi copiado pela última vez. Outras informações podem incluir o tipo de dispositivo do arquivo (por exemplo, bloco, caractere, soquete, subdiretório etc.), seu ID de usuário e ID de grupo de proprietário, suas permissões de acesso e outros atributos de arquivo (por exemplo, se o arquivo é somente leitura, executável, etc.).
Sistema de arquivos como uma interface abstrata de usuário
Em alguns casos, um sistema de arquivos pode não fazer uso de um dispositivo de armazenamento, mas pode ser usado para organizar e representar o acesso a qualquer dado, seja armazenado ou gerado dinamicamente (por exemplo, procfs).
Utilitários
Os sistemas de arquivos incluem utilitários para inicializar, alterar parâmetros e remover uma instância do sistema de arquivos. Alguns incluem a capacidade de estender ou truncar o espaço alocado para o sistema de arquivos. Os utilitários de diretório podem ser usados para criar, renomear e excluir entradas de diretório, que também são conhecidas como dentries (singular: dentry), e para alterar metadados associados a um diretório. Os utilitários de diretório também podem incluir recursos para criar links adicionais para um diretório (hard links no Unix), para renomear links pai (".." em sistemas operacionais tipo Unix), e para criar links bidirecionais para arquivos.
Os tipos de sistemas de arquivos podem ser classificados em sistemas de arquivos de disco/fita, sistemas de arquivos de rede e sistemas de arquivos de propósito especial. Um sistema de arquivos compartilhado é aquele no qual uma quantidade de máquinas (normalmente servidores) possuem acesso ao mesmo subsistema de isco externo (normalmente um SAN). O sistema de arquivos arbitra acesso a este subsistema, prevenindo colisões de escrita. Exemplos incluem o GFS2 da Red Hat, o GPFS da IBM, o SFS da DataPlow, o CXFS da SGI e o StorNext da Quantum Corporation. Um sistema de arquivos especial apresenta elementos não-arquivos de um sistema operacional como se fossem arquivos, para que possam ser acionados usando as APIs do sistema de arquivos. Isso é mais comumente feito em sistemas operacionais do tipo Unix, mas os dispositivos recebem nomes de arquivos em alguns sistemas operacionais não baseados em Unix também.
Sistemas de arquivos de disco
Um sistema de arquivos de disco aproveita a capacidade da mídia de armazenamento em disco para endereçar dados aleatoriamente em um curto período de tempo. Considerações adicionais incluem a velocidade de acesso aos dados após a solicitação inicial e a antecipação de que os dados seguintes também podem ser solicitados. Isso permite que vários usuários (ou processos) acessem vários dados no disco sem considerar a localização sequencial dos dados. Exemplos incluem FAT (FAT12, FAT16, FAT32), exFAT, NTFS, HFS e HFS+, HPFS, APFS, UFS, ext1, ext2, ext3, ext4, XFS, btrfs, ISO 9660, Files-11, Veritas File System, VMFS, ZFS, ReiserFS e UDF. Alguns sistemas de arquivos em disco são sistemas de arquivos de registro ou sistemas de arquivos de controle de versão.
Sistemas de arquivos de flash
Um sistema de arquivos de flash considera as habilidades especiais, o desempenho e as restrições dos dispositivos de memória flash. Freqüentemente, um sistema de arquivos em disco pode usar um dispositivo de memória flash como a mídia de armazenamento subjacente, mas é muito melhor usar um sistema de arquivos projetado especificamente para um dispositivo flash.
Sistemas de arquivos de fita
Um sistema de arquivos de fita é um sistema de arquivos e um formato de fita projetado para armazenar arquivos em fita em uma forma autodescritiva. As fitas magnéticas são mídias de armazenamento sequenciais com tempos de acesso a dados aleatórios significativamente maiores do que os discos, o que representa desafios para a criação e gerenciamento eficiente de um sistema de arquivos de uso geral. Em um sistema de arquivos em disco, geralmente há um diretório de arquivos mestre e um mapa de regiões de dados usadas e livres. Quaisquer adições, alterações ou remoções de arquivos exigem a atualização do diretório e dos mapas usados/livres. O acesso aleatório às regiões de dados é medido em milissegundos, portanto, esse sistema funciona bem para discos.
Sistemas de arquivos de banco de dados
Outro conceito para gerenciamento de arquivos é a ideia de um sistema de arquivos baseado em banco de dados. Em vez de, ou além do gerenciamento estruturado hierárquico, os arquivos são identificados por suas características, como tipo de arquivo, tópico, autor ou metadados ricos semelhantes. O IBM DB2 para i (anteriormente conhecido como DB2/400 e DB2 para i5/OS) é um sistema de arquivos de banco de dados como parte do sistema operacional IBM i baseado em objetos (anteriormente conhecido como OS/400 e i5/OS), incorporando um armazenamento de nível único e rodando no IBM Power Systems (anteriormente conhecido como AS/400 e iSeries), projetado por Frank G. Soltis, ex-cientista-chefe da IBM para o IBM i. Por volta de 1978 a 1988, Frank G. Soltis e sua equipe da IBM Rochester projetaram e aplicaram com sucesso tecnologias como o sistema de arquivos de banco de dados, onde outros, como a Microsoft, mais tarde não conseguiram realizar. Essas tecnologias são informalmente conhecidas como 'Fortress Rochester' e eram, em alguns aspectos básicos, estendidas desde as primeiras tecnologias de mainframe, mas de muitas maneiras, mais avançadas do ponto de vista tecnológico.
Sistemas e arquivos transacionais
Alguns programas precisam atualizar vários arquivos "todos de uma vez". Por exemplo, uma instalação de software pode escrever binários de programas, bibliotecas e arquivos de configuração. Se a instalação do software falhar, o programa poderá ficar inutilizável. Se a instalação estiver atualizando um utilitário de sistema principal, como o shell de comando, todo o sistema poderá ficar inutilizável. O processamento de transações introduz a garantia de isolamento, que afirma que as operações dentro de uma transação estão ocultas de outros encadeamentos no sistema até que a transação seja confirmada e que as operações interferentes no sistema sejam serializadas corretamente com a transação. As transações também fornecem a garantia de atomicidade, garantindo que as operações dentro de uma transação sejam todas comprometidas ou que a transação possa ser abortada e o sistema descarte todos os seus resultados parciais. Isso significa que, se houver um travamento ou falha de energia, após a recuperação, o estado armazenado será consistente. O software será completamente instalado ou a instalação com falha será completamente revertida, mas uma instalação parcial não utilizável não será deixada no sistema.
Sistemas de arquivos de rede
Um sistema de arquivos de rede é um sistema de arquivos que atua como um cliente para um protocolo de acesso remoto a arquivos, fornecendo acesso a arquivos em um servidor. Os programas que usam interfaces locais podem criar, gerenciar e acessar de forma transparente diretórios e arquivos hierárquicos em computadores conectados em rede remota. Exemplos de sistemas de arquivos de rede incluem clientes para os protocolos NFS, AFS, SMB e clientes semelhantes a sistemas de arquivos para FTP e WebDAV.
Muitos sistemas operacionais incluem suporte para mais de um sistema de arquivos. Às vezes, o sistema operacional e o sistema de arquivos estão tão entrelaçados que é difícil separar as funções do sistema de arquivos. É necessário que haja uma interface fornecida pelo software do sistema operacional entre o usuário e o sistema de arquivos. Essa interface pode ser textual (como fornecida por uma interface de linha de comando, como o shell do Unix ou o OpenVMS DCL) ou gráfica (como fornecida por uma interface gráfica do usuário, como navegadores de arquivos). Se gráfica, a metáfora da pasta, contendo documentos, outros arquivos e pastas aninhadas, é freqüentemente usada (veja também: diretório e pasta).
Sistemas operacionais Unix e do tipo Unix
Sistemas operacionais do tipo Unix criam um sistema de arquivos virtual, o que faz com que todos os arquivos em todos os dispositivos pareçam existir em uma única hierarquia. Isso significa que, nesses sistemas, existe um diretório raiz e cada arquivo existente no sistema está localizado em algum lugar. Esses sistemas podem usar um disco RAM ou um recurso compartilhado de rede como seu diretório raiz. Sistemas do tipo Unix atribuem um nome de dispositivo a cada dispositivo, mas não é assim que os arquivos desse dispositivo são acessados. Em vez disso, para obter acesso a arquivos em outro dispositivo, o sistema operacional deve primeiro ser informado de onde, na árvore de diretórios, esses arquivos devem aparecer. Esse processo é chamado de montagem de um sistema de arquivos. Por exemplo, para acessar os arquivos em um CD-ROM, deve-se informar ao sistema operacional "Retire o sistema de arquivos deste CD-ROM e faça-o aparecer em tal diretório". O diretório fornecido ao sistema operacional é chamado de ponto de montagem - pode, por exemplo, ser /media. O diretório /media existe em muitos sistemas Unix (conforme especificado no Filesystem Hierarchy Standard) e destina-se especificamente para uso como um ponto de montagem para mídia removível, como CDs, DVDs, drives USB ou disquetes. Pode estar vazio ou pode conter subdiretórios para montar dispositivos individuais. Geralmente, apenas o administrador (ou seja, usuário root) pode autorizar a montagem de sistemas de arquivos.
Microsoft Windows
O Windows faz uso dos sistemas de arquivos FAT, NTFS, exFAT, Live File System e ReFS (o último deles é suportado e utilizável apenas no Windows Server 2012, no Windows Server 2016, no Windows 8, no Windows 8.1 e no Windows 10. O Windows não pode ser inicializado a partir dele). O Windows usa uma abstração de letra de unidade no nível de usuário para distinguir um disco ou partição de outro. Por exemplo, o caminho C:\WINDOWS representa um diretório WINDOWS na partição representada pela letra C. A unidade C: é mais comumente usada para a partição primária da unidade de disco rígido, na qual o Windows é normalmente instalado e a partir do qual é inicializado. Essa "tradição" tornou-se tão firmemente enraizada que existem erros em muitas aplicações que fazem suposições de que a unidade em que o sistema operacional está instalado é a C. O uso de letras de unidade e a tradição de usar "C" como letra de a partição da unidade de disco rígido principal, pode ser rastreada para o MS-DOS, onde as letras A e B foram reservadas para até duas unidades de disquete. Isso, por sua vez, derivou do CP/M na década de 1970 e, em última instância, do CP/CMS da IBM de 1967.
Um arquivo possui certos atributos que variam de um sistema operacional para o outro, mas que normalmente são os seguintes: A informação sobre todos os arquivos é conservada na estrutura do diretório que também reside em memória secundária. A entrada de um diretório consiste no nome do arquivo com seu identificador único. O identificador, por sua vez, permite localizar os demais atributos do arquivo. O registro desta informação para cada arquivo pode ocupar mais que um kilobyte. Em um sistema com muitos arquivos o tamanho do próprio diretório pode ocupar megabytes. Como os diretórios, da mesma forma que os arquivos, devem ser não voláteis, precisam ser armazenados em dispositivos e conduzidos à memória gradativamente, conforme necessário.
Um arquivo é um tipo abstrato de dados. Para definir apropriadamente um arquivo, precisamos considerar as operações que podem ser realizadas sobre arquivos. O sistema operacional pode oferecer chamadas de sistema para criar, gravar, ler, reposicionar, apagar e truncar arquivos. O sistema operacional deve fazer em relação a cada uma das seis operações de arquivos básicas.
Do ponto de vista de projeto, as camadas do sistema de arquivos podem ser entendidas conforme a hieraquia abaixo: Cada camada possui características/funcionalidades específicas.


