Você está na página 1de 51

Sistemas de Arquivo

Prof. Orlando Loques


IC-UFF
junho - 2001

Referências:

Capítulo 11, Applied Operating System Concepts, Silberschatz, Galvin,Gagne, 1ª edição


Capítulo 11, Operating System Concepts, Silberschatz, Galvin, 5ª edição
Capítulo 12, Operating Systems: Internals and Design Principles, W. Stallings, 3ª edição
Sistema de Arquivos
 Conceito de Arquivo
 Métodos de Acesso
 Estruturas de Diretórios
 Proteção
 Estrutura do Sistema de Arquivos
 Métodos de Alocação
 Gerenciamento do Espaço Livre
 Implementação de Diretórios
 Proteção
 Eficiência e Desempenho
 Confiabilidade e Recuperação de Falhas
Conceitos

 Espaço Lógico de Endereçamento Contíguo


 Tipos:
 Dados
 numérico
 caracteres
 binário
 compostos
 Programas
 Outros
Estruturação de Arquivos
 Nenhuma: sequência de palavras, bytes
 Blocos Simples
 Linhas
 Tamanho Fixo
 Tamanho Variável
 Estruturas Complexas
 Documento formatado
 Arquivo de Programa Re-alocável (.EXE)
 Os dois últimos podem ser simulados inserindo caracteres de
controle apropriados em arquivos não estruturados
 Quem decide/implementa?
 Sistema Operacional
 Programa do Usuário
Atributos de Arquivos

 Nome – única informação legível armazenada


 Tipo – requerida em sistemas que suportam/distinguem tipos
diferentes
 Locação – ponteiro para a localização do arquivo no dispositivo
 Tamanho – Tamanho Corrente do Arquivo
 Proteção – controla quem pode ler/escrever/executar
 Hora, data, e identificação do usuário – usada para proteção,
back-up e monitoração de uso
 Essas informações são mantidas na estrutura de diretório,
armazenada em disco
Tipos de Arquivos

Executable exe, com, bin or ready-to-run machine-


none language program
Object obj, o complied, machine
language, not linked
Source code c, p, pas, 177, source code in various
asm, a languages
Batch bat, sh commands to the
command interpreter
Text txt, doc textual data documents
Word processor wp, tex, rrf, etc. various word-processor
formats
Library lib, a libraries of routines
Print or view ps, dvi, gif ASCII or binary file
Archive arc, zip, tar related files grouped
into one file, sometimes
compressed.
Tipos de Arquivos

 Simplificam a implementação de facilidades:


 associação de programas editores a arquivos texto;
 compilação automática de arquivos quando o programa
fonte é modificado;
 detecção de erros (execução de arquivos texto, impressão
PS em impressora comum)

 Definição explícita: terminações em DOS e Windows

 Definição implícita: Unix magic numbers; identidade do


programa criador no Apple Macintosh
Operações em Arquivos

 Arquivos são objetos (derivados de tipos de dados) com


operações bem definidas
 create
 write
 read
 file seek - re-posicionamento
 delete
 seta modo de proteção
 open(Fi) – busca no diretório e carrega as informações de
controle
 close (Fi) – armazena as informações de controle no
diretório
Métodos de Acesso
 Acesso Sequencial
 read next
 write next
 rewrite, reset
 Acesso Direto
 read n
 write n
 posiciona em n: read next, write next
 Acesso por índices (não são ponteiros para blocos físicos)
 semelhante ao índice de um livro: a entrada no índice (eg código de
um produto) aponta para o ponto no arquivo onde encontrar a
informação desejada; tabela de índices em memória ou em disco
 Sos podem prover um ou vários métodos de acesso; a provisão de diferentes
métodos complica o sistema
 O acesso sequencial e o acesso por índices pode ser simulado através do
acesso direto
Métodos de Acesso

 Código de produto (UPC): 10 digitos, Preço do Produto: 6 digitos --


Tamanho do Registro: 16 bytes
 Disco com blocos de 1024 bytes: 64 Registros por Bloco
 Um arquivo com 120.000 registros (2 milhões de bytes) ocupa 2000
blocos
 Se o arquivo for ordenado pela UPC, podemos ter um índice de 10X2000
= 20.000 bytes
 O índice pode ser mantido na memória principal
 Se fizermos uma busca (binária) podemos achar rapidamente o bloco
onde o registro pode ser encontrado
 Pode-se acessar informações em um arquivo grande fazendo-se poucas
operações de E/S
Diretório
 Um conjunto de nós contendo informações sobre todos os arquivos

Diretório

Arquivos
F1 F2 F4
F3
Fn

 Cópias reserva dessas estruturas podem ser mantidas em fitas magnéticas


Diretórios e Partições
diretório diretório

partição A disco 4
arquivos
disco 1

diretório arquivos
partição C

partição B arquivos disco 3

 Partições ou volumes são usados para separar ou aglutinar áreas em disco


 Unix tem comandos mount para incluir novos discos ou diretórios
 Windows usa programas especiais (fdisk) para definir partições e discos físicos/lógicos
Diretórios e Partições - Windows/DOS

Setor de boot primário;


contém a descrição das outras partições
LINUX

partição 1 partição 2 partição 3 partição 4

diretório raiz

FAT’ FAT’’ ...


Blocos de dados
Setor de boot secundário
The CP/M File System (2)

The CP/M directory entry format


The MS-DOS File System (1)

The MS-DOS directory entry


Example File Systems
CD-ROM File Systems

The ISO 9660 directory entry


Informações no Diretório
 Nome
 Tipo
 Endereço
 Tamanho atual
 Tamanho máximo
 Data do último acesso
 Data da última atualização
 ID do proprietário (quem é o dono e paga)
 Informação de proteção

ponteiros (file pointers) apontando para informações sobre arquivos abertos


(file control block; file descriptor) são geralmente mantidos numa tabela do
sistema (open file table)
Operações sobre Diretórios

 Busca por arquivo


 Criação de arquivo
 Deleção de arquivos
 Listagem de conteúdo
 Renomeação de arquivo
 Varrer (traverse)o sistema de arquivo, usada para
fazer cópia reserva
 Operações tipo: rename, copy, dump, grep, etc,
geralmente são implementadas em alto nível
Objetivos na Estruturação (Lógica) de Diretórios

 Desempenho e Eficiência : localizar e acessar arquivos


rapidamente; boa relação espaço útil/dados auxiliares
(gerenciamento e controle)
 Nomeação: conveniência para os usuários
 Usuários diferentes podem usar um mesmo nome para
arquivos diferentes
 O mesmo arquivo pode ter nomes diferentes para
diferentes usos
 Agrupamento: os arquivos podem ser agrupados
logicamente por propriedades: programas Java, arquivos de
imagens (.jpg), arquivos de jogos, etc
Diretório em um nível

 Um único diretório para todos usuários.

 Problema da nomeação: procupação de evitar coincidência de nomes


 Problema de busca: tempo longo para grande número de arquivos
 Problema de agrupamento: dificulta o gerenciamento
Estrutura de Diretórios em dois níveis
 Um diretório para cada usuário

 caminhos com nome - Path name


 pode ter o mesmo nome de arquivo para usuários diferentes
 busca mais eficiente
 não permite agrupamento (obtido com caminhos de busca e diretórios especiais)
Diretórios Organizados em Árvore (i)
Diretórios Organizados em Árvore (ii)
 Busca mais eficiente, nome de caminho (path name) absoluto ou relativo
 Facilidade de agrupamento
 Conceito de Diretório Corrente (diretório de trabalho) - simplifica a nomeação
 cd /spell/mail/prog
 type list
 A criação/deleção de um arquivo ou diretório novo pode ser feita no diretório de
trabalho
 rm <file-name>
 mkdir <dir-name>
 exemplos:
 se o diretório corrente for /spell/mail: mkdir count
 deletando “mail”  deleta a sub-árvore inteira de raiz “mail”.

mail

prog copy prt expcount


Diretórios com Grafos Acíclicos (i)
 Permite compartilhamento de diretórios e arquivos.
Diretórios com Grafos Acíclicos (ii)

 Dois nomes diferentes (aliasing)


 Se deletar list  w, words apontam para nada: ponteiros soltos
(dangling pointers)
Soluções:
 Manter ponteiros reversos junto ao arquivo ou diretório, de
maneira a permitir a deleção de todos os ponteiros
 O número de ponteiros varia dinamicamente, dificultando o
armazenamento
 Manter os ponteiros reversos usando uma lista
encadeada; complica a manutenção
 Usar um contador de referências e manter o arquivo até
o número de referências zerar
Diretório em grafo generalizado (i)
Diretório em grafo generalizado (ii)

 Como evitar ciclos?


 Permitir somente links para arquivos, não para diretórios
 Coletor Especial de Lixo (por causa dos ciclos o uso de
contador de referência (= 0) não é suficiente)
 Sempre que inserir um novo link executa um algoritmo de
detecção de ciclo para impedir que ciclos ocorram; esses
algoritmos são caros em tempo de execução.
Proteção: Direitos de Acessos
 Tipos de acessos
 Read, Write, Execute, Append, Delete, List
 O proprietário/criador deve determinar:
 o que pode ser feito?
 quem pode fazer?
 Existem vários esquemas:
 senha por arquivo, diretório ou disco
 listas de acesso que indicam quem pode acessar o arquivo, mas
exigem estruturas dinâmicas nos diretórios
 esquema baseado em grupos com direitos diferentes, o que
simplifica a implementação por usar informações estáticas;
requer um gerente de grupos (superuser) confiável ...
 Além de proteger o acesso ao conteúdo dos arquivos, pode-se querer
controlar o acesso ao próprio sistema de arquivos
Proteção: Direitos de Acessos - Unix

 Modos de acesso: read, write, execute


 Três classes de usuários
RWX
a) owner access 7  111

RWX
b) groups access 6  110

RWX
c) public access 1  001

1- permissão
0 - negação
Proteção: Direitos de Acessos - Unix

 O gerente cria o grupo G (nome único) e adiciona usuários ao grupo


 Para um arquivo específico - game - ou subdiretório, o usuário
define um modo de acesso

owner group public

chmod 761 game

 arquivos podem ser associados a grupo


chgrp G game
Acesso Simultâneo: Concorrência
 Usuário pode bloquear (usando mecanismo de lock) o arquivo
inteiro para obter acesso exclusivo; alternativamente, pode
bloquear blocos específicos (records)
 Exclusão mútua e bloqueio são problemas que devem ser
considerados pelo programador e pelo OS
 Em geral, locks são disponibilizados como extensões de OSs
 Semântica do Unix
 vários processos podem abrir e usar o mesmo arquivo;
escritas são vistas por todos os processos
 o ponteiro de acesso pode ser individual ou compartilhado,
caso em que os avanços do ponteiro é visto por todos
Organização do Sistema de Arquivos
 Projeto de Sistem de Arquivos, envolve dois domínios:
 Visão do usuário / Unidade Lógica de Armazenamento: atributos, operações,
estrutura visível de diretórios
 Visão Interna do Sistema / Coleção de informações relacionadas: algoritmos de
acesso, mapeamento lógico físico
 O sistema de arquivos é (geralmente) organizado em camadas, tais como:
 controle de E/S: composta pelos device drivers, recebe comandos tipo Lê bloco 156
 sistema básico de arquivos: identifica os dispositivos e blocos a serem operados
 módulo de organização: mapea a organização lógica na estrutura física; blocos
númerados de 0 a n são mapeados nos elementos físicos reais (setores); mantém o
controle dos blocos livres
 sistema lógico de arquivos: usa a estrutura de diretório para prover as informações
sobre os arquivos; também responsável por proteção e segurança, incluindo
confiabilidade
 File control block, File Descriptor: estrutura de dados armazenada na open-file-table que
contém as informações básicas para permitir o acesso ao arquivo rapidamente
Alocação Contígua (i)
 Cada arquivo ocupa um conjunto contíguo de blocos no disco; o
tamanho do arquivo tem que ser conhecido de antemão; tendência de
estimar tamanho exagerado
 Acesso arbitrário e rápido: requer o bloco inicial (block #) e o tamanho
do arquivo (número de blocos)
 Gerenciamento complicado: dificuldade de alocar espaço para arquivos
novos (políticas first/best fit); arquivos existentes não podem crescer
 Fragmentação externa: disperdício de espaço devido à alocação
dinâmica; necessidade de compactação

Q
Tamanho do arquivo / Tamanho do bloco
R
 Posição do bloco = Q + endereço do bloco inicial
 Deslocamento dentro do bloco = R
Alocação Contígua (ii)

FileA
0 1 2 3 4
File Allocation Table
5 6 7 8 9
File Name Start Block Length
FileB
FileA 2 3
10 11 12 13 14
FileB 9 5
FileC 18 8
15 16 17 18 19 FileD 30 2
FileC FileE 26 3
20 21 22 23 24
FileE
25 26 27 28 29
FileD
30 31 32 33 34
Alocação por Encadeamento
 Cada arquivo é uma lista encadeada de blocos que podem ser espalhados no disco; elimina
a fragmentação externa e facilita o gerenciamento do espaço no disco
 Desempenho bom para acesso sequencial, mas ineficiente para acesso arbitrário
 Os ponteiros ocupam espaço (overhead): 4 bytes em 512 (0,78%); agrupamento de blocos
(clusters) pode ser usado
 A confiabilidade depende do encadeamento dos blocos que pode ser perdido se um
ponteiro for corrompido
 A variante com FAT (File Allocation Table) torna o esquema bastante eficiente; a FAT
fica em cache (na memória principal) para acesso rápido e pode ser duplicada para
confiabilidade

ponteiro
bloco
Alocação por Encadeamento

 aloca e encadea conforme requerido


 o arquivo começa no bloco 9
Alocação por Encadeamento com FAT

entrada no diretório 0

teste ... 217 217 618

339 eof
nome do arquivo
618 339

FAT: file allocation table

n-1
Alocação por Encadeamento com FAT

0 x tamanho
1 x do disco
arquivo C 2 eof
6 8 4 2 3 13
4 2
5 9
arquivo B 5 9 12 6 8
7 free
8 *
9 12
arquivo C 10 3 13 10 3
11 free
12 eof
13 eof
14 bad
free
* deve ser 4; se diferente indica corrupção

n-1
Alocação por Tabela de Índices

 reune os ponteiros para os blocos do arquivo em um bloco de


índices (index block), que constitui o overhead
 permite acesso arbitrário e alocação dinâmica sem fragmentação
externa
 o mapeamento lógico-físico de um arquivo de 256K em um disco com
bloco de 512 palavras requer (somente) um bloco de índice

Q
LA/512
blocos no disco
R
 Q = deslocamento na tabela de índices
 R = deslocamento no bloco
tabela de índices
Alocação por Tabela de Índices
Tabela de Índices– mapeamento em 2 níveis
 Tabela em dois níveis: tamanho máximo do arquivo 5123
Q1
Endereço Lógico / (512 x 512)
R1

 Q1 = deslocamento na tabela de índices interna (nível 1); usado para calcular a posição do ponteiro para o
segundo bloco:
 R1 é usado para calcular a posição do ponteiro no segundo bloco:

Q2
R1 / 512
R2

 Q2 = deslocamento dentro do bloco da tabela de índices (nível 2)


 R2 = deslocamento no bloco do arquivo no disco
Alocação por Índices– mapeamento em dois níveis (ii)

end. lógico Q2

R2
Q1

bloco no disco
nível I

nível II
Esquema combinado: UNIX (4K bytes por bloco)
Espaço Livre: Mapa de bits
 Vetor de bits - n blocos 0 1 2 n-1
 Cálculo do número do bloco
0 0 0 1 1 1 … 1

(número de bits por palavra) * 0  bloco[i] livre


(número de palavras com zeros) + bit[i] =
deslocamento do primeiro bit 1 1  bloco[i] ocupado

 Facilita obter espaços/arquivos contíguos


 Espaço requerido para o mapa de bits
tamanho do bloco = 212 bytes (4kbytes)
tamanho do disco = 230 bytes (1 gigabyte)
n = 230/212 = 218 bits (32K bytes)
Espaço Livre: Lista Encadeada
 Lista de blocos livres: encadea os blocos livres em uma única lista (free
list), onde cada bloco contém um ponteiro para o próximo
 a cabeça da lista aponta para o primeiro bloco livre
 requer a leitura da lista para a obtenção de blocos, o que consome um
tempo razoável (gasto com E/S)
 dificulta a obtenção de blocos contíguos
 Agrupamento: o bloco de tamanho n contém n-1 ponteiros para blocos
livres e um ponteiro para um próximo bloco com organização semelhante;
isto permite obter um grande número de blocos rapidamente
 Contagem: além do ponteiro para o bloco livre, mantém a contagem dos
próximos blocos que também estão livres; embora cada entrada requeira
mais espaço, na média ganha-se espaço considerando que em muitos casos a
contagem é maior que 1
 A técnica da FAT implementa esse método através de uma estrutura de
dados separada superando alguns de seus problemas
Gerenciamento do Espaço Livre (Cont.)

 Requisito de Tolerância a Falhas / Confiabilidade: pontos fracos


 Ponteiro para a lista de blocos livres / FAT: replicação e algoritmos
de recuperação
 Mapa de bits
 Tem que manter cópia em disco
 As cópias em memória e em disco têm que ser consistentes, ou
seja, para um bloco[i] não pode ocorrer o caso onde bit[i] = 1
em memória e bit[i] = 0 no disco
 Solução:
– Seta bit[i] = 1 no disco
– Aloca o bloco[i]
– Seta bit[i] = 1 na memória
– assim, se ocorrer falha o mapa de bits em memória pode
ser facilmente recuperado
Implementação de Diretórios
 Lista linear de nomes com ponteiros para os blocos de dados
 simples de programar
 busca de nome para acesso ou criação pode gastar muito tempo; não é
problema para sistema pequenos
 uma cache para acessos a diretórios mais recentes melhora esse tempo
 a ordenação dos nomes também melhora a busca (permite usar busca
binária), mas dificulta o gerenciamento da criação e deleção
 Tabela de Hash – lista linear com acesso via tabela de hash
 reduz o tempo de busca no diretório
 o tamanho fixo da tabela de hash e o tratamento de colisões de nomes de
arquivos complica o código
 o aumento da tabela requer sua reorganização
 chained overflow hash table: cada entrada de hash aponta para uma lista
que armazena as colisões; alonga a busca mas é mais rápido que a busca
linear
Eficiência e Desempenho
 Eficiência no uso do disco depende de:
 algoritmos e estruturas de alocação de arquivos e diretórios: mesmo um
disco vazio reserva espaço para o diretório (e.g., i-nodes no Unix, FAT
no Windows,
 tipos de dados mantidos nas entradas de arquivos no diretório: data da
última leitura ou/e escrita; sempre tem que ser atualizadas
 tamanho dos ponteiros: 32bits/4gigabytes; 64bits/ …; têm que ser
armazenados e ocupam espaço
 Desempenho no tempo e taxa de acesso depende de:
 cache de disco; Solaris trata toda memória física livre como cache para
disco e paginação; mapeamento de arquivos em memória virtual; uso de
disco virtual ou RAM disk; uso de memória de outras máquinas ...
 no acesso sequencial os blocos já acessados podem ser descartados (free-
behind) e os próximos blocos podem ser lidos em avanço (read-ahead)
 tamanho e disposição física dos blocos
Taxa de Transferência X Utilização de Espaço em Disco

taxa de transferência utilização de espaço


(Kbytes/seg) (%)

200 100

150 75

100 50

50 25

0 0
128 256 512 1K 2K 4K 8k
tamanho do bloco no disco

gráfico para arquivos de tamanho médio = 1Kbyte


Pontos de Cache de Disco

 Controlador do disco: pode armazenar setores e trilhas


 Ram-disk: trabalha como um disco aceitando todas as operações típicas;
difere de caches de disco por ter seu conteúdo controlado pelo usuário; seu
conteúdo tem que ser salvo ou protegido nos casos de reboot ou falha de
energia
Técnicas de Recuperação

 Verificador de Consistência: compara dados na estrutura de diretórios


com os blocos de dados no disco e tenta corrigir as inconsistências; a
técnica usada depende do sistema particular: por exemplo, varrer todas
as entradas da FAT e remendar onde for possível; a perda de um bloco
de índices pode ser irrecuperável
 Usar programas para fazer cópia reserva (back-up) dos dados do disco,
(automaticamente ou manualmente) em outro dispositivo de
armazenamento: floppy disk ou drives especiais (ZIP), fita magnética,
cd R/W, etc
 Copiar o disco inteiro: pode gastar muito tempo
 Copiar periodicamente somente o que foi modificado após a
última cópia total (realizada em intervalo mais longo)
 a recuperação envolve restabelecer a última cópia total e
realizar sucessivamente as atualizações parciais até a última

Você também pode gostar