terça-feira, 8 de novembro de 2011

Sistema de arquivos

Arquivos podem ser vistos como recipientes que contém dados ou como um grupo de registros correlatos. Os arquivos armazenam informações que serão utilizadas, em geral, por programas aplicativos. Os arquivos são implementados através da criação, para cada arquivo no sistema, de uma estrutura de dados composta por registros. O descritor de arquivo é um registro que mantém informações sobre o arquivo, como posição de início e posição de fim.

As informações típicas (atributos) mantidas pelo sistema operacional são:
     1. nome do arquivo;
     2. tamanho (em bytes);
     3. data e hora da criação, do último acesso, da última modificação;
     4. identificação do usuário que criou o arquivo;
     5. listas de controle de acesso;
     6. local do disco físico onde o conteúdo do arquivo foi colocado.

As operações mais comuns relacionadas à manipulação dos arquivos são:

Para controlar e organizar os arquivos, os sistemas de arquivos tem, em geral, os diretórios ou pastas, que podem ser arquivos em muitos sistemas também. Os diretórios podem ser organizados em um único nível (contendo todos os arquivos) ou em múltiplos níveis (diretórios dentro de diretórios).

Um dos principais problemas é como alocar espaço em disco para que os arquivos sejam armazenados de forma eficiente e que permita acesso rápido.

Existem alguns métodos que podem ser utilizados, tais como:
     1. alocação contígua;
     2. alocação com lista encadeada (lista ligada);
     3. alocação com lista usando um índice.

Alocação contígua

Este é o esquema mais simples de alocação de arquivos, onde cada arquivo é armazenado no disco como um bloco contíguo de dados. Neste esquema, em um disco com blocos de 1KB, um pequeno arquivo de 20KB seria armazenado em 20 blocos consecutivos.
Alocação contígua

Principais vantagens:
     1. simples implementação: o controle de onde está cada arquivo no disco é feito por um único número (endereço em disco do 1º bloco);
     2. performance: todo o bloco (arquivo) pode ser lido no disco de uma única vez. É necessário o tempo de somente um seek.

Problemas:
     1. a estratégia só pode ser usada se o tamanho máximo do arquivo for conhecido no momento de
sua criação (devido à necessidade existente em saber o tamanho total do arquivo ou a quantidade de blocos que ele ocupa);
     2. fragmentação do disco: perde-se muito espaço útil com este esquema de alocação. Ao remover um arquivo, a área ocupada pelo mesmo é liberada ocasionando lacunas por todo o disco. Necessidade de compactação (custo alto).

Alocação com lista encadeada

Nesta estratégia de alocação, usamos uma lista encadeada para indicar os espaços ocupados em disco pelo arquivo. Assim, não é mais necessário que o arquivo seja armazenado em posições contíguas do disco. A primeira palavra de cada bloco é usada com um ponteiro para o próximo bloco e o restante do bloco é usado para armazenar as informações (dados) do arquivo.
Alocação com lista encadeada

Principais vantagens:
     1. não se perde espaço por fragmentação externa;
     2. qualquer bloco pode ser utilizado, permitindo que os arquivos cresçam indefinidamente enquanto houver espaço no disco;
     3. a entrada do diretório só precisa armazenar o endereço do 1º bloco do arquivo (em cada bloco
existirá um ponteiro para o próximo bloco do arquivo).

Problemas:
     1. o acesso randômico é lento pois existe a necessidade de percorrer a lista.
     2. a implementação deste método de alocação é mais complicada.

Alocação com lista encadeada usando uma tabela na memória

Para eliminarmos os problemas apresentados no esquema anterior, podemos dispor de uma tabela em memória armazenando os ponteiros para cada bloco do arquivo. Esta tabela recebe o nome de FAT (File Allocation Table) - esquema adotado pelo DOS. Com este esquema o acesso aleatório fica muito mais fácil pois todo o esquema de ponteiros agora fica armazenado em memória, o que é muito mais rápido. O principal problema é o gasto com memória para manter a tabela com as informações. Para um disco de 40GB e blocos de 1KB, a tabela precisará de 40 milhões de entradas. Considerando que cada entrada tem no mínimo 3 bytes, a tabela ocupará um espaço total de 120MB.
Tabela de alocação de arquivos (FAT)

Alocação com lista usando um índice

Busca resolver o problema de ponteiros esparramados pelo disco que a alocação encadeada provoca. Para isso, mantém, por cada arquivo, um índice de blocos que o compõem. Este índice é mantido em um bloco do disco. O diretório possui um ponteiro para o bloco onde está o índice associado a um determinado arquivo.

Este esquema elimina as desvantagens existentes na alocação com lista encadeada: retira os ponteiros de cada um dos blocos e os coloca em uma tabela ou índice na memória. Apesar de o acesso ser randômico também, sua implementação é bem mais simples.
A tabela é armazenada na memória principal e pode ser seguida sem a necessidade de acessar o disco.

Desvantagem: a tabela também deve estar na memória o tempo todo, o que implica em utilização de espaço de memória.
Alocação com lista usando um índice

Inode

A cada arquivo associa-se uma pequena tabela, denominada inode, que lista os atributos e os endereços em discos dos blocos do arquivo. Os primeiros endereços de disco são armazenados no próprio inode. Se o arquivo for pequeno, toda a informação é encontrada diretamente no inode. O conteúdo do arquivo só é transferido do disco para a memória quando o arquivo for aberto (esquema utilizado pelo UNIX).
Inode

0 comentários:

Postar um comentário