Todos os programas precisam armazenar e recuperar dados. Os processos não podem armazenar grande quantidade de dados no seu espaço de endereçamento. Quando o processo chega ao final os dados no seu espaço se perdem. Precisamos que vários processos acessem os mesmos dados.
A solução é utilizar um meio de armazenamento chamado arquivos. Para criar arquivos é preciso informar um nome: No MS-DOS os nomes eram limitados a 8 caracteres. Nos S.O atuais podem ter até 255 caracteres.
Estrutura dos arquivos: Sequência de bytes O S.O não se importa com o conteúdo do arquivo. O significado deve ser dado pelo programa do usuário. Sequência de registros Arquivos são uma sequência de registros. Esses registros possuem tamanho fixo. Operação de leitura/escrita sobrepõe ou anexa um registro.
Árvore de registros: Cada registro contém um campo chave. A árvore é ordenada pelo campo chave. Facilita a busca por um registro dentro do arquivo.
Além do arquivo guardar o nome e os dados, ele pode associar informações como: Data e hora de criação. Tamanho do arquivo. Esses itens são chamados atributos.
Diretórios: Pode conter centenas de arquivos ou nenhum arquivo. Pode conter outros diretórios. A diferença do arquivo é que ele mantém uma tabela de ponteiros para outros arquivos/diretórios.
Nomes de caminhos: Caminho absoluto: Formado pelo caminho entre o diretório raiz e o arquivo. Caminho relativo: Formado pelo caminho entre o diretório atual e o arquivo.
Sistema de arquivos: Um disco rígido pode ser dividido em uma ou mais partições. Todo disco possui um setor 0 que chamamos de MBR (master boot record), que é utilizado para iniciar o computador. O BIOS lê e executa o setor 0 do disco em busca de uma partição ativa.
Esquema de partição de disco: Superbloco: fornece informações tais como: identificação do sistema de arquivos, número de blocos do sistema de arquivos etc. Blocos livres: informa a quantidade de blocos livres no sistema. I-nodes: uma estrutura de dados com informações sobre os arquivos. Diretório raiz: contem o topo da árvore de diretórios. Arquivos e pastas: conteúdo propriamente dito.
Estrutura geral de uma partição do disco.
Questão: Como é feito o controle de quais blocos do disco estão relacionados com quais arquivos? Em outras palavras, como os arquivos são gravados e distribuídos entre os blocos? Métodos de gravação: Alocação contínua. Alocação por lista encadeada. I-nodes
Alocação contínua: Consiste em armazenar cada arquivo em blocos contíguos. Implementação simples. Para localizar um arquivo basta saber o endereço do primeiro bloco e o número de blocos do arquivo. Bom desempenho para leitura. Desvantagem que o disco fica fragmentado.
Alocação por lista encadeada: Os arquivos são armazenados em blocos lincados. Os primeiros bits de cada bloco é o ponteiro para o próximo bloco. Não acontece fragmentação. Acesso aleatório lento, pois os blocos tem que ser lidos um de cada vez até chegar no arquivo desejado.
Tabela de alocação
I-node Estrutura de dados (pequena tabela) que mantém informações e os endereços de disco dos blocos do arquivo. A principal diferença da tabela de alocação é que apenas o i-node fica na memória apenas quando o arquivo está em uso.
Esquema de um I-node
Confiabilidade dos sistemas de arquivos: O sistema de arquivos pode ser danificados por vários motivos: Queda de energia. HD defeituoso. Erro de software. Deve-se possuir copias de segurança. Cópia física. Cópia lógica.
Exemplos de sistemas de arquivos: CD-Rom: ISO 9660: produzido com limitações para atender alguns sistemas operacionais (MS-DOS) Estendido para Joliet : Nome de arquivos longos. Conjuntos de caracteres Unicode. Diretório com profundidade maior que 8 níveis.
Exemplos de sistemas de arquivos: Windows: NTFS: até 16 TB.
Exemplos de sistemas de arquivos: Linux: ext-2: 16 TB ext-3: 16 TB com journaling. ReiserFS: 16 TB com journaling. JFS: 4 PT (petabytes) com journaling. XFS: 16 EX (exabytes) com journaling. Journaling: é um log que o SO faz antes de escrever qualquer dado no disco.