Please enable JavaScript.
Coggle requires JavaScript to display documents.
Cap 24 : Sistemas de arquivos - Coggle Diagram
Cap 24 : Sistemas de arquivos
Arquitetura geral
Dispositivos: responsáveis pelo armazenamento de dados
Controladores: fazem o controle dos dispositivos físicos. Acessados através de portas de entrada/saída, interrupções e canais de acesso direto à memória
Drivers: interagem com os controladores para configurá-los e fazer as transferências de dados entre os dispositivos e o SO. Os drivers ocultam as diferenças entre os controladores e fornecem às camadas superiores uma interface padronizada
Gerência de blocos: gerencia o fluxo de blocos de dados entre as camadas superiores e os dispositivos de armazenamento. Os discos são dispositivos orientados a blocos. Essa camada faz o mapeamento de blocos lógicos e também caching/buffering de blocos
Alocação de arquivos: aloca arquivos sobre os blocos lógicos. Cada arquivo é visto como uma sequência de blocos lógicos
Sistema de arquivos virtual (VFS): constrói as abstrações de diretórios e atalhos, gerencia as permissões e travas e mantém o registro de cada arquivo aberto sabendo posição da última operação, modo de abertura etc.
Interface do sistema de arquivos: conjunto de chamadas de sistema oferecidas aos processos de usuários para criação e manipulação de arquivos
Bibliotecas de entrada/saída: usam as chamadas de sistema para construir funções padronizadas de acesso a arquivos para cada linguagem de programação
Cada arquivo possui dados e metadados. Os dados são o conteúdo. Os metadados são os atributos
Espaços de armazenamento
Discos e partições
Para o SO o disco é um grande vetor de blocos de dados de tamanho fixo numerados sequencialmente
O espaço de armazenamento de cada dispositivo é divido em uma pequena área de configuração reservada no início do disco em uma ou mais partições.
A área de configuração contém uma tabela de partições
A área também contém um pequeno código executável usada no boot. Por isso ela é chamada de Master Boot Record
No início de cada partição há um ou mais blocos reservados para descrição do conteúdo da partição ou armazenar código para lançamento do SO se aquela for uma partição bootável. Volume Boot Record
Existem vários formatos para o blocos de inicialização. Esses formatos devem ser reconhecidos pela BIOS
Volume é um espaço de armazenamento de dados. Na forma mais simples volume = partição
Antes de ser usado cada volume ou partição deve ser formatado. Preenchido com as estruturas de dados necessárias
Montagem de volumes
Para que o SO possa acessar os arquivos de um volume ele deve ler os dados presentes em seu bloco de inicialização, criar dentro do núcleo as estruturas que representam esse volume e estabelecer um identificador. Esse processo é a montagem de um volume
A desmontagem é fechar todos os arquivos abertos do volume e remover suas estruturas de gerenciamento
A montagem é frequente em mídias removíveis
Ao montar o volume deve-se fornecer aos processos e usuários uma referência para seu acesso denominada ponto de montagem. Sistemas UNIX definem esses pontos como posições dentro da árvore de arquivos
Volume principal e secundários
Em DOS é comum definir cada volume como um disco lógico distinto
Gestão de blocos
Blocos físicos e lógicos
Blocos físicos: blocos do disco rígido. Como esses blocos são pequenos seu número dentro de um disco pode ser imenso
Agrupar os blocos físicos em blocos lógicos ou clusters, que são grupos de 2^n blocos físicos consecutivos
A maior parte das operações são feitas em cima de blocos lógicos que são a unidade mínima de alocação
O número de blocos físicos em cada bloco lógico é definido pelo SO ao formatar a partição
Blocos lógicos grandes implicam em menos gerência e mais eficiência, porém geram mais fragmentação interna
Blocos lógicos menores diminuem a perda de espaço útil mas tem impacto negativo no desempenho pois menos dados são transferidos por operação
É preciso escolher blocos lógicos de tamanho adequado ao tamanho médio dos arquivos a armazenar no disco
Alguns sistemas permitem a alocação parcial de blocos. Fragmentos de blocos ou alocação de sub-blocos
Caching de blocos
Operações em discos possuem latências elevadas. O desempenho pode ser melhorado através de um cache, uma área de RAM na gerência de blocos
É possível fazer caching de leitura ou escrita. Blocos lidos anteriormente são mantidos no cache para auxiliar leituras futuras. Blocos a escrever são mantidos na memória para agrupar escritas pequenas em escritas maiores
Read-Through: quando um processo solicita leitura, o cache é consultado, caso o bloco esteja no cache ele é entregue ao processo, senão carrega do disco
Read-ahead: ao atender uma requisição de leitura são trazidos para o cache dados subsequentes. Bom se houver localidade de referência e acesso sequencial
Write-Through: quando um processo solicita escrita o conteúdo é escrito diretamente no disco. Uma cópia do conteúdo é mantida no cache para leituras futuras
Write-back: quando um processo solicita escrita os dados são copiados no cache. A escrita efetiva é feita posteriormente. Melhora o desempenho da escrita mas existe o risco de perda de dados
A estratégia de caching depende do tipo de informação. Escrita de conteúdo e feita por write-back e metadados por wrtie-through
É preciso uma política para selecionar quais dados serão removidos do cache quando ele encher
Alocação de Arquivos
É preciso alocar os arquivos dentro dos blocos no disco. As alocações são avaliadas quanto a rapidez, robustez e flexibilidade
FCB (File Control Block): estrutura de dados contendo todos os metadados do arquivo e uma referência para seu conteúdo no disco
Alocação Contígua
Os dados são dispostos de forma sequencial sobre um conjunto consecutivo de blocos
A localização do conteúdo do arquivo é definida pelo endereço do seu primeiro bloco
Como os blocos de cada arquivo estão em sequência o acesso sequencial e aleatório ao dados é muito rápido
Boa robustez, apenas o conteúdo de um bloco corrompido é perdido, sem influenciar nos outros
Desempenho bom
Baixa flexibilidade: o tamanho máximo de cada arquivo precisa ser conhecido na sua criação
Gera Fragmentação externa. Desfragmentação de disco muito lenta
Uso limitado em SOs de uso geral onde há mudança constante nos arquivos. Boa em sistemas dedicados para reprodução multimídia
Alocação encadeada simples
Cada bloco do arquivo contém dados do arquivo e um ponteiro para o próximo bloco, fazendo uma lista encadeada de blocos
Elimina a fragmentação externa e permite criara arquivos sem definir seu tamanho final
O acesso sequencial é simples e rápido, porém se os blocos estiverem muito espalhados a cabeça de leitura precisará fazer muitos deslocamentos baixando desempenho
O acesso aleatório é muito prejudicado, é preciso ler todos os blocos anteriores até achar o certo
Problema de robustez: caso um bloco seja corrompido todos os subsequentes são perdidos
Muito flexível, arquivos podem ser reduzidos ou expandidos sem dificuldade
Alocação encadeada FAT
Para resolver problemas de desempenho e robustez os ponteiros são retirados dos blocos de dados e armazenados em uma tabela separada (File Allocation Table (FAT))
É a base de SOs DOS e dispositivos portáteis de armazenamento
A tabela é armazenada em blocos reservados no início da partição. Cada entrada é um bloco lógico e contém um ponteiro indicando o próximo bloco do arquivo
A tabela pode ter valore especiais para indicar último bloco do arquivo, bloco reservado, defeituoso ou reservados
Uma cópia dessa tabela é mantida no cache
Resolve o problema de desempenho da alocação encadeada simples mantendo sua flexibilidade . A tabela FAT é um dado crítico, por isso cópias usa são mantidas
Alocação indexada simples
Vetor contendo um índice de blocos do arquivo. Cada entrada desse índice corresponde a um bloco do arquivo e aponta para ele
O índice de cada arquivo é mantido é mantido em um i-node
O i-node contém também os principais atributos
Os i-nodes são agrupados em uma tabela de i-nodes mantida em blocos reservados
Como os i-nodes tem tamanho fixo o número de entrada no índice é limitado. A tabela de i-nodes tem tamanho fixo o que limita o número de arquivos ou diretórios
Alocação indexada multinível
Para aumentar o tamanho máximo dos arquivos algumas entrada do i-node podem ser transformadas em ponteiros indiretos para outros i-nodes
É possível ter muitos níveis
A estrutura homogênea dos ponteiros permite calcular rapidamente a localização dos blocos
Bom desempenho: bastante rápida tanto para acessos sequencias quanto aleatórios. Contudo no caso de blocos ao final de arquivos grandes podem ser necessários vários acessos ao disco por causa dos ponteiros indiretos
Defeitos em blocos de dados não afetam os demais blocos. Defeitos nos metadados podem danificar grandes extensões do arquivo. Solução é a redundância de i-nodes
Tão flexível quanto a alocação encadeada, não apresentado fragmentação externa, porém existem limites para tamanho e quantidade de arquivos
Gestão do espaço livre
A camada de alocação de arquivos deve manter um registro atualizado de quais blocos estão livres
Mapa de bits: um pequeno conjunto de blocos na área reservada do volume é usado para manter um mapa de bits. Cada bit representa um bloco lógico da partição. É simples de implementar e compacto
Lista de blocos livres: cada bloco livre contém um ponteiro para o próximo livre. Ineficiente, exige um acesso a disco para cada bloco livre requisitado. Uma melhoria simples é armazenar um vetor de ponteiros em cada bloco livre permitindo obter um grande número de blocos livres por acesso
Tabelas de grupos de blocos: contém a localização e o tamanho de um conjunto contíguo de blocos livres. Cada entrada da tabela é um par número inicial do bloco e número de blocos no grupo
FAT usa a própria tabela para gerenciar blocos livres
Ao usar i-nodes esse gerenciamento é geralmente feito com mapa de bits