• Aucun résultat trouvé

: modelage, pratique guidée et pratique autonome Je fais

E lit : Fonk mbokk

Activité 2 : modelage, pratique guidée et pratique autonome Je fais

A maior revisão do sistema de arquivos do UNIX foi realizada em Berkeley, resultando no UNIX FFS (Fast File System) [MJL+84]. As alterações realizadas se relacionam com a utilização do espaço em disco, com o objetivo de melhorar o desempenho do sistema de arquivos. As principais mudanças são:

• no UNIX FFS, os nós-i não estão concentrados no início do disco. O sistema divide o disco em regiões de cilindros adjacentes, denominadas grupos de cilindros. Cada grupo de cilindro possui sua região de nó-i e sua região de dados. Assim, mesmo em discos grandes, os nós-i estão mais próximos da região de dados;

• o UNIX FFS permite a existência de até dois tamanhos de bloco, iniciando com o

tamanho mínimo de 4096 bytes, até o limite imposto pela controladora de disco, ou pelos drivers. A utilização de blocos maiores reduz, em potencial, a quantidade de acessos a disco, mas aumenta a probabilidade de ocorrer um fenômeno denominado de

fragmentação interna: freqüentemente, o último bloco de um arquivo não é totalmente

• o gerenciamento do espaço livre foi alterado, para tornar a alocação de blocos mais rápida. A lista de blocos livres foi substituída por um mapa de bits, que registra o estado de alocação de cada bloco e fragmento do disco. Como o mapa de bits é pequeno, ele pode ser mantido na memória, dispensando acessos a disco durante a alocação de blocos;

• o UNIX FFS possui um novo algoritmo de alocação de blocos, que procura: alocar o

nó-i e os blocos de um arquivo no mesmo grupo de cilindros; alocar os blocos de um

arquivo da forma mais contígua possível e concentrar, sempre que houver espaço, os arquivos de um mesmo diretório em um único grupo de cilindros. Dessa forma, o UNIX

FFS consegue diminuir a quantidade de posicionamentos do braço, durante o processamento das requisições de acesso.

2.2.3 Armazenamento Estável no U

NIX

O sistema de arquivos do UNIX consegue prover armazenamento estável através da

gravação síncrona de dados. Na gravação síncrona, o sistema ativa o driver de disco, para

iniciar imediatamente a transferência do conteúdo alterado nos buffers da cache, para os blocos de disco apropriados. O processo de usuário requisitante da chamada de sistema é bloqueado, até que a gravação termine.

O sistema oferece duas maneiras de uma aplicação solicitar a gravação síncrona de dados. Primeiro, a aplicação pode informar ao sistema, no momento em que abrir o arquivo, que todas as operações de escrita devem ser realizadas de forma síncrona. A aplicação faz essa opção, passando o parâmetro O_SYNC na chamada de sistema open [AT89]. O sistema guarda essa informação na tabela de arquivos abertos, realizando a gravação síncrona dos dados de todas as requisições de escrita para esse arquivo. Quando uma operação de escrita retorna como bem-sucedida, o processo de usuário tem a certeza de que os dados foram realmente gravados no disco.

Uma segunda forma de realizar a gravação síncrona é invocando uma operação complementar, através da primitiva fsync, logo após a operação de escrita no arquivo [Bac86]. A primitiva fsync bloqueia o processo do usuário, enquanto transfere para o disco o conteúdo de todos os buffers “sujos” da cache, com dados do arquivo informado. O processo de usuário só continua a sua execução, quando a gravação dos dados termina.

Existe, ainda, a primitiva sync, que transfere o conteúdo de todos os buffers “sujos” da

cache para o disco. Porém, ela é inadequada para implementar o armazenamento estável de

um arquivo: além de gravar conteúdos do sistema de arquivos, que não se relacionam com o arquivo em questão, o processo de usuário não espera pelo final da operação. Assim, embora o sistema de arquivos dispare imediatamente a gravação dos buffers para disco, a

Quando uma aplicação realiza muitas operações de escrita, a espera pela gravação síncrona pode comprometer o seu desempenho. Portanto, nem sempre as aplicações podem arcar com o custo do armazenamento estável de dados, no sistema de arquivos do UNIX.

2.2.4 Procedimento de Recuperação do U

NIX

Algumas circunstâncias, como a falta de energia ou falhas no hardware, podem levar a um

crash, deixando o sistema de arquivos num estado inconsistente. O comando fsck é

utilizado para investigar inconsistências e reparar o sistema de arquivos [AT89]. Trata-se de um programa interativo, que utiliza a interface de caracter, ou de bloco, para ter acesso direto ao sistema de arquivos, sem valer-se das chamadas de sistema regulares [Bac86].

O fsck prevê uma série de possíveis situações de inconsistência, resultantes da perda de memória volátil, como, por exemplo: blocos de dados referenciados por mais de um nó-i; blocos de dados que não são referenciados; superbloco com informações que não condizem com o estado real do sistema; lista de blocos livres corrompida; nó-i com informações inválidas; diretórios desconectados, ou com entradas incorretas. Para realizar tais verificações, o fsck examina todos os metadados existentes no disco, incluindo todos os

nós-i, blocos indiretos e diretórios, além da lista de blocos livres. Pesquisando essas

estruturas de dados e corrigindo as inconsistências, o fsck consegue levar o sistema de arquivos a um estado consistente.

Uma limitação desse procedimento de recuperação é a necessidade de conferir, incondicionalmente, todos os metadados do sistema de arquivos, a despeito da quantidade de metadados inconsistentes [RO92]. Certas operações, como a verificação de cada entrada de diretório, podem requerer muitas leituras não-seqüenciais, que exigem múltiplas operações de posicionamento. No caso de discos grandes, com muitos arquivos, a leitura e o exame de todos os metadados, em geral, duram um longo tempo. Quanto maior a capacidade do disco, maior o tempo de execução do procedimento de recuperação. Normalmente, apenas um pequeno número de metadados está sendo atualizado e pode tornar-se inconsistente, no momento de um crash. Se o procedimento de recuperação pudesse identificar as estruturas afetadas pelo crash, haveria a possibilidade de restaurar a consistência do sistema de arquivos mais rapidamente.

Outra limitação do procedimento de recuperação do UNIX é o confinamento das ações

corretivas aos metadados do sistema de arquivos. O fsck restringe-se a corrigir os valores dos metadados, para que voltem a corresponder ao estado real do sistema de arquivos, armazenado em disco. Esse procedimento é incapaz de recuperar os blocos de dados que estavam armazenados na cache. Por isso, as aplicações podem perder as últimas atualizações realizadas.