Você está na página 1de 45

Sistemas Operacionais: Conceitos e Mecanismos

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

Desde os primrdios da computao, percebeu-se a necessidade de armazenar


informaes para uso posterior, como programas e dados. Hoje, parte importante do
uso de um computador consiste em recuperar e apresentar informaes previamente
armazenadas, como documentos, fotografias, msicas e vdeos. O prprio sistema
operacional tambm precisa manter informaes armazenadas para uso posterior,
como programas, bibliotecas e configuraes. Geralmente essas informaes devem
ser armazenadas em um dispositivo no-voltil, que preserve seu contedo mesmo
quando o computador estiver desligado. Para simplificar o armazenamento e busca de
informaes, surgiu o conceito de arquivo, que ser discutido a seguir.

1.1

O conceito de arquivo

Um arquivo basicamente um conjunto de dados armazenados em um dispositivo


fsico no-voltil, com um nome ou outra referncia que permita sua localizao
posterior. Do ponto de vista do usurio e das aplicaes, o arquivo a unidade
bsica de armazenamento de informao em um dispositivo no-voltil, pois para eles
no h forma mais simples de armazenamento persistente de dados. Arquivos so
extremamente versteis em contedo e capacidade: podem conter desde um texto ASCII
com alguns bytes at sequncias de vdeo com dezenas de gigabytes, ou mesmo mais.
Como um dispositivo de armazenamento pode conter milhes de arquivos, estes
so organizados em estruturas hierrquicas denominadas diretrios (conforme ilustrado
na Figura 1 e discutido mais detalhadamente na Seo 3.1). A organizao fsica e
lgica dos arquivos e diretrios dentro de um dispositivo denominada sistema de
arquivos. Um sistema de arquivos pode ser visto como uma imensa estrutura de dados
armazenada de forma persistente em um dispositivo fsico. Existe um grande nmero de
sistemas de arquivos, dentre os quais podem ser citados o NTFS (nos sistemas Windows),
Ext2/Ext3/Ext4 (Linux), HPFS (MacOS), FFS (Solaris) e FAT (usado em pendrives USB,
mquinas fotogrficas digitais e leitores MP3). A organizao dos sistemas de arquivos
ser discutida na Seo 4.

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

Figura 1: Arquivos organizados em diretrios dentro de um dispositivo.


conjunto de atributos, que podem variar de acordo com o sistema de arquivos utilizado.
Os atributos mais usuais so:
Nome: string de caracteres que identifica o arquivo para o usurio, como foto1.jpg,
relatrio.pdf, hello.c, etc.;
Tipo: indicao do formato dos dados contidos no arquivo, como udio, vdeo, imagem,
texto, etc. Muitos sistemas operacionais usam parte do nome do arquivo para
identificar o tipo de seu contedo, na forma de uma extenso: .doc, .jpg,
.mp3, etc.;
Tamanho: indicao do tamanho do contedo do arquivo, em bytes ou registros;
Datas: para fins de gerncia, importante manter as datas mais importantes relacionadas
ao arquivo, como suas datas de criao, de ltimo acesso e de ltima modificao
do contedo;
Proprietrio: em sistemas multi-usurios, cada arquivo tem um proprietrio, que deve
estar corretamente identificado;
Permisses de acesso: indicam que usurios tm acesso quele arquivo e que formas
de acesso so permitidas (leitura, escrita, remoo, etc.);
Localizao: indicao do dispositivo fsico onde o arquivo se encontra e da posio do
arquivo dentro do mesmo;
Outros atributos: vrios outros atributos podem ser associados a um arquivo, por
exemplo para indicar se um arquivo de sistema, se est visvel aos usurios, se
tem contedo binrio ou textual, etc. Cada sistema de arquivos normalmente
define seus prprios atributos especficos, alm dos atributos usuais.
4

c Carlos Maziero

: Operaes

Nem sempre os atributos oferecidos por um sistema de arquivos so suficientes


para exprimir todas as informaes a respeito de um arquivo. Nesse caso, a soluo
encontrada pelos usurios usar o nome do arquivo para exprimir a informao
desejada. Por exemplo, em muitos sistemas a parte final do nome do arquivo (sua
extenso) usada para identificar o formato de seu contedo. Outra situao frequente
usar parte do nome do arquivo para identificar diferentes verses do mesmo contedo1 :
relat-v1.txt, relat-v2.txt, etc.

1.3

Operaes

As aplicaes e o sistema operacional usam arquivos para armazenar e recuperar


dados. O uso dos arquivos feito atravs de um conjunto de operaes, geralmente
implementadas sob a forma de chamadas de sistema e funes de bibliotecas. As
operaes bsicas envolvendo arquivos so:
Criar: a criao de um novo arquivo implica em alocar espao para ele no dispositivo
de armazenamento e definir seus atributos (nome, localizao, proprietrio,
permisses de acesso, etc.);
Abrir: antes que uma aplicao possa ler ou escrever dados em um arquivo, ela deve
solicitar ao sistema operacional a abertura desse arquivo. O sistema ir ento
verificar se o arquivo existe, verificar se as permisses associadas ao arquivo
permitem aquele acesso, localizar seu contedo no dispositivo de armazenamento
e criar uma referncia para ele na memria da aplicao;
Ler: permite transferir dados presentes no arquivo para uma rea de memria da
aplicao;
Escrever: permite transferir dados na memria da aplicao para o arquivo no dispositivo fsico; os novos dados podem ser adicionados no final do arquivo ou
sobrescrever dados j existentes;
Mudar atributos: para modificar outras caractersticas do arquivo, como nome, localizao, proprietrio, permisses, etc.
Fechar: ao concluir o uso do arquivo, a aplicao deve informar ao sistema operacional
que o mesmo no mais necessrio, a fim de liberar as estruturas de gerncia do
arquivo na memria do ncleo;
Remover: para eliminar o arquivo do dispositivo, descartando seus dados e liberando
o espao ocupado por ele.
Alm dessas operaes bsicas, outras operaes podem ser definidas, como truncar,
copiar, mover ou renomear arquivos. Todavia, essas operaes geralmente podem ser
construdas usando as operaes bsicas.
1

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

Em sua forma mais simples, um arquivo contm basicamente uma sequncia de


bytes, que pode estar estruturada de diversas formas para representar diferentes tipos
de informao. O formato ou estrutura interna de um arquivo pode ser definido
e reconhecido pelo ncleo do sistema operacional ou somente pelas aplicaes. O
ncleo do sistema geralmente reconhece apenas alguns poucos formatos de arquivos,
como binrios executveis e bibliotecas. Os demais formatos de arquivos so vistos
pelo ncleo apenas como sequncias de bytes sem um significado especfico, cabendo
s aplicaes interpret-los.
Os arquivos de dados convencionais so estruturados pelas aplicaes para armazenar os mais diversos tipos de informaes, como imagens, sons e documentos. Uma
aplicao pode definir um formato prprio de armazenamento ou seguir formatos
padronizados. Por exemplo, h um grande nmero de formatos pblicos padronizados
para o armazenamento de imagens, como JPEG, GIF, PNG e TIFF, mas tambm existem
formatos de arquivos proprietrios, definidos por algumas aplicaes especficas, como
o formato PSD (do editor Adobe Photoshop) e o formato XCF (do editor grfico GIMP).
A adoo de um formato proprietrio ou exclusivo dificulta a ampla utilizao das
informaes armazenadas, pois somente aplicaes que reconheam aquele formato
conseguem ler corretamente as informaes contidas no arquivo.
1.4.1

Arquivos de registros

Alguns ncleos de sistemas operacionais oferecem arquivos com estruturas internas


que vo alm da simples sequncia de bytes. Por exemplo, o sistema OpenVMS
[Rice, 2000] proporciona arquivos baseados em registros, cujo contedo visto pelas
aplicaes como uma sequncia linear de registros de tamanho fixo ou varivel, e
tambm arquivos indexados, nos quais podem ser armazenados pares {chave/valor}, de
forma similar a um banco de dados relacional. A Figura 2 ilustra a estrutura interna
desses dois tipos de arquivos.
reg1
reg2
reg3
reg4
reg5
reg6
reg7

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

Figura 2: Arquivos estruturados: registros em sequncia e registros indexados.


Nos sistemas operacionais cujo ncleo no suporta arquivos estruturados como registros, essa funcionalidade pode ser facilmente obtida atravs de bibliotecas especficas
ou do suporte de execuo de algumas linguagens de programao. Por exemplo, a

c Carlos Maziero

: Arquivos de texto

biblioteca Berkeley DB disponvel em plataformas UNIX oferece suporte indexao de


registros sobre arquivos UNIX convencionais.
1.4.2

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

O arquivo de texto hello.c seria armazenado da seguinte forma2 em um ambiente


UNIX:
1

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

Listagem obtida atravs do comando hd do Linux, que apresenta o contedo de um arquivo em


hexadecimal e seus caracteres ASCII correspondentes, byte por byte.

c Carlos Maziero

: Arquivos executveis

Essa diferena na forma de representao da separao entre linhas pode provocar


problemas em arquivos de texto transferidos entre sistemas Windows e UNIX, caso no
seja feita a devida converso.
1.4.3

Arquivos executveis

Um arquivo executvel dividido internamente em vrias sees, para conter cdigo,


tabelas de smbolos (variveis e funes), listas de dependncias (bibliotecas necessrias)
e outras informaes de configurao. A organizao interna de um arquivo executvel
ou biblioteca depende do sistema operacional para o qual foi definido. Os formatos de
executveis mais populares atualmente so [Levine, 2000]:
ELF (Executable and Linking Format): formato de de arquivo usado para programas
executveis e bibliotecas na maior parte das plataformas UNIX modernas.
composto por um cabealho e vrias sees de dados, contendo cdigo executvel,
tabelas de smbolos e informaes de relocao de cdigo.
PE (Portable Executable): o formato usado para executveis e bibliotecas na
plataforma Windows. Consiste basicamente em uma adaptao do antigo formato
COFF usado em plataformas UNIX.
A Figura 3 ilustra a estrutura interna de um arquivo executvel no formato ELF,
usado tipicamente em sistemas UNIX (Linux, Solaris, etc.). Esse arquivo dividido
em sees, que representam trechos de cdigo e dados sujeitos a ligao dinmica
e relocao; as sees so agrupadas em segmentos, de forma a facilitar a carga em
memria do cdigo e o lanamento do processo.
ELF header

Sections

Program
header table

Segments

Section
header table

Figura 3: Estrutura interna de um arquivo executvel em formato ELF [Levine, 2000].


Alm de executveis e bibliotecas, o ncleo de um sistema operacional costuma
reconhecer alguns tipos de arquivos no convencionais, como diretrios, atalhos (links),
dispositivos fsicos e estruturas de comunicao do ncleo, como sockets, pipes e filas de
mensagens (vide Seo 1.5).
8

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

Tabela 2: Tipos MIME correspondentes a alguns formatos de arquivos


Tipo MIME
application/java-archive
application/msword
application/vnd.oasis.opendocument.text
audio/midi
audio/mpeg
image/jpeg
image/png
text/csv
text/html
text/plain
text/rtf
text/x-csrc
video/quicktime

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

O conceito de arquivo ao mesmo tempo simples e poderoso, o que motivou sua


utilizao de forma quase universal. Alm do armazenamento de cdigo e dados,
arquivos tambm podem ser usados como:
Abstrao de dispositivos de baixo nvel: os sistemas UNIX costumam mapear as
interfaces de acesso de vrios dispositivos fsicos em arquivos dentro do diretrio
/dev (de devices), como por exemplo:
/dev/ttyS0: porta de comunicao serial COM1;
/dev/audio: placa de som;
/dev/sda1: primeira partio do primeiro disco SCSI (ou SATA).
Abstrao de interfaces do ncleo: em sistemas UNIX, os diretrios /proc e /sys permitem consultar e/ou modificar informaes internas do ncleo do sistema operacional, dos processos em execuo e dos drivers de dispositivos. Por exemplo,
alguns arquivos oferecidos pelo Linux:
/proc/cpuinfo: informaes sobre os processadores disponveis no sistema;
/proc/3754/maps: disposio das reas de memria alocadas para o processo
cujo identificador (PID) 3754;
/sys/block/sda/queue/scheduler: definio da poltica de escalonamento
de disco (vide Seo ??) a ser usada no acesso ao disco /dev/sda.
Canais de comunicao: na famlia de protocolos de rede TCP/IP, a metfora de arquivo
usada como interface para os canais de comunicao: uma conexo TCP
10

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

leitura ou escrita. Quando esse ponteiro atinge o final do arquivo, as leituras no so


mais permitidas, mas as escritas ainda o so, permitindo acrescentar dados ao final
do mesmo. A chegada do ponteiro ao final do arquivo normalmente sinalizada ao
processo atravs de um flag de fim de arquivo (EoF - End-of-File).
A Figura 4 traz um exemplo de acesso sequencial em leitura a um arquivo, mostrando
a evoluo do ponteiro do arquivo durante uma sequncia de leituras. A primeira
leitura no arquivo traz a string Qui scribit bis, a segunda leitura traz legit. ,
e assim sucessivamente. O acesso sequencial implementado em praticamente todos os
sistemas operacionais de mercado e constitui a forma mais usual de acesso a arquivos,
usada pela maioria das aplicaes.
0

15

23

35

45

60

leituras
Qui scribit bis legit. Non nova, sed nove. Felix qui potuit rerum...

Figura 4: Leituras sequenciais em um arquivo de texto.


Por outro lado, no mtodo de acesso direto (ou aleatrio), pode-se indicar a posio
no arquivo onde cada leitura ou escrita deve ocorrer, sem a necessidade de um ponteiro.
Assim, caso se conhea previamente a posio de um determinado dado no arquivo,
no h necessidade de percorr-lo sequencialmente at encontrar o dado desejado. Essa
forma de acesso muito importante em gerenciadores de bancos de dados e aplicaes
congneres, que precisam acessar rapidamente as posies do arquivo correspondentes
ao registros desejados em uma operao.
Na prtica, a maioria dos sistemas operacionais usa o acesso sequencial como modo
bsico de operao, mas oferece operaes para mudar a posio do ponteiro do arquivo
caso necessrio, o que permite ento o acesso direto a qualquer registro do arquivo.
Nos sistemas POSIX, o reposicionamento do ponteiro do arquivo efetuado atravs das
chamadas lseek e fseek.
Uma forma particular de acesso direto ao contedo de um arquivo o mapeamento
em memria do mesmo, que faz uso dos mecanismos de memria virtual (paginao).
Nessa modalidade de acesso, um arquivo associado a um vetor de bytes (ou de
registros) de mesmo tamanho na memria principal, de forma que cada posio do vetor
corresponda sua posio equivalente no arquivo. Quando uma posio especfica
do vetor ainda no acessada lida, gerada uma falta de pgina. Nesse momento,
o mecanismo de paginao da memria virtual intercepta o acesso memria, l o
contedo correspondente no arquivo e o deposita no vetor, de forma transparente
aplicao. Escritas no vetor so transferidas para o arquivo por um procedimento
similar. Caso o arquivo seja muito grande, pode-se mapear em memria apenas partes
dele. A Figura 5 ilustra essa forma de acesso.
Finalmente, alguns sistemas operacionais oferecem tambm a possibilidade de acesso
indexado aos dados de um arquivo, como o caso do OpenVMS [Rice, 2000]. Esse
sistema implementa arquivos cuja estrutura interna pode ser vista como um conjunto
de pares chave/valor. Os dados do arquivo so armazenados e recuperados de acordo
com suas chaves correspondentes, como em um banco de dados relacional. Como o
13

c Carlos Maziero

: Controle de acesso

processo
acessos

vetor de bytes

pginas
lidas
pginas
escritas

arquivo em disco

Figura 5: Arquivo mapeado em memria.


prprio ncleo do sistema implementa os mecanismos de acesso e indexao do arquivo,
o armazenamento e busca de dados nesse tipo de arquivo costuma ser muito rpido,
dispensando bancos de dados para a construo de aplicaes mais simples.

2.3

Controle de acesso

Como arquivos so entidades que sobrevivem existncia do processo que as criou,


importante definir claramente o proprietrio de cada arquivo e que operaes ele
e outros usurios do sistema podem efetuar sobre o mesmo. A forma mais usual de
controle de acesso a arquivos consiste em associar os seguintes atributos a cada arquivo
e diretrio do sistema de arquivos:
Proprietrio: identifica o usurio dono do arquivo, geralmente aquele que o criou;
muitos sistemas permitem definir tambm um grupo proprietrio do arquivo, ou
seja, um grupo de usurios com acesso diferenciado sobre o mesmo;
Permisses de acesso: define que operaes cada usurio do sistema pode efetuar
sobre o arquivo.
Existem muitas formas de se definir permisses de acesso a recursos em um sistema
computacional; no caso de arquivos, a mais difundida emprega listas de controle de
acesso (ACL - Access Control Lists) associadas a cada arquivo. Uma lista de controle de
acesso basicamente uma lista indicando que usurios esto autorizados a acessar o
arquivo, e como cada um pode acess-lo. Um exemplo conceitual de listas de controle
de acesso a arquivos seria:
14

c Carlos Maziero

1
2
3

: Controle de acesso

arq1.txt : (Joo: ler), (Jos: ler, escrever), (Maria: ler, remover)


video.avi : (Jos: ler), (Maria: ler)
musica.mp3: (Daniel: ler, escrever, apagar)

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

Nessa listagem, o arquivo hello-unix.c (linha 4) pode ser acessado em leitura


e escrita por seu proprietrio (o usurio maziero, com permisses rw-), em leitura
pelos usurios do grupo prof (permisses r--) e em leitura pelos demais usurios do
sistema (permisses r--). J o arquivo hello-unix (linha 3) pode ser acessado em
leitura, escrita e execuo por seu proprietrio (permisses rwx), em leitura e execuo
pelos usurios do grupo prof (permisses r-x) e no pode ser acessado pelos demais
usurios (permisses ---). No caso de diretrios, a permisso de leitura autoriza a
listagem do diretrio, a permisso de escrita autoriza sua modificao (criao, remoo
ou renomeao de arquivos ou sub-diretrios) e a permisso de execuo autoriza usar
aquele diretrio como diretrio de trabalho ou parte de um caminho.
No mundo Windows, o sistema de arquivos NTFS implementa um controle de acesso
bem mais flexvel que o do UNIX, que define permisses aos proprietrios de forma
similar, mas no qual permisses complementares a usurios individuais podem ser
associadas a qualquer arquivo. Mais detalhes sobre os modelos de controle de acesso
usados nos sistemas UNIX e Windows podem ser encontrados no Captulo ??.
importante destacar que o controle de acesso normalmente realizado somente
durante a abertura do arquivo, para a criao de sua referncia em memria. Isso
significa que, uma vez aberto um arquivo por um processo, este ter acesso ao arquivo
enquanto o mantiver aberto, mesmo que as permisses do arquivo sejam alteradas para
15

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

Em um sistema multi-tarefas, frequente ter arquivos acessados por mais de um


processo, ou mesmo mais de um usurio, caso as permisses de acesso ao mesmo o
permitam. Conforme estudado no Captulo ??, o acesso simultneo a recursos compartilhados pode gerar condies de disputa (race conditions), que levam inconsistncia de
dados e outros problemas. O acesso concorrente em leitura a um arquivo no acarreta
problemas, mas a possibilidade de escritas e leituras simultneas tem de ser prevista e
tratada de forma adequada.
2.4.1

Travas em arquivos

A soluo mais simples e mais frequentemente utilizada para gerenciar o acesso


compartilhado a arquivos o uso de travas de excluso mtua (mutex locks), estudadas
no Captulo ??. A maioria dos sistemas operacionais oferece algum mecanismo de
sincronizao para o acesso a arquivos, na forma de uma ou mais travas (locks) associadas
a cada arquivo aberto. A sincronizao pode ser feita sobre o arquivo inteiro ou sobre
algum trecho especfico dele, permitindo que dois ou mais processos possam trabalhar
em partes distintas de um arquivo sem necessidade de sincronizao entre eles.
As travas oferecidas pelo sistema operacional podem ser obrigatrias (mandatory
locks) ou recomendadas (advisory locks). As travas obrigatrias so impostas pelo ncleo
de forma incontornvel: se um processo obtiver a trava do arquivo para si, outros
processos que solicitarem acesso ao arquivo sero suspensos at que a respectiva trava
seja liberada. Por outro lado, as travas recomendadas no so impostas pelo ncleo do
sistema operacional. Neste caso, um processo pode acessar um arquivo mesmo sem ter
sua trava. Caso sejam usadas travas recomendadas, cabe ao programador implementar
os controles de trava necessrios em suas aplicaes, para impedir acessos conflitantes
aos arquivos.
As travas sobre arquivos tambm podem ser exclusivas ou compartilhadas. Uma
trava exclusiva, tambm chamada trava de escrita, garante acesso exclusivo ao arquivo:
enquanto uma trava exclusiva estiver ativa, nenhum outro processo poder obter uma
trava sobre aquele arquivo. J uma trava compartilhada (ou trava de leitura) impede
outros processos de criar travas exclusivas sobre aquele arquivo, mas permite a existncia
de outras travas compartilhadas. Em conjunto, as travas exclusivas e compartilhadas
implementam um modelo de sincronizao leitores/escritores (descrito na Seo ??), no
qual os leitores acessam o arquivo usando travas compartilhadas e os escritores o fazem
usando travas exclusivas.
importante observar que normalmente as travas de arquivos so atribudas a
processos, portanto um processo s pode ter um tipo de trava sobre um mesmo arquivo.
Alm disso, todas as suas travas so liberadas quando o processo fecha o arquivo
16

c Carlos Maziero

: Semntica de acesso

ou encerra sua execuo. No UNIX, a manipulao de travas em arquivos feita


atravs das chamadas de sistema flock e fcntl. Esse sistema oferece por default travas
recomendadas exclusivas ou compartilhadas sobre arquivos ou trechos de arquivos.
Sistemas Windows oferecem por default travas obrigatrias sobre arquivos, que podem
ser exclusivas ou compartilhadas, ou travas recomendadas sobre trechos de arquivos.
2.4.2

Semntica de acesso

Quando um arquivo aberto e usado por um nico processo, o funcionamento das


operaes de leitura e escrita simples e inequvoco: quando um dado escrito no
arquivo, ele est prontamente disponvel para leitura se o processo desejar l-lo novamente. No entanto, arquivos podem ser abertos por vrios processos simultaneamente,
e os dados escritos por um processo podem no estar prontamente disponveis aos
demais processos que lem aquele arquivo. Isso ocorre porque os discos rgidos so
normalmente lentos, o que leva os sistemas operacionais a usar buffers intermedirios
para acumular os dados a escrever e assim otimizar o acesso aos discos. A forma como
os dados escritos por um processo so percebidos pelos demais processos que abriram
aquele arquivo chamada de semntica de compartilhamento. Existem vrias semnticas
possveis, mas as mais usuais so [Silberschatz et al., 2001]:
Semntica UNIX: toda modificao em um arquivo imediatamente visvel a todos
os processos que mantm aquele arquivo aberto; existe tambm a possibilidade
de vrios processos compartilharem o mesmo ponteiro de posicionamento do
arquivo. Essa semntica a mais comum em sistemas de arquivos locais, ou seja,
para acesso a arquivos nos dispositivos locais;
Semntica de sesso: considera que cada processo usa um arquivo em uma sesso, que
inicia com a abertura do arquivo e que termina com seu fechamento. Modificaes
em um arquivo feitas em uma sesso somente so visveis na mesma seo e
pelas sesses que iniciarem depois do encerramento da mesma, ou seja, depois
que o processo fechar o arquivo; assim, sesses concorrentes de acesso a um
arquivo compartilhado podem ver contedos distintos para o mesmo arquivo.
Esta semntica normalmente aplicada a sistemas de arquivos de rede, usados
para acesso a arquivos em outros computadores;
Semntica imutvel: de acordo com esta semntica, se um arquivo pode ser compartilhado por vrios processos, ele marcado como imutvel, ou seja, seu contedo
no pode ser modificado. a forma mais simples de garantir a consistncia do
contedo do arquivo entre os processos que compartilham seu acesso, sendo por
isso usada em alguns sistemas de arquivos distribudos.
A Figura 6 traz um exemplo de funcionamento da semntica de sesso: os processos
p1 a p4 compartilham o acesso ao mesmo arquivo, que contm apenas um nmero inteiro,
com valor inicial 23. Pode-se perceber que o valor 39 escrito por p1 visto por ele na
mesma sesso, mas no visto por p2 , que abriu o arquivo antes do fim da sesso de p1 .
O processo p3 v o valor 39, pois abriu o arquivo depois que p1 o fechou, mas no v o
valor escrito por p2 . Da mesma forma, o valor 71 escrito por p2 no percebido por p3 ,
mas somente por p4 .
17

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

int main (int argc, char *argv[], char* envp[])


{
FILE *arq ;
char c ;

arq = fopen ("infos.dat", "r") ; /* abertura do arquivo em leitura */

9
10

if (! arq) /* referencia de arquivo invalida */


{
perror ("Erro ao abrir arquivo") ;
exit (1) ;
}

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

Um computador normalmente possui um ou mais dispositivos para armazenar


arquivos, que podem ser discos rgidos, discos ticos (CD-ROM, DVD-ROM), discos
de estado slido (baseados em memria flash, como pendrives USB), etc. A estrutura
fsica dos discos rgidos e demais dispositivos ser discutida em detalhes no Captulo
??; por enquanto, um disco rgido pode ser visto basicamente como um grande vetor de
blocos de bytes. Esses blocos de dados, tambm denominados setores, tm tamanho fixo
geralmente entre 512 e 4.096 bytes e so numerados sequencialmente. As operaes de
leitura e escrita de dados nesses dispositivos so feitas bloco a bloco, por essa razo
esses dispositivos so chamados dispositivos de blocos (block devices).
Em um computador no padro PC, o espao de armazenamento de cada dispositivo
dividido em uma pequena rea inicial de configurao e uma ou mais parties, que
podem ser vistas como espaos independentes. A rea de configurao denominada
MBR - Master Boot Record, e contm uma tabela de parties com informaes sobre o
particionamento do dispositivo. Alm disso, contm tambm um pequeno cdigo
executvel, usado no processo de inicializao do sistema operacional. No incio de
cada partio geralmente h um bloco reservado, utilizado para a descrio do contedo
daquela partio e para armazenar o cdigo de lanamento do sistema operacional, se
for uma partio inicializvel (bootable partition). Esse bloco reservado denominado
bloco de inicializao ou VBR - Volume Boot Record. O restante dos blocos da partio est
disponvel para o armazenamento de arquivos. A Figura 7 ilustra a organizao bsica
do espao de armazenamento em um dispositivo de blocos tpico: um disco rgido.
reas de armazenamento de dados
partio 1

Master Boot Record

partio 2

partio 3

Volume Boot Records

Figura 7: Organizao em parties de um disco rgido tpico.


Cada partio deve ser formatada, ou seja, estruturada para conter um sistema
de arquivos, que pode conter arquivos, diretrio, atalhos e outras entradas. Cada
dispositivo ou partio devidamente preparado e formatado para receber um sistema
de arquivos designado como um volume.

3.1

Diretrios

A quantidade de arquivos em um sistema atual pode ser muito grande, chegando


facilmente a milhes deles em um computador desktop tpico, e muito mais em servidores.
20

c Carlos Maziero

: Diretrios

Embora o sistema operacional possa tratar facilmente essa imensa quantidade de


arquivos, essa tarefa no to simples para os usurios: identificar e localizar de forma
inequvoca um arquivo especfico em meio a milhes de outros arquivos pode ser
impraticvel.
Para permitir a organizao de arquivos dentro de uma partio, so usados diretrios.
Um diretrio, tambm chamado de pasta (folder), representa um continer de informaes,
que pode conter arquivos ou mesmo outros diretrios. Da mesma forma que os arquivos,
diretrios tm nome e atributos, que so usados na localizao e acesso aos arquivos
neles contidos.
Cada espao de armazenamento possui ao menos um diretrio principal, denominado
diretrio raiz (root directory). Em sistemas de arquivos mais antigos e simples, o diretrio
raiz de um volume estava definido em seus blocos de inicializao, normalmente
reservados para informaes de gerncia. Todavia, como o nmero de blocos reservados
era pequeno e fixo, o nmero de entradas no diretrio raiz era limitado. Nos sistemas
mais recentes, um registro especfico dentro dos blocos de inicializao aponta para a
posio do diretrio raiz dentro do sistema de arquivos, permitindo que este tenha um
nmero muito maior de entradas.
O uso de diretrios permite construir uma estrutura hierrquica (em rvore) de
armazenamento dentro de um volume, sobre a qual os arquivos so distribudos. A
Figura 8 representa uma pequena parte da rvore de diretrios tpica de um sistema Linux,
cuja estrutura definida nas normas Filesystem Hierarchy Standard [Russell et al., 2004].
Os primeiros sistemas de arquivos implementavam apenas o diretrio raiz, que
continha todos os arquivos do volume. Posteriormente, ofereceram sub-diretrios,
ou seja, um nvel de diretrios abaixo do diretrio raiz. Os sistemas atuais oferecem
uma estrutura muito mais flexvel, com um nmero de nveis de diretrios muito mais
elevado, ou mesmo ilimitado (como no NTFS e no Ext3).
A implementao de diretrios relativamente simples: um diretrio implementado
como um arquivo estruturado, cujo contedo uma relao de entradas. Os tipos de
entradas normalmente considerados nessa relao so arquivos normais, diretrios,
atalhos (vide Seo 3.3) e entradas associadas a arquivos especiais, como os discutidos
na Seo 1.1. Cada entrada contm ao menos o nome do arquivo (ou do diretrio), seu
tipo e a localizao fsica do mesmo no volume. Deve ficar claro que um diretrio no
contm fisicamente os arquivos e sub-diretrios, ele apenas os relaciona.
Duas entradas padronizadas so usualmente definidas em cada diretrio: a entrada
. (ponto), que representa o prprio diretrio, e a entrada .. (ponto-ponto), que
representa seu diretrio pai (o diretrio imediatamente acima dele na hierarquia de
diretrios). No caso do diretrio raiz, ambas as entradas apontam para ele prprio.
A Figura 9 apresenta uma possibilidade de implementao de parte da estrutura de
diretrios apresentada na Figura 8. Os tipos das entradas em cada diretrio so: A
para arquivos normais e D para diretrios.
A relao de entradas em um diretrio, tambm chamada de ndice do diretrio, pode
ser implementada como uma lista linear, como no caso do MS-DOS e do Ext2 (Linux)
ou como algum tipo de tabela hash ou rvore, o que feito no NTFS e no Ext3, entre
outros. A implementao em lista linear mais simples, mas tem baixo desempenho.
A implementao em tabela hash ou rvore prov um melhor desempenho quando
21

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

Figura 8: Estrutura de diretrios tpica de um sistema Linux.


necessrio percorrer a estrutura de diretrios em busca de arquivos, o que ocorre
frequentemente.

3.2

Caminhos de acesso

Em um sistema de arquivos, os arquivos esto dispersos ao longo da hierarquia de


diretrios. Para poder abrir e acessar um arquivo, torna-se ento necessrio conhecer sua
localizao completa, ao invs de somente seu nome. A posio de um arquivo dentro
do sistema de arquivos chamada de caminho de acesso ao arquivo. Normalmente, o
caminho de acesso a um arquivo composto pela sequncia de nomes de diretrios que
levam at ele, separadas por um caractere especfico. Por exemplo, o sistema Windows
usa como separador o caractere \, enquanto sistemas UNIX usam o caractere /;
outros sistemas podem usar caracteres como : e !. Exemplos de caminhos de acesso
a arquivos seriam \Windows\system32\ole32.dll (no Windows) e /usr/bin/bash (em
sistemas UNIX).
A maioria dos sistemas implementa o conceito de diretrio de trabalho ou diretrio
corrente de um processo (working directory). Ao ser criado, cada novo processo recebe
um diretrio de trabalho, que ser usado por ele como local default para criar novos
arquivos ou abrir arquivos existentes, quando no informar os respectivos caminhos de
22

c Carlos Maziero

VBR

/
.
..
bin
etc
home
lib
usr
var

0101011
110000110
001101011
101110100
110000010
100011111
010110100

: Caminhos de acesso

Volume (disco ou partio)


D
D
D
D
D
D
D
D

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

Figura 9: Implementao de uma estrutura de diretrios.


acesso. Cada processo geralmente herda o diretrio de trabalho de seu pai, mas pode
mudar de diretrio atravs de chamadas de sistema (como chdir nos sistemas UNIX).
Existem basicamente trs formas de se referenciar arquivos em um sistema de
arquivos:
Referncia direta: somente o nome do arquivo informado; neste caso, considera-se
que o arquivo est (ou ser criado) no diretrio de trabalho do processo. Exemplos:
1
2
3

prova1.doc
materiais.pdf
uma-bela-foto.jpg

Referncia absoluta: o caminho de acesso ao arquivo indicado a partir do diretrio


raiz do sistema de arquivos, e no depende do diretrio de trabalho do processo;
uma referncia absoluta a um arquivo sempre inicia com o caractere separador,
indicando que o nome do arquivo est referenciado a partir do diretrio raiz
do sistema de arquivos. O caminho de acesso mais curto a um arquivo a partir
23

c Carlos Maziero

: Caminhos de acesso

do diretrio raiz denominado caminho cannico do arquivo. Nos exemplos de


referncias absolutas a seguir, os dois primeiros so caminhos cannicos, enquanto
os dois ltimos no o so:
1
2
3
4

\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

Referncia relativa: o caminho de acesso ao arquivo tem como incio o diretrio de


trabalho do processo, e indica sub-diretrios ou diretrios anteriores, atravs de
referncias ..; eis alguns exemplos:
1
2
3
4

imagens\satelite\brasil\geral.jpg
..\users\maziero\documentos\prova-2.doc
public_html/static/fotografias/rennes.jpg
../../../share/icons/128x128/calculator.svg

Durante a abertura de um arquivo, o sistema operacional deve encontrar a localizao


do mesmo no dispositivo de armazenamento, a partir do nome e caminho informados
pelo processo. Para isso, necessrio percorrer as estruturas definidas pelo caminho do
arquivo at encontrar sua localizao, em um procedimento denominado localizao de
arquivo (file lookup). Por exemplo, para abrir o arquivo /usr/lib/X11/libX.a da Figura
9 seria necessrio executar os seguintes passos3 :
1. Acessar o disco para ler o VBR (Volume Boot Record) do volume;
2. Nos dados lidos, descobrir onde se encontra o diretrio raiz (/) daquele sistema
de arquivos;
3. Acessar o disco para ler o diretrio raiz;
4. Nos dados lidos, descobrir onde se encontra o diretrio usr;
5. Acessar o disco para ler o diretrio usr;
6. Nos dados lidos, descobrir onde se encontra o diretrio lib;
7. Acessar o disco para ler o diretrio lib;
8. Nos dados lidos, descobrir onde se encontra o diretrio X11;
9. Acessar o disco para ler o diretrio X11;
10. Nos dados lidos, descobrir onde se encontra o arquivo libX11.a;
3

Para simplificar, foram omitidas as verificaes de existncia de entradas, de permisses de acesso e


os tratamentos de erro.

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

Em algumas ocasies, pode ser necessrio ter um mesmo arquivo ou diretrio


replicado em vrias posies dentro do sistema de arquivos. Isso ocorre frequentemente
com arquivos de configurao de programas e arquivos de bibliotecas, por exemplo.
Nestes casos, seria mais econmico armazenar apenas uma instncia dos dados do
arquivo no sistema de arquivos e criar referncias indiretas (ponteiros) para essa
instncia, para representar as demais cpias do arquivo. O mesmo raciocnio pode ser
aplicado a diretrios duplicados. Essas referncias indiretas a arquivos ou diretrios
so denominadas atalhos (links).
Existem basicamente duas abordagens para a construo de atalhos:
Atalhos simblicos (soft links): cada cpia do arquivo original na verdade um
pequeno arquivo de texto contendo uma string com o caminho at o arquivo
original (pode ser usado um caminho simples, absoluto ou relativo posio do
atalho). Como o caminho ao arquivo original indicado de forma simblica, este
pode estar localizado em outro dispositivo fsico (outro disco ou uma unidade de
rede). O arquivo original e seus atalhos simblicos so totalmente independentes:
caso o arquivo original seja movido, renomeado ou removido, os atalhos simblicos
apontaro para um arquivo inexistente; neste caso, diz-se que aqueles atalhos
esto quebrados (broken links).
Atalhos fsicos (hard links): vrias referncias do arquivo no sistema de arquivos
apontam para a mesma localizao do dispositivo fsico onde o contedo do
arquivo est de fato armazenado. Normalmente mantido um contador de
referncias a esse contedo, indicando quantos atalhos fsicos apontam para o
mesmo: somente quando o nmero de referncias ao arquivo for zero, aquele
contedo poder ser removido do dispositivo. Como so usadas referncias
posio do arquivo no dispositivo, atalhos fsicos s podem ser feitos para arquivos
dentro do mesmo sistema de arquivos (o mesmo volume).
25

c Carlos Maziero

: Montagem de volumes

A Figura 10 traz exemplos de implementao de atalhos simblicos e fsicos a


arquivos em um sistema de arquivos UNIX. As entradas de diretrios indicadas como
L correspondem a atalhos simblicos (de links). Nessa figura, pode-se constatar que as
entradas /bin/ls e /usr/bin/dir so atalhos fsicos para o mesmo contedo no disco,
enquanto a entrada /bin/shell um atalho simblico para o arquivo /usr/bin/sh e
/lib um atalho simblico para o diretrio /usr/lib.
VBR

/
.
..
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

Volume (disco ou partio)

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

Figura 10: Atalhos simblicos e fsicos a arquivos em UNIX.


Sistemas UNIX suportam atalhos fsicos e simblicos, com algumas limitaes:
atalhos fsicos geralmente s podem ser feitos para arquivos dentro do mesmo sistema
de arquivos (mesmo volume) e no so permitidos atalhos fsicos para diretrios4 . Em
ambientes Windows, o sistema de arquivos NTFS suporta ambos os tipos de atalhos
(embora atalhos simblicos s tenham sido introduzidos no Windows Vista), com
limitaes similares.

3.4

Montagem de volumes

Para que o sistema operacional possa acessar o sistema de arquivos presente em um


determinado volume, ele deve ler os dados presentes em seu bloco de inicializao, que
4

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

descrevem o tipo de sistema de arquivos presente, e criar as estruturas em memria


que representam esse volume dentro do ncleo. Alm disso, ele deve definir um
identificador para o volume, de forma que os processos possam acessar seus arquivos.
Esse procedimento denominado montagem do volume, e seu nome vem do tempo em
que era necessrio montar fisicamente os discos rgidos ou fitas magnticas nos leitores,
antes de poder acessar seus dados. O procedimento oposto, a desmontagem, consiste em
fechar todos os arquivos abertos no volume e remover as estruturas de memria usadas
para gerenci-lo.
A montagem um procedimento frequente no caso de mdias mveis, como CDROMs, DVD-ROMs e pendrives USB. Neste caso, a desmontagem do volume inclui
tambm ejetar a mdia (CD, DVD) ou avisar o usurio que ela pode ser removida (discos
USB).
Ao montar um volume, deve-se fornecer aos processos e usurios uma referncia
para seu acesso, denominada ponto de montagem (mounting point). Sistemas UNIX
normalmente definem os pontos de montagem de volumes como posies dentro da
rvore principal do sistema de arquivos. Dessa forma, h um volume principal, montado
durante a inicializao do sistema operacional, onde normalmente reside o prprio
sistema operacional e que define a estrutura bsica da rvore de diretrios. Os volumes
secundrios so montados como sub-diretrios na rvore do volume principal, atravs
do comando mount. A Figura 11 apresenta um exemplo de montagem de volumes
em plataformas UNIX. Nessa figura, o disco rgido 1 contm o sistema operacional e
foi montado como raiz da rvore de diretrios durante a inicializao do sistema. O
disco rgido 2 contm os diretrios de usurios e seu ponto de montagem o diretrio
/home. J o diretrio /media/cdrom o ponto de montagem de uma mdia removvel
(CD-ROM), com sua rvore de diretrios prpria.
bin
etc

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

pdf

extras

txt

install

Figura 11: Montagem de volumes em UNIX.

27

c Carlos Maziero

: Sistemas de arquivos

Em sistemas de arquivos de outras plataformas, como DOS e Windows, comum


definir cada volume montado como um disco lgico distinto, chamado simplesmente
de disco ou drive e identificado por uma letra (A:, C:, D:, etc.). Todavia, o
sistema de arquivos NTFS do Windows tambm permite a montagem de volumes como
sub-diretrios, da mesma forma que o UNIX.

Sistemas de arquivos

Vrios problemas importantes devem ser resolvidos na construo de um sistema de


arquivos, que vo do acesso de baixo nvel aos dispositivos fsicos de armazenamento
implementao da interface de acesso a arquivos para os programadores. Na
implementao de um sistema de arquivos, considera-se que cada arquivo possui dados
e meta-dados. Os dados de um arquivo so o seu contedo em si (uma msica, uma
fotografia, um documento ou uma planilha); por outro lado, os meta-dados do arquivo
so seus atributos (nome, datas, permisses de acesso, etc.) e todas as informaes de
controle necessrias para localizar e manter seu contedo no disco.
Nesta seo sero discutidos os principais elementos que compem a gerncia de
arquivos em um sistema operacional tpico.

4.1

Arquitetura geral

Os principais elementos que constituem a gerncia de arquivos esto organizados


em camadas, conforme apresentado na Figura 12. No nvel mais baixo dessa arquitetura
esto os dispositivos de armazenamento, como discos rgidos ou bancos de memria
flash, responsveis pelo armazenamento dos dados e meta-dados dos arquivos. Esses
dispositivos so acessados atravs de controladores, que so circuitos eletrnicos
dedicados ao controle e interface dos dispositivos. A interface entre controladores e
dispositivos de armazenamento segue padres como SATA, ATAPI, SCSI, USB e outros.
Os controladores de dispositivos so configurados e acessados pelo ncleo do sistema operacional atravs de drivers de dispositivos, que so componentes de software
capazes de interagir com os controladores. Os drivers usam portas de entrada/sada,
interrupes e canais de acesso direto memria (DMA) para interagir com os controladores e realizar as operaes de controle e de entrada/sada de dados. Como cada
controlador define sua prpria interface, tambm possui um driver especfico. Os drivers
ocultam essas interfaces e fornecem s camadas superiores do ncleo uma interface
padronizada para acesso aos dispositivos de armazenamento. Desta forma, os detalhes
tecnolgicos e particularidades de cada dispositivo so isolados, tornando o restante do
sistema operacional independente da tecnologia subjacente.
Acima dos drivers est a camada de gerncia de blocos, que gerencia o fluxo de
blocos de dados entre a memria e os dispositivos de armazenamento. importante
lembrar que os discos so dispositivos orientados a blocos, ou seja, as operaes de
leitura e escrita de dados so sempre feitas com blocos de dados, e nunca com bytes
individuais. As funes mais importantes desta camada so efetuar o mapeamento
de blocos lgicos nos blocos fsicos do dispositivo, oferecer s camadas superiores a

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

Figura 12: Camadas da implementao da gerncia de arquivos.


abstrao de cada dispositivo fsico como sendo um imenso vetor de blocos lgicos,
independente de sua configurao real, e tambm efetuar o caching/buffering de blocos
(Seo ??).
A seguir est a camada de alocao de arquivos, que tem como funo principal
alocar os arquivos sobre os blocos lgicos oferecidos pela gerncia de blocos. Cada
arquivo visto como uma sequncia de blocos lgicos que deve ser armazenada nos
blocos dos dispositivos de forma eficiente, robusta e flexvel. As principais tcnicas de
alocao de arquivos so discutidas na Seo 4.3.
Acima da alocao de arquivos est o sistema de arquivos virtual (VFS - Virtual File
System), que prov uma interface de acesso a arquivos independente dos dispositivos
fsicos e das estratgias de alocao de arquivos empregadas pelas camadas inferiores. O
sistema de arquivos virtual normalmente gerencia as permisses associadas aos arquivos
29

c Carlos Maziero

: Blocos fsicos e lgicos

e as travas de acesso compartilhado, alm de construir as abstraes de diretrios e


atalhos. Outra responsabilidade importante desta camada manter informaes sobre
cada arquivo aberto pelos processos, como a posio da ltima operao no arquivo,
o modo de abertura usado e o nmero de processos que esto usando o arquivo. A
interface de acesso ao sistema de arquivos virtual oferecida aos processos atravs de
um conjunto de chamadas de sistema.
Finalmente, as bibliotecas de entrada/sada usam as chamadas de sistema oferecidas
pelo sistema operacional para construir funes padronizadas de acesso a arquivos
para cada linguagem de programao, como aquelas apresentadas na Seo 2.5 para a
linguagem C ANSI.

4.2

Blocos fsicos e lgicos

Um dos aspectos mais importantes dos sistemas de arquivos a forma como o


contedo dos arquivos disposto dentro do disco rgido ou outro dispositivo de
armazenamento secundrio. Conforme visto na Seo 3, um disco rgido pode ser visto
como um conjunto de blocos de tamanho fixo (geralmente de 512 bytes). Os blocos
do disco rgido so normalmente denominados blocos fsicos. Como esses blocos so
pequenos, o nmero de blocos fsicos em um disco rgido recente pode ser imenso: um
disco rgido de 250 GBytes contm mais de 500 milhes de blocos fsicos! Para simplificar
a gerncia dessa quantidade de blocos fsicos e melhorar o desempenho das operaes
de leitura/escrita, os sistemas operacionais costumam trabalhar com blocos lgicos ou
clusters, que so grupos de 2n blocos fsicos consecutivos. Blocos lgicos com 4K, 8K, 16K
e 32K bytes so frequentemente usados. A maior parte das operaes e estruturas de
dados definidas nos discos pelos sistemas operacionais so baseadas em blocos lgicos,
que tambm definem a unidade mnima de alocao de arquivos e diretrios: cada
arquivo ou diretrio ocupa um ou mais blocos lgicos para seu armazenamento.
O nmero de blocos fsicos em cada bloco lgico de uma partio definido pelo
sistema operacional ao formatar a partio, em funo de vrios parmetros, como o
tamanho da partio, o sistema de arquivos usado e o tamanho das pginas de memria
RAM. Blocos lgicos muito pequenos implicam em ter mais blocos a gerenciar e menos
bytes transferidos em cada operao de leitura/escrita, o que tem impacto negativo
sobre o desempenho do sistema. Por outro lado, blocos lgicos muito grandes podem
levar fragmentao interna: um arquivo com 200 bytes armazenado em um sistema de
arquivos com blocos lgicos de 32.768 bytes (32K) ocupar um bloco lgico, do qual
32.568 bytes sero desperdiados, pois ficaro alocados ao arquivo sem serem usados.
A fragmentao interna diminui o espao til do disco rgido, por isso deve ser evitada.
Uma forma de evit-la escolher um tamanho de bloco lgico adequado ao tamanho
mdio dos arquivos a armazenar no disco, ao format-lo. Alm disso, alguns sistemas
de arquivos (como o UFS do Solaris e o ReiserFS do Linux) permitem a alocao de
partes de blocos lgicos, atravs de tcnicas denominadas fragmentos de blocos ou alocao
de sub-blocos [Vahalia, 1996].

30

c Carlos Maziero

4.3

: Alocao fsica de arquivos

Alocao fsica de arquivos

Um dispositivo de armazenamento visto pelas camadas superiores como um


grande vetor de blocos lgicos de tamanho fixo. O problema da alocao de arquivos
consiste em dispor (alocar) o contedo e os meta-dados dos arquivos dentro desses
blocos lgicos. Como os blocos lgicos so pequenos, cada arquivo poder precisar de
muitos blocos lgicos para ser armazenado no disco (Figura 13). Os dados e meta-dados
de um arquivo devem estar dispostos nesses blocos de forma a permitir um acesso
rpido e confivel. Como um arquivo pode ocupar milhares ou mesmo milhes de
blocos, a forma de alocao dos arquivos nos blocos do disco tem um impacto importante
sobre o desempenho e a robustez do sistema de arquivos.
foto1.jpg
0

relat.pdf

blocos do dispositivo

instruc.txt
6

sinfonia.mp3
0

7 ...

Figura 13: O problema da alocao de arquivos.


A alocao de um arquivo no disco tem como ponto de partida a definio de
um bloco de controle de arquivo (FCB - File Control Block), que nada mais que uma
estrutura contendo os meta-dados do arquivo e a localizao de seu contedo no disco.
Em alguns sistemas de arquivos mais simples, como o sistema FAT (File Alocation
Table) usado em plataformas MS-DOS, o FCB bastante pequeno e cabe na entrada
correspondente ao arquivo, na tabela de diretrio onde ele se encontra definido. Em
sistemas de arquivos mais complexos, os blocos de controle de arquivos so definidos
em estruturas separadas, como a Master File Table do sistema NTFS e os i-nodes dos
sistemas UNIX.
H trs estratgias usuais de alocao de arquivos nos blocos lgicos do disco, que
sero apresentadas a seguir: as alocaes contgua, encadeada e indexada. Como
diretrios so usualmente implementados na forma de arquivos, as estratgias de
alocao discutidas aqui so vlidas tambm para a alocao de diretrios. Essas
estratgias sero descritas e analisadas luz de trs critrios: a rapidez oferecida por
cada estratgia no acesso aos dados do arquivo, tanto para acessos sequenciais quanto
para acessos diretos; a robustez de cada estratgia frente a erros, como blocos de

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

Na alocao contgua, os dados do arquivo so dispostos de forma ordenada sobre


um conjunto de blocos consecutivos no disco, sem buracos entre os blocos. Assim, a
localizao do contedo do arquivo no disco definida pelo endereo de seu primeiro
bloco. A Figura 14 apresenta um exemplo dessa estratgia de alocao (para simplificar
o exemplo, considera-se que a tabela de diretrios contm os meta-dados de cada
arquivo, como nome, tamanho em bytes e nmero do bloco inicial).
00

Tabela de diretrio

01

bytes blocos incio

nome

02
03

foto1.jpg

10417

relat.pdf

28211

13

6214

20

06

19116

24

07

instruc.txt
sinfonia.mp3

04
05

08
09

blocos lgicos com 4096 bytes

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

Figura 14: Estratgia de alocao contgua.


Como os blocos de cada arquivo se encontram em sequncia no disco, o acesso
sequencial aos dados do arquivo rpido, por exigir pouca movimentao da cabea de
leitura do disco. O acesso direto a posies especficas do arquivo tambm rpido,
pois a posio de cada byte do arquivo pode ser facilmente calculada a partir da posio
32

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

contm dados do arquivo e tambm um ponteiro para o prximo bloco, ou seja, um


campo indicando o nmero do prximo bloco do arquivo no disco. Desta forma
construda uma lista encadeada de blocos para cada arquivo, no sendo mais necessrio
manter os blocos do arquivo lado a lado no disco. Esta estratgia elimina a fragmentao
externa, pois todos os blocos livres do disco so utilizveis sem restries, e permite que
arquivos sejam criados sem a necessidade de definir seu tamanho final. A Figura 15
ilustra um exemplo dessa abordagem.
00

Tabela de diretrio

01

bytes blocos incio

02

foto1.jpg

10417

03

relat.pdf

28211

13

6214

20

06

19116

24

07

nome

instruc.txt
sinfonia.mp3

04
05

08
09

blocos lgicos com 4096 bytes

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

Figura 15: Estratgia de alocao encadeada.


Nesta abordagem, o acesso sequencial aos dados do arquivo simples e rpido,
pois cada bloco contm o ponteiro do prximo bloco do arquivo. Todavia, caso os
blocos estejam muito espalhados no disco, a cabea de leitura ter de fazer muitos
deslocamentos, diminuindo o desempenho de acesso ao disco. J o acesso direto a
posies especficas do arquivo fica muito prejudicado com esta abordagem: caso se
deseje acessar um bloco no meio do arquivo, todos os blocos anteriores tero de ser
lidos em sequncia, para poder seguir os ponteiros que levam ao bloco desejado. O
algoritmo 2 mostra claramente esse problema, indicado atravs do lao while. Essa
dependncia dos blocos anteriores tambm acarreta problemas de robustez: caso um
bloco do arquivo seja corrompido ou se torne defeituoso, todos os blocos posteriores a
este tambm ficaro inacessveis. Por outro lado, esta abordagem muito flexvel, pois
34

c Carlos Maziero

: Alocao encadeada

Algoritmo 2 Localizar a posio do i-simo byte do arquivo no disco


i: nmero do byte a localizar
B: tamanho dos blocos lgicos, em bytes
P: tamanho dos ponteiros de blocos, em bytes
b0 : nmero do primeiro bloco do arquivo no disco
bi : nmero do bloco do disco onde se encontra o byte i
oi : posio do byte i dentro do bloco bi (offset)
// define bloco inicial do percurso
baux = b0
// calcula nmero de blocos a percorrer
b = i (B P)
while b > 0 do
block = read_block (baux )
baux = ponteiro extrado de block
b=b1
end while
bi = baux
oi = i mod (B P)
return (bi , oi )
no h necessidade de se definir o tamanho mximo do arquivo durante sua criao, e
arquivos podem ser expandidos ou reduzidos sem maiores dificuldades. Alm disso,
qualquer bloco livre do disco pode ser usados por qualquer arquivo, eliminando a
fragmentao externa.
Os principais problemas da alocao encadeada so o baixo desempenho nos acessos
diretos e a relativa fragilidade em relao a erros nos blocos do disco. Ambos os
problemas provm do fato de que os ponteiros dos blocos so armazenados nos prprios
blocos, junto dos dados do arquivo. Para resolver esse problema, os ponteiros podem
ser retirados dos blocos de dados e armazenados em uma tabela separada. Essa tabela
denominada Tabela de Alocao de Arquivos (FAT - File Allocation Table), sendo a base
dos sistemas de arquivos FAT12, FAT16 e FAT32 usados nos sistemas operacionais MSDOS, Windows e em muitos dispositivos de armazenamento portteis, como pen-drives,
reprodutores MP3 e cmeras fotogrficas digitais.
Na abordagem da FAT, os ponteiros dos blocos de cada arquivo so mantidos em
uma tabela nica, armazenada em blocos reservados no incio da partio. Cada entrada
dessa tabela corresponde a um bloco lgico do disco e contm um ponteiro indicando o
prximo bloco do mesmo arquivo. As entradas da tabela tambm podem conter valores
especiais para indicar o ltimo bloco de cada arquivo, blocos livres, blocos defeituosos e
blocos reservados. Uma cpia dessa tabela mantida em cache na memria durante o
uso do sistema, para melhorar o desempenho na localizao dos blocos dos arquivos.
A Figura 16 apresenta o contedo da tabela de alocao de arquivos para o exemplo
apresentado anteriormente na Figura 15.

35

c Carlos Maziero

: Alocao indexada
Tabela de alocao
de arquivos

00

01

bytes blocos incio

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

blocos lgicos com 4096 bytes

bloco em uso
bloco livre

Entradas da tabela de alocao

17 : nmero do prximo bloco


L : ltimo bloco do arquivo (Last)
F : bloco livre (Free)
R : bloco reservado (Reserved)
B : bloco defeituoso (Bad)

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

Figura 16: Uma tabela de alocao de arquivos.


4.3.3

Alocao indexada

Nesta abordagem, a estrutura em lista encadeada da estratgia anterior substituda


por um vetor contendo um ndice de blocos do arquivo. Cada entrada desse ndice
corresponde a um bloco do arquivo e aponta para a posio desse bloco no disco. O
ndice de blocos de cada arquivo mantido no disco em uma estrutura denominada n de
ndice (index node) ou simplesmente n-i (i-node). O i-node de cada arquivo contm, alm
de seu ndice de blocos, os principais atributos do mesmo, como tamanho, permisses,
datas de acesso, etc. Os i-nodes de todos os arquivos so agrupados em uma tabela de
i-nodes, mantida em uma rea reservada do disco, separada dos blocos de dados dos
arquivos. A Figura 17 apresenta um exemplo de alocao indexada.
Como os i-nodes tambm tm tamanho fixo, o nmero de entradas no ndice de blocos
de um arquivo limitado. Por isso, esta estratgia de alocao impe um tamanho
mximo para os arquivos. Por exemplo, se o sistema usar blocos de 4 Kbytes e o ndice de
blocos suportar 64 entradas, s podero ser armazenados arquivos com at 256 Kbytes.
Alm disso, a tabela de i-nodes tambm tem um tamanho fixo, determinado durante
36

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

blocos lgicos com 4096 bytes


meta-dados
13
16
17

bloco em uso
bloco livre

19
ponteiros
de dados

22
10
12
null
null
null

Figura 17: Estratgia de alocao indexada simples.


a formatao do sistema de arquivos, o que limita o nmero mximo de arquivos ou
diretrios que podem ser criados na partio.
Para aumentar o tamanho mximo dos arquivos armazenados, algumas das entradas
do ndice de blocos podem ser transformadas em ponteiros indiretos. Essas entradas
apontam para blocos do disco que contm outros ponteiros, criando assim uma estrutura
em rvore. Considerando um sistema com blocos lgicos de 4K bytes e ponteiros de
32 bits (4 bytes), cada bloco lgico pode conter 1024 ponteiros, o que aumenta muito
a capacidade do ndice de blocos. Alm de ponteiros indiretos, podem ser usados
ponteiros dupla e triplamente indiretos. Por exemplo, os sistemas de arquivos Ext2/Ext3
do Linux (apresentado na Figura 18) usam i-nodes com 12 ponteiros diretos (que apontam
para blocos de dados), um ponteiro indireto, um ponteiro duplamente indireto e um
ponteiro triplamente indireto. Considerando blocos lgicos de 4K bytes e ponteiros
de 4 bytes, cada bloco de ponteiros contm 1024 ponteiros. Dessa forma, o clculo do
tamanho mximo de um arquivo nesse sistema simples:

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

Figura 18: Estratgia de alocao indexada multi-nvel.


Apesar dessa estrutura aparentemente complexa, a localizao e acesso de um bloco
do arquivo no disco permanece relativamente simples, pois a estrutura homognea
de ponteiros permite calcular a localizao dos blocos com exatido. A localizao do
bloco lgico de disco correspondente ao i-simo bloco lgico de um arquivo segue o
algoritmo 3.
Em relao ao desempenho, pode-se afirmar que esta estratgia bastante rpida,
tanto para acessos sequenciais quanto para acessos diretos a blocos, devido aos ndices
de ponteiros dos blocos presentes nos i-nodes. Contudo, no caso de blocos no final de
arquivos muito grandes, podem ser necessrios trs ou quatro acessos a disco adicionais
para localizar o bloco desejado, devido aos ponteiros indiretos. Defeitos em blocos de
dados no afetam os demais blocos de dados, o que torna esta estratgia robusta. Todavia,
39

c Carlos Maziero

: Alocao indexada

Algoritmo 3 Localizar a posio do i-simo byte do arquivo no disco


1. B: tamanho dos blocos lgicos, em bytes
2. bi : nmero do bloco do disco onde se encontra o byte i
3. oi : posio do byte i dentro do bloco bi (offset)
4. ptr[0...14]: vetor de ponteiros do i-node
5. block[0...1023]: bloco de ponteiros para outros blocos
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.

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

defeitos nos meta-dados (o i-node ou os blocos de ponteiros) podem danificar grandes


extenses do arquivo; por isso, muitos sistemas que usam esta estratgia implementam
tcnicas de redundncia de i-nodes e meta-dados para melhorar a robustez. Em relao
flexibilidade, pode-se afirmar que esta forma de alocao to flexvel quanto a alocao
encadeada, no apresentando fragmentao externa e permitindo o uso de todas as
reas do disco para armazenar dados. Todavia, o tamanho mximo dos arquivos criados
limitado, bem como o nmero mximo de arquivos na partio.
Uma caracterstica interessante da alocao indexada a possibilidade de criar
arquivos esparsos. Um arquivo esparso contm reas mapeadas no disco (contendo
dados) e reas no-mapeadas (sem dados). Somente as reas mapeadas esto fisicamente
alocadas no disco rgido, pois os ponteiros correspondentes a essas reas no i-node
apontam para blocos do disco contendo dados do arquivo. Os ponteiros relativos s
reas no-mapeadas tm valor nulo, servindo apenas para indicar que aquela rea do
arquivo ainda no est mapeada no disco (conforme indicado na Figura 19). Caso um
processo leia uma rea no-mapeada, receber somente zeros. As reas no-mapeadas
sero alocadas em disco somente quando algum processo escrever nelas. Arquivos
esparsos so muito usados por gerenciadores de bancos de dados e outras aplicaes
que precisem manter arquivos com ndices ou tabelas hash que possam conter grandes
intervalos sem uso.
meta-dados

viso lgica do arquivo

i-node

disco

blocos de disco
efetivamente alocados

Figura 19: Alocao de um arquivo esparso.

4.3.4

Anlise comparativa

A Tabela 3 traz um comparativo entre as principais formas de alocao estudadas


aqui, sob a tica de suas caractersticas de rapidez, robustez e flexibilidade de uso.
4.3.5

Gerncia de espao livre

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

: Gerncia de espao livre

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

Acesso sequencial rpido,


se os blocos estiverem prximos; o acesso direto lento,
pois necessrio ler todos
os blocos a partir do incio
do arquivo at encontrar o
bloco desejado.
Alta, pois acessos sequen- Mais robusta que a alocao Alta, pois arquivos podem
cial e direto so rpidos, se encadeada, desde que no ser criados em qualquer loos blocos do arquivo estive- ocorram erros na tabela de cal do disco, sem risco de
rem prximos no disco.
alocao.
fragmentao externa.
Alta, pois os acessos sequen- Alta, desde que no ocor- Alta, pois arquivos podem
cial e direto so rpidos, se ram erros no i-node nem nos ser criados em qualquer loos blocos do arquivo estive- blocos de ponteiros.
cal do disco, sem risco de
rem prximos no disco.
fragmentao externa. No
entanto, o tamanho mximo dos arquivos limitado pelo nmero de ponteiros definidos nos i-nodes.

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.

Tabela 3: Quadro comparativo das estratgias de alocao de arquivos


tcnicas de gerncia de blocos livres so frequentemente utilizadas: o mapa de bits e a
lista de blocos livres [Silberschatz et al., 2001, Tanenbaum, 2003].
Na abordagem de mapa de bits, um pequeno conjunto de blocos no incio da partio
reservado para manter um mapa de bits. Cada bit nesse mapa de bits representa um
bloco lgico da partio, que pode estar livre (o bit vale 1) ou ocupado (o bit vale 0).
Essa abordagem como vantagem ser bastante compacta e simples de implementar: em
um disco de 80 GBytes com blocos lgicos de 4.096 bytes, seriam necessrios 20.971.520
bits no mapa de bits, o que representa 2.621.440 bytes ou 640 blocos (ou seja, 0,003% do
total de blocos lgicos do disco).
A abordagem de lista de blocos livres pode ser implementada de vrias formas. Na
forma mais simples, cada bloco livre contm um ponteiro para o prximo bloco livre do
disco, de forma similar alocao encadeada de arquivos vista na Seo 4.3.2. Apesar
de simples, essa abordagem pouco eficiente, por exigir um acesso a disco para cada
bloco livre requisitado. A abordagem FAT (Seo 4.3.2) uma melhoria desta tcnica,
na qual os blocos livres so indicados por flags especficos na tabela de alocao de
arquivos. Outra melhoria simples consiste em armazenar em cada bloco livre um vetor
de ponteiros para outros blocos livres; o ltimo ponteiro desse vetor apontaria para
um novo bloco livre contendo mais um vetor de ponteiros, e assim sucessivamente.
Essa abordagem permite obter um grande nmero de blocos livre a cada acesso a disco.
Outra melhoria similar consiste em armazenar uma tabela de extenses de blocos livres,
42

c Carlos Maziero

: O sistema de arquivos virtual

ou seja, a localizao e o tamanho de um conjunto de blocos livres consecutivos no disco,


de forma similar alocao contgua (Seo 4.3.1).

4.4

O sistema de arquivos virtual

O sistema de arquivos virtual gerencia os aspectos do sistema de arquivos mais


prximos do usurio, como a verificao de permisses de acesso, o controle de
concorrncia (atribuio e liberao travas) e a manuteno de informaes sobre os
arquivos abertos pelos processos.
Conforme apresentado na Seo 2.1, quando um processo abre um arquivo, ele recebe
do ncleo uma referncia ao arquivo aberto, a ser usada nas operaes subsequentes
envolvendo aquele arquivo. Em sistemas UNIX, as referncias a arquivos abertos so
denominadas descritores de arquivos, e correspondem a ndices de entradas em uma tabela
de arquivos abertos pelo processo (process file table), mantida pelo ncleo. Cada entrada
dessa tabela contm informaes relativas ao uso do arquivo por aquele processo, como
o ponteiro de posio corrente e o modo de acesso ao arquivo solicitado pelo processo
(leitura, escrita, etc.).
Adicionalmente, cada entrada da tabela de arquivos do processo contm uma
referncia para uma entrada correspondente na tabela global de arquivos abertos (system
file table) do sistema. Nessa tabela global, cada entrada contm um contador de processos
que mantm aquele arquivo aberto, uma trava para controle de compartilhamento e
uma referncia s estruturas de dados que representam o arquivo no sistema de arquivos
onde ele se encontra, alm de outras informaes [Bach, 1986, Vahalia, 1996, Love, 2004].
A Figura 20 apresenta a organizao geral das estruturas de controle de arquivos
abertos presentes no sistema de arquivos virtual de um ncleo UNIX tpico. Essa
estrutura similar em outros sistemas, mas pode ser simplificada em sistemas mais
antigos e simples, como no caso do DOS. Deve-se observar que toda essa estrutura
independente do dispositivo fsico onde os dados esto armazenados e da estratgia
de alocao de arquivos utilizada; por essa razo, esta camada denominada sistema
de arquivos virtual. Essa transparncia permite que os processos acessem de maneira
uniforme, usando a mesma interface, arquivos em qualquer meio de armazenamento e
armazenados sob qualquer estratgia de alocao.

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

Figura 20: Estruturas de controle de arquivos abertos em um ncleo UNIX.

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

[Kernighan and Ritchie, 1989] Kernighan, B. and Ritchie, D. (1989). C: a Linguagem de


Programao - Padro ANSI. Campus/Elsevier.
[Levine, 2000] Levine, J. (2000). Linkers and Loaders. Morgan Kaufmann.
[Love, 2004] Love, R. (2004). Linux Kernel Development. Sams Publishing Developers
Library.
[Pike et al., 1995] Pike, R., Presotto, D., Dorward, S., Flandrena, B., Thompson, K.,
Trickey, H., and Winterbottom, P. (1995). Plan 9 from Bell Labs. Journal of Computing
Systems, 8(3):221254.
[Pike et al., 1993] Pike, R., Presotto, D., Thompson, K., Trickey, H., and Winterbottom, P.
(1993). The use of name spaces in Plan 9. Operating Systems Review, 27(2):7276.
[Rice, 2000] Rice, L. (2000). Introduction to OpenVMS. Elsevier Science & Technology
Books.
[Russell et al., 2004] Russell, R., Quinlan, D., and Yeoh, C. (2004). Filesystem Hierarchy
Standard.
[Silberschatz et al., 2001] Silberschatz, A., Galvin, P., and Gagne, G. (2001). Sistemas
Operacionais Conceitos e Aplicaes. Campus.
[Tanenbaum, 2003] Tanenbaum, A. (2003). Sistemas Operacionais Modernos, 2a edio.
Pearson Prentice-Hall.
[Vahalia, 1996] Vahalia, U. (1996). UNIX Internals The New Frontiers. Prentice-Hall.

45

Você também pode gostar