Resumos dos capítulos :::

Sistema de Arquivos

 

  1. Introdução

  2. Funcões

  3. Proteção

  4. Nomes e endereços

Os tópicos a serem examinados podem ser encontrados nos seguintes capítulos de livros:

  1. Modern Operating Systems, Tanenbaum, cap. 4

  2. Operating Systems Concepts, Peterson/Silberschatz, cap. 10

  3. Outros bons livros de sistemas operacionais, nos capítulos sobre sistema de arquivos

1. Introdução

O sistema de arquivos é o módulo responsável, dentro do SO, pelo gerenciamento do conteúdo dos discos do sistema. Esse gerenciamento inclui tanto o controle de acesso aos mesmos (seguranca), como o controle da localização e manuseio dos conteúdos de cada arquivo.

Aqui não examinaremos os aspectos relativos à seguranca do sistema, que foram apresentados no capítulo anterior. Com isso nos concentraremos mais nos aspectos relativos aos arquivos propriamente ditos, iniciando esse estudo pela definição das funcões do sistema de arquivos.

Uma última observação é que vários dos conceitos examinados aqui podem ser mapeados para os mecanismos de gerenciamento de memória (próximo capítulo), uma vez que este se ocupa também de controlar a localização e o acesso aos dados contidos na memória.

2. Funcões

Como dito acima, as funcões de um sistema de arquivos se concentram no controle dos arquivos em disco. Dentro desse cenário as principais funcões por ele desempenhadas são:

  1. Proteção

  2. Mapeamento de nomes

  3. Endereçamento

  4. Seguranca

  5. Contabilidade

Dessas funcões examinaremos aqui as três primeiras. A função de seguranca foi examinada no capítulo anterior e faz, como foi visto, o servico de autenticação de usuários e de controle de permissões.

Já a função de contabilidade não diz respeito especificamente aos arquivos. Ela é normalmente incluída dentro do sistema de arquivos por não se encaixar em nenhum outro módulo do SO e por ser mais fácil executar os servicos de contabilidade (quem usou o sistema, por quanto tempo, fazendo o que, etc.) a partir dos arquivos (textos, aplicativos, comandos) acessados. Em geral os servicos de contabilidade incluem a geração de arquivos de registro (logs) sobre os eventos ocorridos no sistema e estão voltando a ter mais presença com a introdução de ambientes de nuvem (cloud computing) e de hospedagem, em que se paga pelos recursos utilizados.

3. Proteção

O servico de proteção é muitas vezes confundido com o de seguranca. A principal distinção a ser feita entre os dois é que seguranca se ocupa primordialmente com acessibilidade, enquanto proteção cuida de integridade (ou consistência) dos arquivos. Com esse foco a proteção de arquivos em um sistema deve se preocupar com dois tipos de falha: aquela que corrompe grande parte dos arquivos (falha de disco) e aquela que corrompe um arquivo de forma individual (falha de gravação).

Nas falhas de disco temos, normalmente, algum tipo de erro que torna o disco ilegível. Problemas desse tipo ocorrem, em geral, por falhas de energia elétrica, crashs de disco, etc. A solução para os mesmos é o uso intenso e cuidadoso de backups, incluindo-se o armazenamento desses backups em locais fisicamente distantes dos discos originais (evitando que se perca simultaneamente o disco e seu backup num incêndio, por exemplo).

Um sistema decente deve fornecer dois tipos de backup ao seu administrador, que são os backups físico e lógico. No primeiro o backup é realizado copiando-se sequencialmente os bytes do disco, sem preocupação com o conteúdo de cada byte. No último o backup é feito copiando-se arquivo por arquivo do disco. Com isso, o backup físico é mais rápido mas força que o sistema fique inativo enquanto ele estiver em andamento. Já o backup lógico é mais lento mas necessita apenas do bloqueio do arquivo sendo copiado durante o processo, permitindo que o restante do sistema permaneça em atividade.

Independente do modo do backup é bastante importante que eles sejam programados adequadamente. Embora o sistema de arquivos possa fornecer aplicativos que realizem essa operação de modo automático, cabe sempre ao administrador definir a periodicidade em que ocorrem os backups e quais arquivos devem ser copiados a cada vez. Isso permite que áreas diferentes do disco tenham políticas diferentes de backup, de acordo com a frequência em que seus conteúdos são alterados.

Já os problemas de falha de gravação surgem quando um usuário está salvando um arquivo. Se no momento da gravação ocorrer uma falha no sistema (falta de energia, por exemplo), o arquivo provavelmente se tornará inconsistente pela perda de links entre suas diversas partes (blocos). Isto ocorre pois como o disco é dividido em trilhas e setores e um arquivo pode ter que ocupar diversas trilhas e muitos setores, é necessário saber a sequência de setores ocupados. Essa sequência é armazenada e gerenciada pelo sistema de arquivos, sendo que pode se tornar totalmente inconsistente se uma falha ocorrer durante o processo de escrita do mesmo no disco.

Para diminuir (infelizmente não dá para eliminar) o risco de perda desse tipo de informação (trilhas e setores ocupados por um arquivo), usa-se técnicas como as páginas sombra (shadow pages), em que o salvamento de um arquivo em disco passa a ser feito em duas etapas. Na primeira criam-se as páginas sombra do que havia sido anteriormente salvo em uma outra área do disco, juntando-se também as páginas novas do arquivo. Se essa fase terminar com sucesso então passa-se a mapear o arquivo para esse novo conjunto de páginas, eliminando-se sua versão anterior. Desse modo, a única possibilidade de perda de integridade é se a falha ocorrer durante o processo de mapear o arquivo para o novo conjunto de páginas. Em qualquer outro ponto do processo o prejuízo máximo é o de se perder o que foi editado após a última operação de salvamento do arquivo.

Finalmente, o último problema de integridade de arquivos envolve o seu compartilhamento de modo simultâneo. Essa situação implica na existência de diversas cópias de um arquivo no sistema, o que exige cuidados para se garantir que todos os usuários que o estejam acessando tenham cópias atualizadas do mesmo e, ainda, que ao final do uso a cópia resultante seja a realmente pretendida. Esse problema é ampliado em sistemas distribuídos, quando podemos ter réplicas de um mesmo arquivo espalhadas por várias máquinas.

4. Nomes e endereços

Essas são, sem dúvida, as funcões mais importantes prestadas pelo sistema de arquivos. Independentemente de haver controle de acesso ou garantia de integridade dos arquivos, é preciso localiza-los no disco. Isso é propiciado pelas funcões de mapeamento de nomes e de endereçamento.

  1. Mapeamento de nomes:
    Consiste em identificar os arquivos de forma única dentro de um disco, a partir de chamadas feitas pelos processos em execução no sistema. Isso significa ter condicões de diferenciar arquivos com mesmo nome que sejam de fato distintos (ou identificar um mesmo arquivo com nomes diferentes).
    Parte desse trabalho é feito através da estruturação de diretórios, que hoje em dia estão organizados na forma de árvores hierárquicas, com subdiretórios com permissões de acesso diferenciadas para cada usuário. Então, quando um processo solicita um dado arquivo, o que se faz é buscar na estrutura de diretórios o arquivo pedido (segundo algum caminho de busca pré-definido).
    Outras formas de se organizar diretórios incluem diretórios planos (um único raiz) e de usuários (sem possibilidade de compartilhamento). Entretanto essas formas não são mais usadas pois a estrutura em árvore é muito mais eficiente.
    Uma outra tarefa do serviço de nomes é permitir o compartilhamento de arquivos, ou mais precisamente, controlar a abertura de arquivos evitando que cópias desnecessárias de um arquivo coexistam na memória da máquina. Isso implica em verificar se o arquivo já está aberto no momento em que é solicitado (e com isso mapear nomes a identificadores únicos desse arquivo) e controlar o seu fechamento, evitando que algum usuário perca o seu ponteiro para o arquivo.

  2. Endereçamento:
    Trata de como os arquivos são alocados (e localizados) ao longo do disco. Em geral a técnica para resolver esse atividade é fazer com que a própria estrutura de diretórios possua algum tipo de mapeamento entre nomes e localização física no disco. Isso é feito de forma diferente para cada sistema operacional, com vantagens e desvantagens em cada uma delas.
    Com isso o primeiro obstáculo a ser resolvido é o de determinar como os setores serão divididos. Como um arquivo pode não caber em um único setor, e a alocação de um setor a um arquivo implica que todos os bytes do setor estariam reservados para esse arquivo (que pode não ocupar nem 10% dele), é prática comum dividir o setor em blocos (ou páginas) de tamanho fixo, alocando-se tais blocos aos arquivos.
    Assim, ao armazenar um arquivo temos que, na realidade, armazenar também os endereços dos blocos que ele ocupa (e a ordem desses blocos na sequência lógica do arquivo). O tamanho do bloco deve ser determinado de tal forma que não seja grande nem pequeno demais, pois blocos grandes desperdiçam muito disco, apesar de serem mais fáceis de gerenciar, e blocos pequenos dificultam o gerenciamento, apesar de ocuparem mais integralmente o disco. Tamanhos razoáveis, nos dias de hoje, vão de 1024 a 8192 bytes.
    O segundo obstáculo é, então, o mapeamento dos endereços ocupados por um dado arquivo em disco. Como dito acima, isso é feito de maneira diferente em cada sistema.
    No D.O.S. isso era feito através da FAT (File Allocation Table), que embora de implementação simples (a localização dos arquivos era feita por listas implementadas por índices de um vetor), era limitada e ineficiente para localizar páginas finais em arquivos grandes.
    No UNIX isso é feito através da chamada I-list, que é uma lista cujos elementos (os I-nodes) ocupam, cada um, uma página do disco, independente de se referirem a um arquivo comum ou a um diretório. Nessa página aparecem os dados genéricos do arquivo, tais como nome, data de criação, alteração, proprietário, permissões de acesso, tamanho, etc. Também aparecem os endereços das primeiras dez páginas do arquivo (ou dos primeiros dez i-nodes de arquivos de um diretório). Para arquivos maiores existem ainda outros três endereços, que funcionam em três diferentes níveis de indireção, proporcionando o endereçamento rápido de até 16 Gbytes num sistema com páginas de 1024 bytes.
    Já as versões mais recentes do Windows (a partir do XP) adotam esquemas intermediários entre o D.O.S. e o UNIX, com várias das idéias presentes no UNIX mas ainda carregando o peso de ser compatível com a proposta da FAT. Neles adota-se o sistema NTFS, que é derivado do antigo Windows NT.

 
 
DISCLAIMER
 
 
O conteúdo desta página é de minha total responsabilidade, não representando o pensamento ou posições da UNESP.