Sistemas de Arquivos: Conceitos, Operações UNIX e Distribuição
Classificado em Computação
Escrito em em
português com um tamanho de 10,59 KB
Conceitos Fundamentais de Sistemas de Arquivos
Um arquivo é uma sequência de informações binárias, ou seja, uma sequência de 0 e 1 organizados de forma lógica.
Sistemas de Arquivos é a forma como o disco rígido é dividido logicamente. Essa divisão ocorre por trilhas e setores. Cada sistema varia a forma como esses arquivos são armazenados.
Os arquivos contêm dados e atributos.
Os dados consistem em uma sequência de elementos (normalmente bytes de 8 bits), acessíveis pelas operações de leitura e escrita.
Os atributos são mantidos como um único registro, contendo informações como o tamanho do arquivo, indicações de tempo, tipo de arquivo, identidade do proprietário e listas de controle de acesso.
Os atributos escondidos (shadow attributes) são gerenciados pelo sistema de arquivos e normalmente não podem ser atualizados por programas de usuário.
Um diretório é um arquivo de um tipo especial que fornece um mapeamento dos nomes textuais para identificadores internos de arquivo.
Os diretórios podem incluir nomes de outros diretórios, conhecida como hierarquia.
Os metadados se referem a todas as informações extras armazenadas por um sistema de arquivos que são necessárias para o gerenciamento deles.
Módulos de Camadas para Sistemas Não Distribuídos
- Diretório: relaciona nomes de arquivos com IDs de arquivos.
- Arquivo: relaciona IDs de arquivos com arquivos em particular.
- Controle de Acesso: verifica a permissão para a operação solicitada.
- Acesso a Arquivo: lê ou escreve dados, ou atributos.
- Bloco: acessa e aloca blocos de disco.
- E/S: entrada/saída de disco e uso de buffers.
Operações do Sistema de Arquivos UNIX
filedes = open(nome, modo)– abre um arquivo existente.filedes = creat(nome, modo)– cria um novo arquivo.status = close(filedes)– fecha o arquivo aberto.count = read(filedes, buffer, n)– transfere para o buffernbytes do arquivo referenciado porfiledes.count = write(filedes, buffer, n)– transferenbytes de buffer para o arquivo.pos = lseek(filedes, offset, whence)– desloca o ponteiro de leitura e escrita paraoffset.status = unlink(nome)– remove o arquivo da estrutura de diretório.status = link(nome1, nome2)– cria uma nova referência ou nome (nome2) para o arquivonome1.status = stat(nome, buffer)– escreve atributos do arquivonomeem buffer.
Requisitos para Sistemas de Arquivos Distribuídos
- Transparência:
- Acesso: deve permitir que programas locais sejam capazes de acessar arquivos remotos sem modificação no código.
- Localização: não precisam referenciar a localidade de um arquivo, tendo em vista que o arquivo pode mudar de servidor.
- Mobilidade: nem as tabelas de administração de sistemas nos nós clientes precisam ser alteradas quando os arquivos são movidos.
- Desempenho: os programas clientes devem continuar a funcionar satisfatoriamente enquanto a carga sobre o serviço varia.
- Mudança de Escala: o serviço pode ser expandido de forma paulatina, para tratar uma ampla variedade de cargas e tamanhos de rede.
- Concorrência: é necessária a possibilidade de dois ou mais clientes acessando o mesmo arquivo simultaneamente sem que haja interferências nas operações de cada um.
- Replicação: um arquivo pode ser representado por várias cópias de seu conteúdo em diferentes locais, possibilitando balanceamento de carga, escalabilidade e tolerância a falhas.
- Heterogeneidade do Hardware e S.O.: deve ser possível a implementação tanto em clientes quanto em servidores independentemente do tipo de hardware e sistema operacional.
- Tolerância a Falhas: deve manter seu funcionamento em caso de falhas tanto no cliente quanto no servidor (usando redundância).
- Consistência: é preciso garantir que o arquivo que o cliente está requisitando ou alterando é a versão fiel da última atualização. Quando se usa a replicação, há um atraso na propagação da réplica para outros servidores, podendo então gerar inconsistência nos dados.
- Segurança: Implementação de controles de acesso, assinaturas digitais e, opcionalmente, criptografia de dados são itens essenciais para implementação.
- Eficiência: deve ser um serviço igual ou superior ao sistema de arquivos convencional, sem causar impactos na sua utilização no que se refere à velocidade e desempenho.
Arquitetura e Modelos de Serviço de Arquivos
Arquitetura do Serviço de Arquivos: baseada em uma divisão de responsabilidades entre três módulos: um cliente que simula uma interface de sistema de arquivos convencional para programas e aplicativos, e dois módulos servidores que efetuam operações em diretórios e arquivos.
Modelo NFS: O relacionamento cliente-servidor é simétrico: cada computador pode atuar como cliente e como servidor, ora fornecendo algum dado, ora requisitando algum dado. Porém, é uma prática comum em instalações maiores configurar algumas máquinas como servidores dedicados e outras como estação de trabalho.
Andrew File System (AFS): É um ambiente de computação distribuída com a intenção de suportar o compartilhamento de informações em larga escala, minimizando a comunicação cliente-servidor. Isso é possível através do cache.
Serviço de Arquivo Plano (Flat File Service): são usados identificadores exclusivos de arquivo para fazer referência aos arquivos.
A divisão de responsabilidades entre o serviço de arquivos e o serviço de diretórios é baseada no uso de UFIDs. UFIDs (Identificações Únicas de Arquivo) são identificações únicas para cada arquivo.
Serviço de Diretório: Fornece um mapeamento entre os nomes textuais de arquivos e seus UFIDs. Os clientes podem obter esse UFID citando o seu nome textual. Esse serviço também oferece funções para gerar diretórios e adicionar nomes de arquivos.
Módulo Cliente e Interfaces
Módulo Cliente: um módulo cliente é executado em cada computador cliente, integrando e estendendo as operações dos serviços acima.
Interface de Serviços de Arquivos Planos
Essa interface é usada pelos módulos clientes, normalmente não usada diretamente por programas em nível de usuário.
Read,Write,Create,Delete,Getattributes,Setattributes
Comparado com o sistema UNIX, apenas não fornece as opções open e close, já que pode ser acessado apenas passando o UFID.
As operações são idempotentes, ou seja, o cliente pode fazer repetidas execuções caso não recebam resposta.
Para o controle de acesso, é feita uma verificação quando um nome de arquivo é convertido em um UFID, e os resultados são codificados na forma de uma capacidade, retornando para o cliente para envio com as requisições seguintes. Alternativamente, é enviada uma identidade de usuário e verificada a cada operação de arquivo. Nenhuma delas resolve o problema de identidades falsificadas, podendo ser tratado com o uso de assinaturas digitais.
Interface do Serviço de Diretório
Lookup(Dir, Name) -> UFID: Localiza o nome textual e retorna seu UFID.AddName(Dir, Name, UFID): SeNamenão estiver no diretório, adiciona e atualiza o registro de atributos do arquivo.UnName(Dir, Name): Remove a entrada contendoName.Getnames(Dir, Pattern) -> NameSeq: Retorna todos os nomes textuais presentes no diretório que correspondam à expressão regular Pattern.
Operações do Servidor NFS
Lookup, Creat, Remove, Getattr, Setattr, Read, Write, Rename, Link, Symlink, Readlink, Mkdir, Rmdir, Readdir, Statfs
Cache no Cliente
Armazena os resultados das operações read, write, getattr, lookup e readdir para reduzir o número de requisições feitas aos servidores.
Um método baseado em timestamp é usado para validar os blocos armazenados em cache antes de serem usados. Eles são rotulados com:
Tc= hora em que a entrada da cache foi validada pela última vez.Tm= hora em que o bloco foi modificado pela última vez no servidor.
Montagem Incondicional
Um processo que tenta acessar um arquivo remoto é bloqueado até que o servidor responda. Em caso de falhas, o módulo continuará tentando; quando o servidor se recuperar, continuarão o trabalho como se nada tivesse ocorrido.
Montagem Condicional
No caso de falhas, após X tentativas o cliente NFS sinalizará erro.
Comparação: Modelo Teórico vs. NFS
O NFS juntou os dois serviços (diretório e arquivos plano) em uma única interface.
Não há diferenças, exceto pelo retorno dos atributos no caso do NFS.
O comando link do NFS é idêntico ao addname do teórico.
O comando symlink não foi previsto no modelo teórico, como também mkdir, rmdir, rename e statfs.
Create: A criação de arquivos é tratada de forma diferente no modelo teórico e no NFS.