VI - Gerncia de Arquivos
Prof. Carlos Alberto Maziero
DAInf UTFPR
http://dainf.ct.utfpr.edu.br/maziero
2 de junho de 2013
Este texto est licenciado sob a Licena Attribution-NonCommercial-ShareAlike 3.0 Unported da Creative
Commons (CC). Em resumo, voc deve creditar a obra da forma especificada pelo autor ou licenciante (mas
no de maneira que sugira que estes concedem qualquer aval a voc ou ao seu uso da obra). Voc no
pode usar esta obra para fins comerciais. Se voc alterar, transformar ou criar com base nesta obra, voc
poder distribuir a obra resultante apenas sob a mesma licena, ou sob uma licena similar presente.
Para ver uma cpia desta licena, visite http://creativecommons.org/licenses/by-nc-sa/3.0/.
Este texto foi produzido usando exclusivamente software livre: Sistema Operacional GNU/Linux (distribuies Fedora e Ubuntu), compilador de texto LATEX 2 , gerenciador de referncias BibTeX, editor grfico
Inkscape, criadores de grficos GNUPlot e GraphViz e processador PS/PDF GhostScript, entre outros.
c Carlos Maziero
: SUMRIO
Sumrio
1
Arquivos
1.1 O conceito de arquivo . . . . . .
1.2 Atributos . . . . . . . . . . . . . .
1.3 Operaes . . . . . . . . . . . . .
1.4 Formatos . . . . . . . . . . . . . .
1.4.1 Arquivos de registros . .
1.4.2 Arquivos de texto . . . . .
1.4.3 Arquivos executveis . .
1.4.4 Identificao de contedo
1.5 Arquivos especiais . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
5
6
6
7
8
9
10
Uso de arquivos
2.1 Abertura de um arquivo . . . .
2.2 Formas de acesso . . . . . . . .
2.3 Controle de acesso . . . . . . .
2.4 Compartilhamento de arquivos
2.4.1 Travas em arquivos . . .
2.4.2 Semntica de acesso . .
2.5 Exemplo de interface . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
12
14
16
16
17
18
.
.
.
.
20
20
22
25
26
.
.
.
.
.
.
.
.
.
28
28
30
31
32
33
36
41
41
43
Organizao de volumes
3.1 Diretrios . . . . . . . .
3.2 Caminhos de acesso . .
3.3 Atalhos . . . . . . . . .
3.4 Montagem de volumes
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sistemas de arquivos
4.1 Arquitetura geral . . . . . . . .
4.2 Blocos fsicos e lgicos . . . . .
4.3 Alocao fsica de arquivos . .
4.3.1 Alocao contgua . . .
4.3.2 Alocao encadeada . .
4.3.3 Alocao indexada . . .
4.3.4 Anlise comparativa . .
4.3.5 Gerncia de espao livre
4.4 O sistema de arquivos virtual .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tpicos avanados
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
44
c Carlos Maziero
: Arquivos
Resumo
Um sistema operacional tem por finalidade permitir que o usurios do computador executem aplicaes, como editores de texto, jogos, reprodutores de udio e
vdeo, etc. Essas aplicaes processam informaes como textos, msicas e filmes,
armazenados sob a forma de arquivos em um disco rgido ou outro meio. Este
mdulo apresenta a noo de arquivo, suas principais caractersticas e formas de
acesso, a organizao de arquivos em diretrios e as tcnicas usadas para criar e
gerenciar arquivos nos dispositivos de armazenamento.
Arquivos
1.1
O conceito de arquivo
1.2
Atributos
Conforme apresentado, um arquivo uma unidade de armazenamento de informaes que podem ser dados, cdigo executvel, etc. Cada arquivo caracterizado por um
3
c Carlos Maziero
: Atributos
bin
home
ls
usr
bin
daniel
henrique
gcc
cp
arq1.txt
relat.pdf
firefox
mv
play.mp3
foto.jpg
perl
diretrios
ooffice
arquivos
c Carlos Maziero
: Operaes
1.3
Operaes
Alguns sistemas operacionais, como o TOPS-20 e o OpenVMS, possuem sistemas de arquivos com
suporte automtico a mltiplas verses do mesmo arquivo.
c Carlos Maziero
1.4
: Formatos
Formatos
Arquivos de registros
struct
char
char
int
int
int
}
{
nome[40];
CPF[10];
idade;
peso;
altura;
nome (chave)
telefone (valor)
daniel
marina
henrique
gabriel
renata
andressa
guilherme
9977-1173
9876-5432
8781-9750
8858-8286
9663-9293
8779-5538
9979-4166
c Carlos Maziero
: Arquivos de texto
Arquivos de texto
Um tipo de arquivo de uso muito frequente o arquivo de texto puro (ou plain text).
Esse tipo de arquivo muito usado para armazenar informaes textuais simples, como
cdigos-fonte de programas, arquivos de configurao, pginas HTML, dados em XML,
etc. Um arquivo de texto formado por linhas de caracteres ASCII de tamanho varivel,
separadas por caracteres de controle. Nos sistemas UNIX, as linhas so separadas por
um caractere New Line (ASCII 10 ou \n). J nos sistemas DOS/Windows, as linhas
de um arquivo de texto so separadas por dois caracteres: o caractere Carriage Return
(ASCII 13 ou \r) seguido do caractere New Line. Por exemplo, considere o seguinte
programa em C armazenado em um arquivo hello.c (os caracteres indicam espaos
em branco):
int main()
{
printf("Hello, world\n");
exit(0);
}
1
2
3
4
5
0000
2
3
0010
4
5
0020
6
7
0030
69
i
72
r
72
r
30
0
6e
n
69
i
6c
l
29
)
74
t
6e
n
64
d
3b
;
20 6d
m
74 66
t f
5c 6e
\ n
0a 7d
\n }
61 69 6e 28 29 0a 7b 0a 20 20 70
a i n ( ) \n { \n
p
28 22 48 65 6c 6c 6f 2c 20 77 6f
( " H e l l o ,
w o
22 29 3b 0a 20 20 65 78 69 74 28
" ) ; \n
e x i t (
0a
\n
Por outro lado, o mesmo arquivo hello.c seria armazenado da seguinte forma em
um sistema DOS/Windows:
1
0000
2
3
0010
4
5
0020
6
7
0030
69 6e 74
i n t
20 70 72
p r
77 6f 72
w o r
69 74 28
i t (
20 6d
m
69 6e
i n
6c 64
l d
30 29
0 )
61
a
74
t
5c
\
3b
;
69
i
66
f
6e
n
0d
\r
6e
n
28
(
22
"
0a
\n
28
(
22
"
29
)
7d
}
29
)
48
H
3b
;
0d
\r
0d
\r
65
e
0d
\r
0a
\n
0a 7b 0d 0a 20
\n { \r \n
6c 6c 6f 2c 20
l l o ,
0a 20 20 65 78
\n
e x
c Carlos Maziero
: Arquivos executveis
Arquivos executveis
Sections
Program
header table
Segments
Section
header table
c Carlos Maziero
1.4.4
: Identificao de contedo
Identificao de contedo
Um problema importante relacionado aos formatos de arquivos a correta identificao de seu contedo pelos usurios e aplicaes. J que um arquivo de dados
pode ser visto como uma simples sequncia de bytes, como possvel saber que tipo
de informao essa sequncia representa? Uma soluo simples para esse problema
consiste em indicar o tipo do contedo como parte do nome do arquivo: um arquivo
praia.jpg provavelmente contm uma imagem em formato JPEG, enquanto um
arquivo entrevista.mp3 contm udio em formato MP3. Essa estratgia, amplamente utilizada em muitos sistemas operacionais, foi introduzida nos anos 1980 pelo
sistema operacional DOS. Naquele sistema, os arquivos eram nomeados segundo uma
abordagem denominada 8.3, ou seja, 8 caracteres seguidos de um ponto (.) e mais 3
caracteres de extenso, para definir o tipo do arquivo.
Outra abordagem, frequentemente usada em sistemas UNIX, o uso de alguns
bytes no incio de cada arquivo para a definio de seu tipo. Esses bytes iniciais so
denominados nmeros mgicos (magic numbers), e so usados em muitos tipos de
arquivos, como exemplificado na Tabela 1:
Tabela 1: Nmeros mgicos de alguns tipos de arquivos
Tipo de arquivo
Documento PostScript
Imagem GIF
Msica MIDI
bytes iniciais
%!
GIF89a
MThd
Tipo de arquivo
Documento PDF
Imagem JPEG
Classes Java (JAR)
bytes iniciais
%PDF
0xFFD8
0xCAFEBABE
Nos sistema UNIX, o utilitrio file permite identificar o tipo de arquivo atravs
da anlise de seus bytes iniciais e do restante de sua estrutura interna, sem levar em
conta o nome do arquivo. Por isso, constitui uma ferramenta importante para identificar
arquivos desconhecidos ou com extenso errada.
Alm do uso de extenses no nome do arquivo e de nmeros mgicos, alguns
sistemas operacionais definem atributos adicionais no sistema de arquivos para indicar
o contedo de cada arquivo. Por exemplo, o sistema operacional MacOS 9 definia um
atributo com 4 bytes para identificar o tipo de cada arquivo (file type), e outro atributo
com 4 bytes para indicar a aplicao que o criou (creator application). Os tipos de arquivos
e aplicaes so definidos em uma tabela mantida pelo fabricante do sistema. Assim,
quando o usurio solicitar a abertura de um determinado arquivo, o sistema ir escolher
a aplicao que o criou, se ela estiver presente. Caso contrrio, pode indicar ao usurio
uma relao de aplicaes aptas a abrir aquele tipo de arquivo.
Recentemente, a necessidade de transferir arquivos atravs de e-mail e de pginas
Web levou definio de um padro de tipagem de arquivos conhecido como Tipos
MIME (da sigla Multipurpose Internet Mail Extensions) [Freed and Borenstein, 1996]. O
padro MIME define tipos de arquivos atravs de uma notao uniformizada na forma
tipo/subtipo. Alguns exemplos de tipos de arquivos definidos segundo o padro
MIME so apresentados na Tabela 2.
O padro MIME usado para identificar arquivos transferidos como anexos de
e-mail e contedos recuperados de pginas Web. Alguns sistemas operacionais, como
9
c Carlos Maziero
: Arquivos especiais
Significado
Arquivo de classes Java (JAR)
Documento do Microsoft Word
Documento do OpenOffice
udio em formato MIDI
udio em formato MP3
Imagem em formato JPEG
Imagem em formato PNG
Texto em formato CSV (Comma-separated Values)
Texto HTML
Texto puro
Texto em formato RTF (Rich Text Format)
Cdigo-fonte em C
Vdeo no formato Quicktime
o BeOS e o MacOS X, definem atributos de acordo com esse padro para identificar o
contedo de cada arquivo dentro do sistema de arquivos.
1.5
Arquivos especiais
c Carlos Maziero
: Uso de arquivos
apresentada aos dois processos envolvidos como um arquivo, sobre o qual eles
podem escrever (enviar) e ler (receber) dados entre si. Vrios mecanismos de
comunicao local entre processos de um sistema tambm usam a metfora do
arquivo, como o caso dos pipes em UNIX.
Em alguns sistemas operacionais experimentais, como o Plan 9 [Pike et al., 1993,
Pike et al., 1995] e o Inferno [Dorward et al., 1997], todos os recursos e entidades fsicas
e lgicas do sistema so mapeadas sob a forma de arquivos: processos, threads, conexes
de rede, usurios, sesses de usurios, janelas grficas, reas de memria alocadas,
etc. Assim, para finalizar um determinado processo, encerrar uma conexo de rede ou
desconectar um usurio, basta remover o arquivo correspondente.
Embora o foco deste texto esteja concentrado em arquivos convencionais, que visam o
armazenamento de informaes (bytes ou registros), muitos dos conceitos aqui expostos
so igualmente aplicveis aos arquivos no-convencionais descritos nesta seo.
Uso de arquivos
Arquivos so usados por processos para ler e escrever dados de forma no-voltil.
Para usar arquivos, um processo tem sua disposio uma interface de acesso, que
depende da linguagem utilizada e do sistema operacional subjacente. Essa interface
normalmente composta por uma representao lgica de cada arquivo usado pelo
processo (uma referncia ao arquivo) e por um conjunto de funes (ou mtodos) para
realizar operaes sobre esses arquivos. Atravs dessa interface, os processos podem
localizar arquivos no disco, ler e modificar seu contedo, entre outras operaes.
Na sequncia desta seo sero discutidos aspectos relativos ao uso de arquivos,
como a abertura do arquivo, as formas de acesso aos seus dados, o controle de acesso e
problemas associados ao compartilhamento de arquivos entre vrios processos.
2.1
Abertura de um arquivo
Para poder ler ou escrever dados em um arquivo, cada aplicao precisa antes
abr-lo. A abertura de um arquivo consiste basicamente em preparar as estruturas de
memria necessrias para acessar os dados do arquivo em questo. Assim, para abrir
um arquivo, o ncleo do sistema operacional deve realizar as seguintes operaes:
1. Localizar o arquivo no dispositivo fsico, usando seu nome e caminho de acesso
(vide Seo 3.2);
2. Verificar se a aplicao tem permisso para usar aquele arquivo da forma desejada
(leitura e/ou escrita);
3. Criar uma estrutura na memria do ncleo para representar o arquivo aberto;
4. Inserir uma referncia a essa estrutura na lista de arquivos abertos mantida pelo
sistema, para fins de gerncia;
11
c Carlos Maziero
: Formas de acesso
5. Devolver aplicao uma referncia a essa estrutura, para ser usada nos acessos
subsequentes ao arquivo recm-aberto.
Concluda a abertura do arquivo, o processo solicitante recebe do ncleo uma
referncia para o arquivo recm-aberto, que deve ser informada pelo processo em
suas operaes subsequentes envolvendo aquele arquivo. Assim que o processo tiver
terminado de usar um arquivo, ele deve solicitar ao ncleo o fechamento do arquivo,
que implica em concluir as operaes de escrita eventualmente pendentes e remover da
memria do ncleo as estruturas de gerncia criadas durante sua abertura. Normalmente,
os arquivos abertos so automaticamente fechados quando do encerramento do processo,
mas pode ser necessrio fech-los antes disso, caso seja um processo com vida longa,
como um daemon servidor de pginas Web, ou que abra muitos arquivos, como um
compilador.
As referncias a arquivos abertos usadas pelas aplicaes dependem da linguagem
de programao utilizada para constru-las. Por exemplo, em um programa escrito na
linguagem C, cada arquivo aberto representado por uma varivel dinmica do tipo
FILE*, que denominada um ponteiro de arquivo (file pointer). Essa varivel dinmica
alocada no momento da abertura do arquivo e serve como uma referncia ao mesmo
nas operaes de acesso subsequentes. J em Java, as referncias a arquivos abertos so
objetos instanciados a partir da classe File. Na linguagem Python existem os file objects,
criados a partir da chamada open.
Por outro lado, cada sistema operacional tem sua prpria conveno para a representao de arquivos abertos. Por exemplo, em sistemas Windows os arquivos abertos por
um processo so representados pelo ncleo por referncias de arquivos (file handles), que
so estruturas de dados criadas pelo ncleo para representar cada arquivo aberto. Por
outro lado, em sistemas UNIX os arquivos abertos por um processo so representados
por descritores de arquivos (file descriptors). Um descritor de arquivo aberto um nmero inteiro no-negativo, usado como ndice em uma tabela que relaciona os arquivos
abertos por aquele processo, mantida pelo ncleo. Dessa forma, cabe s bibliotecas e ao
suporte de execuo de cada linguagem de programao mapear a representao de
arquivo aberto fornecida pelo ncleo do sistema operacional subjacente na referncia
de arquivo aberto usada por aquela linguagem. Esse mapeamento necessrio para
garantir que as aplicaes que usam arquivos (ou seja, quase todas elas) sejam portveis
entre sistemas operacionais distintos.
2.2
Formas de acesso
Uma vez aberto um arquivo, a aplicao pode ler os dados contidos nele, modific-los
ou escrever novos dados. H vrias formas de se ler ou escrever dados em um arquivo,
que dependem da estrutura interna do mesmo. Considerando apenas arquivos simples,
vistos como uma sequncia de bytes, duas formas de acesso so usuais: o acesso sequencial
e o acesso direto (ou acesso aleatrio).
No acesso sequencial, os dados so sempre lidos e/ou escritos em sequncia, do
incio ao final do arquivo. Para cada arquivo aberto por uma aplicao definido um
ponteiro de acesso, que inicialmente aponta para a primeira posio do arquivo. A cada
leitura ou escrita, esse ponteiro incrementado e passa a indicar a posio da prxima
12
c Carlos Maziero
: Formas de acesso
15
23
35
45
60
leituras
Qui scribit bis legit. Non nova, sed nove. Felix qui potuit rerum...
c Carlos Maziero
: Controle de acesso
processo
acessos
vetor de bytes
pginas
lidas
pginas
escritas
arquivo em disco
2.3
Controle de acesso
c Carlos Maziero
1
2
3
: Controle de acesso
No entanto, essa abordagem se mostra pouco prtica caso o sistema tenha muitos
usurios e/ou arquivos, pois as listas podem ficar muito extensas e difceis de gerenciar.
O UNIX usa uma abordagem bem mais simplificada para controle de acesso, que
considera basicamente trs tipos de usurios e trs tipos de permisses:
Usurios: o proprietrio do arquivo (User), um grupo de usurios associado ao
arquivo (Group) e os demais usurios (Others).
Permisses: ler (Read), escrever (Write) e executar (eXecute).
Dessa forma, no UNIX so necessrios apenas 9 bits para definir as permisses de
acesso a cada arquivo ou diretrio. Por exemplo, considerando a seguinte listagem de
diretrio em um sistema UNIX (editada para facilitar sua leitura):
1
2
3
4
5
6
7
host:~> ls -l
d rwx --- --- rwx r-x --- rw- r-- r-- rw- --- --- rw- r-- r-- rw- --- ---
2
1
1
1
1
1
maziero
maziero
maziero
maziero
maziero
maziero
prof
prof
prof
prof
prof
prof
4096
7248
54
59
195780
40494
2008-09-27
2008-08-23
2008-08-23
2008-08-23
2008-09-26
2008-09-27
08:43
09:54
09:54
09:49
22:08
08:44
figuras
hello-unix
hello-unix.c
hello-windows.c
main.pdf
main.tex
c Carlos Maziero
: Compartilhamento de arquivos
impedir esse acesso. O controle contnuo de acesso aos arquivos pouco frequentemente
implementado em sistemas operacionais, porque verificar as permisses de acesso a cada
operao de leitura ou escrita em um arquivo teria um impacto negativo significativo
sobre o desempenho do sistema.
2.4
Compartilhamento de arquivos
Travas em arquivos
c Carlos Maziero
: Semntica de acesso
Semntica de acesso
c Carlos Maziero
: Exemplo de interface
71
open
p4
close
read
39
close
read
23
23
close
read
23
39
write
71
open
p2
write
open
p3
p1
12
read
write
39
open
close
read
write
read
t
Figura 6: Compartilhamento de arquivo usando a semntica de sesso.
2.5
Exemplo de interface
Como visto na Seo 2.1, cada linguagem de programao define sua prpria forma
de representar arquivos abertos e as funes ou mtodos usados para manipul-los.
A ttulo de exemplo, ser apresentada uma viso geral da interface para arquivos
oferecida pela linguagem C no padro ANSI [Kernighan and Ritchie, 1989]. Em C, cada
arquivo aberto representado por uma varivel dinmica do tipo FILE*, criada pela
funo fopen. As funes de acesso a arquivos so definidas na Biblioteca Padro de
Entrada/Sada (Standard I/O Library, definida no arquivo de cabealho stdio.h). As
funes mais usuais dessa biblioteca so apresentadas a seguir:
Abertura e fechamento de arquivos:
FILE * fopen (const char *filename, const char *opentype): abre o
arquivo cujo nome indicado por filename; a forma de abertura (leitura,
escrita, etc.) indicada pelo parmetro opentype; em caso de sucesso, devolve
uma referncia ao arquivo;
int fclose (FILE *f): fecha o arquivo referenciado por f;
Leitura e escrita de caracteres e strings:
int fputc (int c, FILE *f): escreve um caractere no arquivo;
int fgetc (FILE *f): l um caractere do arquivo ;
Reposicionamento do ponteiro do arquivo:
18
c Carlos Maziero
: Exemplo de interface
long int ftell (FILE *f): indica a posio corrente do ponteiro do arquivo referenciado por f;
int fseek (FILE *f, long int offset, int whence): move o ponteiro
do arquivo para a posio indicada por offset;
void rewind (FILE *f): retorna o ponteiro do arquivo sua posio inicial;
int feof (FILE *f): indica se o ponteiro chegou ao final do arquivo;
Tratamento de travas:
void flockfile (FILE *f): solicita acesso exclusivo ao arquivo, podendo
bloquear o processo solicitante caso o arquivo j tenha sido reservado por
outro processo;
void funlockfile (FILE *f): libera o acesso ao arquivo.
O exemplo a seguir ilustra o uso de algumas dessas funes. Esse programa abre um
arquivo chamado numeros.dat para operaes de leitura (linha 9), verifica se a abertura
do arquivo foi realizada corretamente (linhas 11 a 15), l seus caracteres e os imprime na
tela at encontrar o fim do arquivo (linhas 17 a 23) e finalmente o fecha (linha 25).
1
2
#include <stdio.h>
#include <stdlib.h>
3
4
5
6
7
9
10
11
12
13
14
15
16
while (1)
{
c = getc (arq) ; /* le um caractere do arquivo */
if (feof (arq)) /* chegou ao final do arquivo? */
break ;
putchar(c) ;
/* imprime o caractere na tela */
}
17
18
19
20
21
22
23
24
fclose (arq) ;
exit (0) ;
25
26
27
/* fecha o arquivo */
19
c Carlos Maziero
: Organizao de volumes
Organizao de volumes
partio 2
partio 3
3.1
Diretrios
c Carlos Maziero
: Diretrios
c Carlos Maziero
bin
etc
home
lib
proc
root
tmp
usr
var
: Caminhos de acesso
bin
lib
include
opt
sgml
skel
X11
X11
X11
asm
linux
g++
X11R6
bin
include
lib
local
man
share
src
tmp
adm
cache
cron
lib
local
log
mail
run
spool
X11
gcc-lib
groff
uucp
bin
doc
etc
include
lib
man
share
at
cron
lpd
mail
news
smail
doc
games
info
locale
man
zoneinfo
3.2
Caminhos de acesso
c Carlos Maziero
VBR
/
.
..
bin
etc
home
lib
usr
var
0101011
110000110
001101011
101110100
110000010
100011111
010110100
: Caminhos de acesso
0101011
110000110
001101011
101110100
110000010
100011111
010110100
bin
.
..
cp
ls
mv
D
D
A
A
A
home
.
..
daniel
ike
D
D
D
D
lib
.
..
X11
lib.a
lib.so
0101011
110000110
001101011
101110100
110000010
100011111
010110100
daniel
.
..
arq1
arq2
1111010
101010101
011010101
111110100
000100111
010101010
111100000
D
D
A
A
1100110
110011001
100110011
111110011
111110011
111111111
000000000
0000000
000000000
111100000
111111111
111111111
111000011
000010101
1100110
110011001
100110011
111110011
111110011
111111111
000000000
D
D
D
A
A
X11
.
D
..
D
libX.a A
0101011
110000110
001101011
101110100
110000010
100011111
010110100
prova1.doc
materiais.pdf
uma-bela-foto.jpg
c Carlos Maziero
: Caminhos de acesso
\Windows\system32\drivers\etc\hosts.lm
/usr/local/share/fortunes/brasil.dat
\Documents and Settings\Carlos Maziero\..\All Users\notas.xls
/home/maziero/bin/scripts/../../docs/proj1.pdf
imagens\satelite\brasil\geral.jpg
..\users\maziero\documentos\prova-2.doc
public_html/static/fotografias/rennes.jpg
../../../share/icons/128x128/calculator.svg
24
c Carlos Maziero
: Atalhos
11. Acessar o disco para ler o bloco de controle do arquivo libX11.a, que contm seus
atributos;
12. Criar as estruturas em memria que representam o arquivo aberto;
13. Retornar uma referncia ao arquivo para o processo solicitante.
Pode-se perceber que a localizao de arquivo um procedimento trabalhoso. Neste
exemplo, foram necessrias 5 leituras no disco (passos 1, 3, 5, 7 e 9) apenas para localizar
a posio do bloco de controle do arquivo desejado no disco. Assim, o tempo necessrio
para localizar um arquivo pode ser muito elevado, pois discos rgidos so dispositivos
lentos. Para evitar esse custo e melhorar o desempenho do mecanismo de localizao
de arquivos, mantido em memria um cache de entradas de diretrio localizadas
recentemente, gerenciado de acordo com uma poltica LRU (Least Recently Used). Cada
entrada desse cache contm um nome de arquivo ou diretrio e sua localizao no
dispositivo fsico. Esse cache geralmente organizado na forma de uma tabela hash, o
que permite localizar rapidamente os arquivos ou diretrios recentemente utilizados.
3.3
Atalhos
c Carlos Maziero
: Montagem de volumes
/
.
..
bin
etc
home
lib
usr
D
D
D
D
D
L
D
bin
.
..
cp
ls
rm
shell
0101011
110000110
001101011
101110100
110000010
100011111
010110100
D
D
A
A
A
L
link to:
/usr/bin/sh
link to:
/usr/lib
usr
.
..
bin
lib
D
D
D
D
bin
.
..
copy
cut
dir
sh
D
D
L
A
A
A
lib
.
..
X11
lib.a
lib.so
D
D
D
A
A
0101011
110000110
001101011
101110100
110000010
100011111
010110100
link to:
/bin/cp
0101011
110000110
001101011
101110100
110000010
100011111
010110100
3.4
Montagem de volumes
Atalhos fsicos para diretrios geralmente so proibidos porque permitiriam diretrios recursivos,
tornando muito complexa a implementao de rotinas de verificao e gerncia do sistema de arquivos.
26
c Carlos Maziero
: Montagem de volumes
home
dout
Disco rgido 2
espec
grad
alcides
mest
maziero
prof
santin
/
apagar
lib
media
usr
Disco rgido 1
var
backup
fotos
Pendrive USB
livro
cdrom
CD-ROM
bin
html
docs
extras
txt
install
27
c Carlos Maziero
: Sistemas de arquivos
Sistemas de arquivos
4.1
Arquitetura geral
28
c Carlos Maziero
: Arquitetura geral
processo
biblioteca de E/S
espao de usurio
chamadas de sistema
ncleo
sistema de arquivos virtual
alocao de arquivos
alocao de arquivos
gerncia de blocos
driver de dispositivo
driver de dispositivo
controlador
controlador
dispositivo
dispositivo
software
hardware
c Carlos Maziero
4.2
30
c Carlos Maziero
4.3
relat.pdf
blocos do dispositivo
instruc.txt
6
sinfonia.mp3
0
7 ...
31
c Carlos Maziero
: Alocao contgua
disco defeituosos (bad blocks) e dados corrompidos; e a flexibilidade oferecida por cada
estratgia para a criao, modificao e excluso de arquivos e diretrios.
4.3.1
Alocao contgua
Tabela de diretrio
01
nome
02
03
foto1.jpg
10417
relat.pdf
28211
13
6214
20
06
19116
24
07
instruc.txt
sinfonia.mp3
04
05
08
09
10
11
12
13
14
15
bloco em uso
16
17
bloco livre
18
19
20
21
22
23
24
25
26
27
28
29
c Carlos Maziero
: Alocao encadeada
do bloco inicial, conforme indica o algoritmo 1. De acordo com esse algoritmo, o byte
de nmero 14.372 do arquivo relat.pdf da Figura 14 estar na posio 2.084 do bloco
16 do disco rgido.
Algoritmo 1 Localizar a posio do i-simo byte do arquivo no disco
i: nmero do byte a localizar
B: tamanho dos blocos lgicos, em bytes
b0 : nmero do bloco do disco onde o arquivo inicia
bi : nmero do bloco do disco onde se encontra o byte i
oi : posio do byte i dentro do bloco bi (offset)
: diviso inteira
mod: mdulo (resto da diviso inteira)
bi = b0 + i B
oi = i mod B
return (bi , oi )
Esta estratgia apresenta uma boa robustez a falhas de disco: caso um bloco do disco
apresente defeito e no permita a leitura de seus dados, apenas o contedo daquele
bloco perdido: o contedo do arquivo nos blocos anteriores e posteriores ao bloco
defeituoso ainda podero ser acessados sem dificuldades. Por outro lado, o ponto
fraco desta estratgia sua baixa flexibilidade, pois o tamanho final de cada arquivo
precisa ser conhecido no momento de sua criao. Alm disso, esta estratgia est
sujeita fragmentao externa, de forma similar tcnica de alocao contgua estudada
nos mecanismos de alocao de memria (vide Seo ??): medida em que arquivos
so criados e destrudos, as reas livres do disco vo sendo fracionadas em pequenas
reas isoladas (os fragmentos) que diminuem a capacidade de alocao de arquivos
maiores. Por exemplo, na situao da Figura 14 h 13 blocos livres no disco, mas somente
podem ser criados arquivos com at 7 blocos de tamanho. As tcnicas de alocao
first/best/worst-fit utilizadas em gerncia de memria tambm podem ser aplicadas para
atenuar este problema. Contudo, a desfragmentao de um disco problemtica, pois
pode ser uma operao muito lenta e os arquivos no devem ser usados durante sua
realizao.
A baixa flexibilidade desta estratgia e a possibilidade de fragmentao externa
limitam muito seu uso em sistemas operacionais de propsito geral, nos quais os arquivos
so constantemente criados, modificados e destrudos. Todavia, ela pode encontrar uso
em situaes especficas, nas quais os arquivos no sejam modificados constantemente e
seja necessrio rapidez nos acessos sequenciais e diretos aos dados. Um exemplo dessa
situao so sistemas dedicados para reproduo de dados multimdia, como udio e
vdeo.
4.3.2
Alocao encadeada
Esta forma de alocao foi proposta para contornar a pouca flexibilidade da alocao
contgua e eliminar a fragmentao externa. Nela, cada bloco do arquivo no disco
33
c Carlos Maziero
: Alocao encadeada
Tabela de diretrio
01
02
foto1.jpg
10417
03
relat.pdf
28211
13
6214
20
06
19116
24
07
nome
instruc.txt
sinfonia.mp3
04
05
08
09
10
11
12
13
14
15
bloco em uso
16
17
bloco livre
18
19
20
21
22
23
24
25
26
27
28
29
c Carlos Maziero
: Alocao encadeada
35
c Carlos Maziero
: Alocao indexada
Tabela de alocao
de arquivos
00
01
02
foto1.jpg
10417
03
relat.pdf
28211
13
04
02
05
6214
20
06
19116
24
07
04
08
Tabela de diretrio
nome
instruc.txt
sinfonia.mp3
bloco em uso
bloco livre
09
10
12
11
12
13
16
14
15
16
17
17
19
18
19
22
20
21
21
22
10
23
24
26
25
26
27
27
28
28
29
Alocao indexada
c Carlos Maziero
: Alocao indexada
Tabela de i-nodes
Tabela de diretrio
nome
i-node
foto1.jpg
relat.pdf
instruc.txt
10
sinfonia.mp3
31
10417
...
i-node 5
bloco em uso
bloco livre
19
ponteiros
de dados
22
10
12
null
null
null
37
c Carlos Maziero
max =
+
+
+
=
max
: Alocao indexada
4096 12
4096 1024
4096 1024 1024
4096 1024 1024 1024
4.402.345.721.856 bytes
4T bytes
38
(ponteiros diretos)
(ponteiro indireto)
(ponteiro indireto duplo)
(ponteiro indireto triplo)
c Carlos Maziero
: Alocao indexada
i-node
12
meta-dados
do arquivo
13
blocos de dados
0
1035
1
2
1036
12 ponteiros
diretos
1037
10
2059
11
ponteiro 1-indireto
ponteiro 2-indireto
ponteiro 3-indireto
blocos com
1024 ponteiros
de 4 bytes
c Carlos Maziero
: Alocao indexada
oi = i mod B
baux = i B
if baux < 12 then // ponteiros diretos
// o endereo do bloco bi o prprio valor do ponteiro
bi = ptr[baux ]
else
baux = baux 12
if baux < 1024 then // ponteiro indireto simples
// ler bloco de ponteiros de nvel 1
block1 = read_block (ptr[12])
// encontrar o endereo do bloco bi
bi = block1 [baux ]
else
baux = baux 1024
if baux < 1024 1024 then // ponteiro indireto duplo
// ler bloco de ponteiros de nvel 1
block1 = read_block (ptr[13])
// ler bloco de ponteiros de nvel 2
block2 = read_block (block1 [baux 1024])
// encontrar o endereo do bloco bi
bi = block2 [baux mod 1024]
else // ponteiro indireto triplo
baux = baux (1024 1024)
// ler bloco de ponteiros de nvel 1
block1 = read_block (ptr[14])
// ler bloco de ponteiros de nvel 2
block2 = read_block (block1 [baux (1024 1024)])
// ler bloco de ponteiros de nvel 3
block3 = read_block (block2 [(baux 1024) mod 1024])
// encontrar o endereo do bloco bi
bi = block3 [baux mod 1024]
end if
end if
end if
return (bi , oi )
40
c Carlos Maziero
: Anlise comparativa
i-node
disco
blocos de disco
efetivamente alocados
4.3.4
Anlise comparativa
Alm de manter informaes sobre que blocos so usados por cada arquivo no disco,
a camada de alocao de arquivos deve manter um registro atualizado de quais blocos
esto livres, ou seja no esto ocupados por nenhum arquivo ou meta-dado. Duas
41
c Carlos Maziero
Estratgia
Contgua
Rapidez
Robustez
Alta, pois acessos sequen- Alta, pois blocos defeituocial e direto rpidos, pois sos no impedem o acesso
os blocos do arquivo esto aos demais blocos do arprximos no disco.
quivo.
Encadeada
FAT
Indexada
Flexibilidade
Baixa, pois o tamanho mximo dos arquivos deve ser
conhecido a priori; nem
sempre possvel aumentar
o tamanho de um arquivo
existente.
Baixa, pois um bloco defei- Alta, pois arquivos podem
tuoso leva perda dos da- ser criados em qualquer lodos daquele bloco e de to- cal do disco, sem risco de
dos os blocos subsequentes, fragmentao externa.
at o fim do arquivo.
c Carlos Maziero
4.4
43
c Carlos Maziero
: Tpicos avanados
referncias de arquivos abertos
P1
P2
P3
nvel usurio
ncleo
tabelas locais de
arquivos abertos
tabela global de
arquivos abertos
Sistema de
Arquivos Virtual
alocao
de arquivos
alocao
de arquivos
driver
driver
dispositivo
dispositivo
sistemas
de arquivos
especcos
Tpicos avanados
Journaling FS
Extents
Log-structured Fyle Systems
Referncias
[Bach, 1986] Bach, M. J. (1986). The design of the UNIX operating System. Prentice-Hall.
[Dorward et al., 1997] Dorward, S., Pike, R., Presotto, D., Ritchie, D., Trickey, H., and
Winterbottom, P. (1997). The Inferno operating system. Bell Labs Technical Journal,
2(1):518.
[Freed and Borenstein, 1996] Freed, N. and Borenstein, N. (1996). RFC 2046: Multipurpose Internet Mail Extensions (MIME) part two: Media types.
44
c Carlos Maziero
: REFERNCIAS
45