Gerência de
Arquivos
Prof. Dr. André Luiz da Costa Carvalho andre@icomp.ufam.edu.br
Arquivos
•
Conjunto de dados não volá@l, com um nome para referência
posterior.
•
Conteúdo versá@l
• De textos de poucos bytes até filmes em alta definição
•
Organizados hierarquicamente
• Diretórios
•
Sistema de arquivos
• Organização Msica e lógica dos arquivos em um disposi@vo.
• Ex: NTFS, Fat32, Ext*,HPFS, ReiserFS.
Atributos de um arquivo
• Nome: Sequência de caracteres que iden@fica o arquivo
• Tipo.
• Indicação do formato dos dados do arquivo, como áudio, vídeo, imagem, texto e etc.
• Muitos S.O.s usam o próprio nome do arquivo, no formato de extensões.
• Data de criação, úl@ma modificação e acesso.
• Proprietário: Qual usuário criou o arquivo.
• Permissões: O que pode ser feito com o arquivo (leitura, gravação,
execução).
• Localização no disposi@vo Msico.
• Outros.
• Variam de S.O. para S.O.
Operações básicas
•
Criar
•
Abrir
• Necessário antes de qualquer operação de leitura/gravação.
• Solicitação ao S.O. do uso do arquivo.
• O mesmo checa se o usuário/programa tem a permissão
necessária, onde o arquivo está fisicamente e se ele está disponível no momento.
•
Ler
•
Escrever
•
Mudar atributos
•
Fechar
• Libera recursos usados ao abrir o arquivo e torna-‐o disponível.
Formato de arquivos
•
Arquivos são flexíveis.
• Autor pode gravar a informação do jeito que lhe convém.
•
Alguns formatos padrão foram criados para facilitar a troca de
arquivos.
• Jpeg, pdf, gif, mp3, avi.
• Porém isto não impede aplicações de u@lizarem formatos
proprietários.
• PSD (Photoshop)
•
Arquivos de texto
• Forma comum (porém pouco eficiente) de guardar informação
textual simples.
• Códigos fonte, html, xml.
Arquivos de texto
•
Sequência de caracteres.
•
Linhas são formadas logicamente, e não na prá@ca.
• Um separador é u@lizado no meio da sequência para indicar onde
acaba uma linha.
• Unix e similares: “\n”. Windows: “\r seguido de “\n”
Executáveis
• Executáveis tem uma
organização fixa.
• Dependente do S.O.
• UNIX:
• Executable and Linking Format (ELF). Formado por um
cabeçalho e vários segmtos e seções, contendo o código executável, tabela de símbolos e informações de relocação de código
• Windows:
• Portable Executable (PE): adaptação do an@go formato COFF, usado anteriormente no UNIX.
Identi>icação de conteúdo
•
Dos/Windows
• Extensões.
• Nascido da falta de recursos.
• DOS u@lizava o padrão 8.3 para o nome dos arquivos.
• 8 caracteres para o nome, 3 para a extensão.
•
Unix
• Além de extensões, os bytes iniciais de um arquivo podem ser
u@lizados para iden@ficar seu @po.
• Arquivos sem extensão ainda podem ser abertos.
•
MacOS9
Tipos MIME
•
Mul@purpose Internet Mail Extensions
•
U@lizado para troca de arquivos por email
• Muitas vezes o conteúdo pode vir em arquivos sem extensão
• U@lizado também para resolver o problema de dados embedded
em emails.
•
MacOS X
Arquivos especiais
• Abstrações de disposi@vos de baixo nível
• Unix mapeia disposi@vos em arquivos dentro doo diretório /dev
• /dev/oyS0 – porta serial COM1
• /dev/audio – placa de som
• /dev/sda1 – primeira par@ção do primeiro disco SATA/SCSI
• Abstração de interfaces do núcleo
• Unix nos diretórios /proc e /sys disponibilizam informações do sistema.
• /proc/cpuinfo – informações sobre o processador
• /proc/3754/maps – áreas de memória alocadas pelo processo de PID 3754
• /sys/block/sda/queue/scheduler – definição de polí@ca de escalonamento do disco a ser usada em /dev/sda.
• Canais de comunicação entre processos.
USANDO ARQUIVOS
Usando arquivos
•
Programas, para u@lizar arquivos, geralmente dispõe de uma
interface disponibilizada pela linguagem de programação.
•
Arquivo geralmente é u@lizado através de:
• Uma representação lógica do arquivo, que nada mais é que uma
referência a um arquivo no disco.
• Um conjunto de funções para realizar operações no arquivo
descrito pela representação.
• Através destas funções são feitas chamadas de sistema para
Abrindo arquivos
•
Antes de se trabalhar com arquivos, é necessário abri-‐los.
• Abrir = preparar estruturas de memórias necessárias para
manipular o arquivo em questão.
•
Etapas:
• Localizar o arquivo no disposi@vo Msico, usando seu nome e
caminho de acesso
• Verificar se a aplicação tem permissão para usar aquele arquivo
da forma desejada (leitura e/ou escrita);
• Criar uma estrutura na memória do núcleo para representar o
arquivo aberto;
• Inserir uma referência a essa estrutura na lista de arquivos
abertos man@da pelo sistema, para fins de gerência;
• Devolver à aplicação uma referência a essa estrutura, para ser
Abrindo arquivos
•
Após a abertura, o processo solicitante recebe uma referência
ao arquivo recém-‐aberto.
• Todas as operações subsequentes devem ser feitas com ela.
•
Fechando arquivos
• Conclui todas as operações de escrita pendentes e remove
estruturas da memória. • Limite de arquivos abertos
• Padrão linux 1024
•
Referências em C
• FILE *
• Não é o arquivo propriamente dito, apenas um ponteiro as
Abrindo Arquivos
•
Windows
• File Handles – structs que representam os arquivos abertos
•
Unix
• File Descriptors – Número inteiro que serve de índice em uma
Formas de acesso
•
Acesso sequencial
• Dados são sempre lidos em sequência.
• Cada arquivo tem um ponteiro de acesso, que a cada leitura/
gravação é incrementado.
• Ao chegar ao final do arquivo, leituras não são permi@das, porém
escritas são.
• Ao chegar no fim do arquivo, uma flag de fim do arquivo (End of
Formas de acesso
•
Acesso direto ou aleatório
• Se indica em qual posição do arquivo onde cada leitura ou escrita
pode ser feita, sem a necessidade de um ponteiro.
• Importante para aplicações como banco de dados e afins.
•
Boa parte dos S.O.s usa o acesso sequencial como modo
padrão, com operações de movimentação do ponteiro do
arquivo.
Formas de Acesso
•
Mapeamento em memória
• Baseado em memória virtual (paginação).
• Arquivo é associado a um vetor do mesmo tamanho que o
arquivo na memória.
• Cada posição no arquivo tem uma equivalente no vetor.
• Ao se ler uma posição do vetor que não foi lida, ocorre um page
fault, e a gerência de memória virtual carrega a porção do arquivo para a memória.
• Muito mais rápido que fazer read e write.
• Tratamento de Page Fault é bem mais rápido que todo o ciclo de vida
Formas de Acesso
•
Mapeamento em Memória
• Vantagem principal: Eficiência em muitos casos.
• As vezes a cache do S.O. pode ser mais rápida que ela.
• Paginação sob demanda de executável
• Ao carregar um executavel, S.O. o mapeia na memória, e carrega os
Controle de acesso
•
S.O. disponibiliza controle de acesso aos arquivos.
•
Forma usual de controle:
• Proprietário: Criador do arquivo. Muitos S.O.s também definem
um grupo proprietário.
• Permissões: Definem que operações podem ser feitas em um
arquivo.
•
ACL – Access Control Lists – Formas de definir quais são as
Controle de Acesso
• Esta abordagem pode ser problemá@ca em sistemas com muitos
usuários e arquivos. • Unix:
• 3 níveis de permissões: Dono (User), Grupo do dono (Group) e demais
usuários (Others)
• 3 permissões Leitura (r), escrita (e) e execução (x).
• 9 bits para permissões.
• NTFS
ORGANIZAÇÃO DE DISCOS
Organização de Volumes
•
Normalmente, discos são visualizados pelos S.O.s como um
único @po, independente de sua natureza (Cd-‐RW, HD, SSD,
Pendrive).
• Disposi@vos que gravam e lêem blocos (block devices)
•
Padrão PC.
• Espaço de armazenamento sempre possui uma área inicial de
configuração.
• MBR – Master Boot Record.
• Contém a tabela de par@cionamento.
• Também um pequeno código executável, necessário para o
lançamento do S.O., se o disco for inicializável.
Organização de Volumes
•
Restante do espaço pode ser dividido em 1 ou mais par@ções
de dados, disponíveis para o armazenamento de arquivos.
•
Cada par@ção deve ser formatada, ou seja, estruturada para
conter um sistema de arquivos, diretórios, atalhos e etc.
Diretórios
•
Arquivos em um sistema moderno podem facilmente chegar
aos milhões
•
Para organização, arquivos são organizados em diretórios
hierárquicos.
•
Diretório Raiz: diretório principal de um volume.
Diretórios
•
Implementação simples:
cada diretório é um
arquivo, cujo conteúdo é
uma lista de entradas.
• Entradas são arquivos,
atalhos ou outros diretórios.
• Contém nome, @po e
localização Msica.
• Não contém fisicamente,
apenas ponteiros.
• Duas entradas padrão: “.”
que é um ponteiro para o próprio diretório, e “..” que é um ponteiro para o seu pai.
Caminhos
•
Para se localizar um arquivo na hierarquia, normalmente é
necessário saber sua localização completa.
• Composta pelo nome de todos os diretórios pais deste arquivo +
separadores.
• Windows “\”. Unix “/”
•
Diretório de trabalho
• Diretório “atual” onde um terminal está rodando.
Referências
•
Direta: Somente o nome do arquivo. Válida somente para
arquivos no diretório atual.
• Prova1.doc, dados.dat
•
Absoluta: Caminho completo é fornecido; Independe do
diretório de trabalho.
• \Windows\system32\drivers\hosts.lm
•
Rela@va: Parte do diretório de trabalho atual e “navega” para
sub-‐diretórios ou diretórios acima através da referência “..”
File Lookup
• /usr/lib/X11/libX.a
• Acessar o disco para ler o VBR (Volume Boot Record) do volume;
• Nos dados lidos, descobrir onde se encontra o diretório raiz (/) daquele
sistema de arquivos;
• Acessar o disco para ler o diretório raiz;
• Nos dados lidos, descobrir onde se encontra o diretório usr;
• Acessar o disco para ler o diretório usr;
• Nos dados lidos, descobrir onde se encontra o diretório lib;
• Acessar o disco para ler o diretório lib;
• Nos dados lidos, descobrir onde se encontra o diretório X11;
• Acessar o disco para ler o diretório X11;
• Nos dados lidos, descobrir onde se encontra o arquivo libX11.a;
• Acessar o disco para ler o bloco de controle do arquivo libX11.a, que
contém seus atributos;
• Criar as estruturas em memória que representam o arquivo aberto;
Localização de um arquivo
•
Trabalhoso
• 5 leituras no disco no exemplo apenas para localizar o arquivo
desejado no disco.
•
Solução: Cache de entrada de diretórios (Sim, cache de novo
J
)
• LRU
Links (Atalhos)
•
Pode ser necessário ter um mesmo arquivo ou diretório
replicado em várias posições do disco.
• Bibliotecas
•
Pode se perder muito tempo acessando arquivos/diretórios
que estão em níveis profundos da hierarquia
• Especialmente no terminal.
•
Links são uma forma de criar ponteiros para arquivos/
diretórios.
• Economizando espaço em disco.
Links
•
Links Simbólicos (so| links):
• Cada cópia é uma pequena string contendo o caminho até o
arquivo/diretório original.
• Pode estar localizado em outros disposi@vos Msicos.
• Independentes: Se moverem o arquivo original, os links não são
atualizados automa@camente.
• Broken Links
•
Links Físicos (hard links):
• Vários arquivos diferentes apontam para a mesma posição no
disposi@vo.
• Devem necessariamente estar no mesmo volume.
• Não podem ser u@lizados para diretórios (Unix)
• Contador de referências: Conteúdo só é apagado de fato quando
Montagem de Volumes
•
Antes de u@lizar um volume, o S.O. deve ler seu bloco de
inicialização e criar estruturas em memória para representá-‐lo
no núcleo.
• Montagem e desmontagem.
•
Frequente no caso de mídias móveis (CD,USB)
•
Para montar, é necessário um ponto de montagem.
• No Unix, um diretório qualquer dentro da árvore principal de
arquivos.
• No Windows, como um novo volume, com uma letra condizente.
Montagem de Volumes
•
Estudo de caso: Unix:
• Volume principal: Montado durante a inicialização do sistema
operacional na raiz do sistema de arquivos ( “/” )
• Pastas padrão do unix na raiz, como /home,/lib,/bin,/usr e etc.
• Linux, MacOS X também.
• Outras unidades normalmente podem ser montadas em /mnt
ou /media, a depender do sistema.
• Montagem de USB e CD, normalmente automá@ca.
• E se não funcionar?
• mount –t <sistema_de_arquivos> <device> <ponto_de_mnt>