Você está na página 1de 22

Captulo 3

Sistema de Arquivos
A parte mais visvel de um sistema operacional o seu sistema de arquivos.

Programas

aplicativos utilizam o sistema de arquivos (via chamadas de sistema) para criar, ler, gravar
e remover arquivos. Usurios utilizam interativamente o sistema de arquivos (via
listar, alterar propriedades e remover arquivos.

shell )

para

A convenincia e facilidade de uso de um

sistema operacional fortemente determinada pela interface, estrutura e conabilidade de seu


sistema de arquivos.

3.1 Interface do Sistema de Arquivos


Do ponto de vista do usurio, o aspecto mais importante do sistema de arquivos como este
se apresenta, isto , o que constitui um arquivo, como os arquivos so identicados e protegidos,
que operaes so permitidas sobre os arquivos, e assim por diante.

Fundamentos Bsicos
A maior parte dos sistemas operacionais trazem a seguinte proposta para armazenamento
de informao: permitir aos usurios denir objetos chamados

arquivos,

que podem armazenar

programas, dados, ou qualquer outra informao. Estes arquivos no so parte enderevel de


nenhum processo e o sistema operacional prov chamadas de sistema para criar, destruir, ler,
atualizar e proteger arquivos.
Todos os sistemas operacionais visam uma independncia dos dispositivos de armazenamento, permitindo acessar um arquivo sem especicar em qual dispositivo o mesmo se encontra
sicamente armazenado.

Um programa que l um arquivo de entrada e escreve um arqui-

vo sada deve ser capaz de operar com arquivos armazenados em quaisquer dispositivos, sem
necessidade de um cdigo especial para explicitar o tipo de perifrico.
Alguns sistemas operacionais provem maior independncia dos dispositivos de armazenamento que outros.

No UNIX, por exemplo, um sistema de arquivos pode ser montado em

qualquer dispositivo de armazenamento, permitindo que qualquer arquivo seja acessado pelo
seu nome

(path name),

sem considerar o dispositivo fsico.

No MS-DOS, por outro lado, o

usurio deve especicar em qual dispositivo cada arquivo se encontra (exceto quando um dispositivo

default

drive
de entrada e sada no drive

e for omitido). Assim, se o dispositivo

um programa localizado no

drive

A com arquivos

default

dever ser especicado juntamente com o nome do aquivo:

A:programa < B:entrada > B:saida

for o

C, para executar
B, cada um deles

3.2 Projeto do Sistema de Arquivos

45

A maior parte dos sistemas operacionais suportam vrios tipos de arquivos.

O UNIX,

por exemplo, mantm arquivos regulares, diretrios e arquivos especiais. Arquivos regulares
contm dados e programas do usurio.
nomes simblicos (i.e.

Diretrios permitem identicar arquivos atravs de

sequncia de caracteres ASCII). Arquivos especiais so usados para

especicar perifricos tais como terminais, impressoras, unidades de ta, etc. Assim podemos
digitar

cp abc /dev/tty
para copiar um arquivo

abc

para o terminal (arquivo especial

/dev/tty).

Em muitos sistemas, arquivos regulares so subdivididos em diferentes tipos em funo de


sua utilizao. Os tipos so identicados pelos nomes com que os arquivos regulares terminam.
Por exemplo,

arquivo.c - Arquivo fonte em C


arquivo.obj - Arquivo objeto
arquivo.bin - Programa binario executvel
arquivo.lib - Biblioteca de arquivos .OBJ usados

pelo

linker

Em certos sistemas, as extenses so simples conveno: o sistema operacional no faz uso


delas. Em outros, o sistema operacional tem regras rgidas em relao aos nomes. Por exemplo,
o sistema no executar um arquivo a menos que sua extenso seja .BIN.

Diretrios
Para organizar os arquivos, o sistema de arquivos prov
casos so tambm arquivos.
por arquivo.

diretrios,

os quais em muitos

Um diretrio contm tipicamente um nmero de registros, um

Sistemas primitivos admitiam um nico diretrio compartilhado por todos os

usurios, ou um nico diretrio por usurio. Os sistemas operacionais modernos permitem um


nmero arbitrrio de diretrios por usurio (via de regra, formando uma hierarquia). A gura
3.1 ilustra estas trs situaes.
Quando o sistema de arquivos organizado como uma rvore de diretrios, algum meio se
faz necessrio para especicar nomes de arquivos. Dois mtodos so comumente empregados.
No primeiro mtodo, cada arquivo identicado pela sequncia de diretrios desde o diretrio
raiz at o arquivo (caminho absoluto).

signica que o diretrio raiz (/) contm o subdiretrio


que por sua vez contm o arquivo

/usr/mfm/mailbox
contm o subdiretrio mfm,

Como um exemplo, o caminho

mailbox.

usr,

o qual

Nomes absolutos para caminhos sempre comeam

na raiz e so nicos.
Uma outra forma de especicar nomes de arquivos atravs de seu caminho relativo.
usado em conjunto com o conceito de diretrio de trabalho (ou diretrio corrente). Um usurio pode designar um diretrio como diretrio corrente.
referenciados a partir do diretrio corrente.
arquivo cujo caminho absoluto

mailbox.

Neste caso, todos os caminhos so

Se o diretrio corrente for

/usr/mfm/mailbox

/usr/mfm,

ento o

pode ser referenciado simplesmente como

Em UNIX o diretrio corrente denotado por

(ponto).

3.2 Projeto do Sistema de Arquivos


Examinaremos agora o sistema de arquivos do ponto de vista do projetista de sistemas
operacionais. Aos usurios interessa como os arquivos so identicados, quais operaes so

3.2 Projeto do Sistema de Arquivos

46
diretrio raiz

diretrio raiz

arquivo

diretrio de usurio

(a)

subdiretrio

diretrio raiz

A
A

diretrio de usurio
(c)

(b)

Fig. 3.1: Trs projetos de sistemas de arquivos: (a) diretrio nico compartilhado pelos usurios;
(b) um diretrio por usurio; (c) rvore arbitrria por usurio

permitidas, como os diretrios so organizados, etc. Projetistas esto interessados em como o


espao de disco gerenciado, como os arquivos so armazenados, e como manipular arquivos
de forma ecientemente e convel.

Gerenciamento de Espao em Disco


Arquivos so normalmente armazendos em disco, sendo portanto o gerenciamento do espao
em disco de maior interesse do projetista. Duas estratgias so possveis para armazenamento
em um arquivo com

bytes:

bytes consecutivos do disco so alocados; ou o arquivo dividido

em um nmero de blocos no necessariamente contguos. A mesma poltica est presente no


sistema de gerenciamento de memria entre a segmentao pura e a paginao.
Armazenar um arquivo como uma sequncia contgua de bytes apresenta um problema bvio
que o crescimento do arquivo, uma ocorrncia muito comum. O arquivo provavelmente ter
que ser movido no disco.

O mesmo problema apresentado para segmentao na memria,

exceto que mover um segmento na memria uma operao relativamente mais rpida. Por
esta razo, normalmente todos os sistemas de arquivos armazenam os arquivos em blocos de

tamanho xo, que no precisam ser adjacentes .


Uma vez decidido armazenar arquivos em blocos de tamanho xo, a questo denir qual
o tamanho do bloco a ser usado. Dado a forma como os discos so organizados, os setores, as
trilhas e os cilindros so candidatos bvios para a unidade de alocao.
Uma unidade de alocao grande, tal como um cilindro, implica que muitos arquivos, at
mesmo arquivos de 1 byte, devero ocupar o cilindro inteiro. Por outro lado, usar uma unidade de alocao pequena, signinica que cada arquivo ter muitos blocos. A leitura de cada
bloco normalmente requer uma busca e uma latncia rotacional. Assim, a leitura de arquivos
consistindo de muitos blocos pequenos ser lenta.
compromisso usual escolher um bloco de tamanho 512, 1K ou 2K bytes.

Se um bloco

de tamanho 1K for escolhido em um disco com setor de 512 bytes, ento o sistema de arquivo
sempre ir ler ou escrever em dois setores consecutivos, e trat-los como uma unidade indivisvel.
1 Salvo

alguns sistemas operacionais, notadamente os voltados computao de tempo-real, onde o armaze-

namento contnuo adotado por razes de desempenho.

3.2 Projeto do Sistema de Arquivos

47

Uma vez escolhido o tamanho do bloco, a prxima questo como manter o rastreamento
de blocos livres no disco. Dois mtodos so largamente usados (gura 3.2). O primeiro consiste
no uso de uma lista ligada de blocos, com cada elemento da lista armazenando tantos blocos
livres quanto possvel. Com elementos de 1K e o nmero do bloco de 16 bits, cada elemento na
lista de blocos livre armazena 511 blocos livres. Um disco com 20 Gigabytes necessita de uma
lista ocupando aproximadamente 40K blocos para apontar para todos os 20G blocos do disco
(ou seja, a lista ocupa 0,2% do disco).
42
136
45
127
65
254
321
342
123
415

239
124
432
58
490
643
486
12
43
481

971
7
99
640
589
737
872
543
321
13

410
312

654
318

597
873

1001001001011001
0000100100011000
0011001110100100
1000000100001001
0000000000001000

0100001100000011
1111000011000010
(b)

(a)

Fig. 3.2: (a) blocos livres armazenados em lista ligada; (b) um mapa de bits.
Uma outra tcnica de gerenciamento de espao livre o mapa de bits. Um disco com
blocos necessita de um mapa de bits com

bits.

Blocos livres so representados por 1s no

mapa de bits; blocos alocados por 0s (ou vice-versa). Um disco com 20 Gigabytes necessita de
20M bits para o mapa, volume equivalente a 2500 blocos (ou seja, o mapa ocupa apenas 0,013%
do disco). No surpresa que um mapa de bit necessite de menos espao, desde que usa um bit
por bloco, versus 16 bits da lista ligada. Entretanto, para um disco cheio (com poucos blocos
livres) a lista ligada necessita de menos espao que o mapa de bits.

Armazenamento de Arquivos
Se um arquivo consistir de uma sequncia de blocos, o sistema de arquivos deve ter uma
maneira de acessar todos os blocos do arquivo. Como visto acima, um mtodo possvel consiste
em armazenar os blocos de um arquivo em uma lista ligada.

Cada bloco de disco de 1024

bytes, contm 1022 bytes de dados e um ponteiro de 2 bytes para o prximo elemento da lista.
Esse mtodo tem duas desvantagens, entretanto. Primeiro, o nmero de bytes de dados em um
elemento da lista no uma potncia de 2, o que frequentemente uma desvantagem para sua
manipulao. Segundo, e mais srio, o acesso aleatrio de difcil implementao. Se um programa busca o byte 32768 de um arquivo, o sistema operacional tem que percorrer 32768/1022
ou 33 blocos para encontrar o dado. Ler 33 blocos para buscar um dado, inaceitvel.
Entretanto, a idia de representar um arquivo como uma lista encadeada, pode ser ainda
explorada se mantermos os ponteiros em memria. A gura 3.3 mostra o esquema de alocao
usado pelo MS-DOS. Neste exemplo, temos trs arquivos, A, com os blocos 6,8,4 e 2; B, com
os blocos 5, 9 e 12; e C, com os blocos 10, 3 e 13.
Associada a cada disco, existe uma tabela chamada Tabela de Alocao de Arquivos

Allocation TableFAT) que contm um registro para cada bloco do disco.

(File

O registro no diretrio

3.2 Projeto do Sistema de Arquivos

48

FAT
x

EOF

13

FREE

12

10

FREE

11

EOF

12

EOF

13

EOF

14

BAD

15

} tamanho
do disco

12

10

13

Fig. 3.3: Esquema de lista encadeada usado pelo MS-DOS. Os registros 0 e 1 so usadas para
especicao do tipo do disco. Os cdigos EOF e FREE so usados para

End Of File

e registros

livres, respectivamente.

para cada arquivo fornece o endereo inicial do arquivo na FAT. Cada unidade da FAT contm
o nmero do prximo bloco do arquivo. O arquivo A comea no bloco 6, ento o registro 6 da
FAT contm o endereo do prximo bloco do arquivo A, que 8. O registro 8 da FAT contm
o nmero do prximo bloco que o 4. O registro 4 aponta para o registro 2, que est marcado
como m do arquivo.
Este esquema vai se tornando ineciente a medida que a capacidade do disco aumenta. Para
limitar o tamanho da tabela, deve-se aumentar o tamanho do bloco. Suponha um disco de 2
Gigabytes que contm 16K blocos de 32K, resultando em uma FAT com 16K entradas de 2
bytes cada. Dois problemas so intrnsecos deste esquema:
1. dado que mais que um arquivo no podem ocupar o mesmo bloco, um arquivo de 1 byte
armazenado em um bloco de 32 Kbytes;
2. por razes de ecincia, toda a FAT deve estar presente integralmente em memria,
independentemente do nmero de arquivos abertos.
Um mtodo mais ecaz, seria manter listas dos blocos para diferentes arquivos em lugares
diferentes. Isto exatamente o que o UNIX faz.
Associado a cada arquivo no UNIX, tem-se uma pequena tabela (no disco), chamada

inode,

como mostrado na gura 3.4. Ela contm informaes sobre o arquivo tais como tamanho e
proteo.

Os itens chaves so os 10 nmeros de blocos do disco e os 3 nmeros de blocos

indiretos. Para arquivos com 10 blocos ou menos, todos os endereos dos blocos de dados no
disco so mantidos no prprio

inode,

sendo sua localizao imediata.

Quando o tamanho de um arquivo supera 10 blocos, um bloco livre adquirido e o ponteiro


indireto simples passa a apontar para ele. Este bloco usado para armazenar os ponteiros dos
blocos de disco. Com um bloco de disco de 1K e endereos de disco de 32 bits, o bloco indireto

3.2 Projeto do Sistema de Arquivos

49
ponteiro para
blocos de dados

INODE
arquivo
numeros de links
identificador do proprietrio
grupo do proprietrio
tamanho do arquivo
data da criao
data do ltimo acesso
data da ltima modificao

ponteiro para 10 blocos de dados

bloco indireto simples


bloco indireto duplo
bloco indireto triplo

Fig. 3.4: Estrutura do

inode

simples pode acessar 256 endereos de disco. Esse esquema suciente para arquivos de at
266 blocos (10 no

inode,

256 no bloco indireto simples).

Acima de 266 blocos, o ponteiro indireto duplo usado para apontar para um bloco de
disco de at 256 ponteiros, que no apontam para blocos de dados, mas sim para 256 blocos
indiretos simples. O bloco indireto duplo suciente para arquivos de at

266 + 2562 = 65802

blocos. Para arquivos maiores que 64K bytes, o ponteiro indireto triplo usado para apontar
para um bloco que contm ponteiros para 256 blocos indiretos duplos, permitindo arquivos de
at 16 Gigabytes.
Arquivos maiores que 16 Gigabytes no podem ser manuseados por este esquema. Entretanto, aumentando o tamanho do bloco para 2K, cada bloco de ponteiro acessa 512 ponteiros
ao invs de 256, e o tamanho mximo de um arquivo se torna 128 Gigabytes. O ponto forte do
esquema do UNIX que os blocos indiretos so usados somente quando for necessrio. Para
blocos de 1K bytes, arquivos com menos de 10K bytes no necessitam blocos indiretos. Note
que mesmo para os arquivos mais longos so necessrios, no mximo, 3 acessos a disco para
localizar o endereo de um arquivo (descontado o acesso ao

inode ).

Estrutura de Diretrio
Antes de um arquivo ser manipulado, ele deve ser aberto. Quando um arquivo aberto, o
sistema operacional usa o nome de caminho fornecido pelo usurio para localizar os blocos no
disco. Mapeando nomes de caminhos em

inodes (ou equivalentes), introduz-se ao tpico de como

3.2 Projeto do Sistema de Arquivos

50

sistemas de diretrios so organizados. Estes variam desde solues simples at razoavelmente


sosticadas.
Vamos comear com um sistema de diretrio particularmente simples, aquele do CP/M,
ilustrado na gura 3.5(a). Neste sistema, existe apenas um diretrio. Assim, a localizao de
um arquivo reduz-se a procura em um nico diretrio. Encontrado o registro do arquivo, tem-se
o nmero de blocos do disco, posto que estes so armazenados no prprio registro. Se o arquivo
utiliza mais blocos de disco que o permitido no registro, o arquivo ter registros adicionais no
diretrio.
Os campos na gura 3.5(a) so resumidos a seguir. O campo de

usurio

informa a quem

pertence o arquivo. Durante a pesquisa, apenas os registros pertencentes ao usurio corrente


so considerados. Os prximos campos do o nome e tipo do arquivo. O campo

tamanho

necessrio porque um arquivo grande que ocupa mais de 16 blocos, utiliza multplos registros no
diretrio. Estes campos so usados para especicar a ordem dos registros. O campo

de bloco

contador

informa quais dos 16 blocos de disco esto em uso. Os 16 campos nais contm os

nmeros dos blocos de disco. O tamanho dos arquivos medido em blocos, no em bytes.
Vamos considerar agora exemplos de sistemas de diretrio em rvore (hierrquicos).

gura 3.5(b) ilustra um registro de diretrio do MS-DOS com 32 bytes de comprimento e


armazenando o nome do arquivo e o nmero do primeiro bloco, dentre outros itens. O nmero
do primeiro bloco pode ser usado como um ndice dentro da FAT, para achar o segundo bloco, e
assim sucessivamente. Deste modo, todos os blocos podem ser encontrados a partir do primeiro
bloco armazenado na FAT. Exceto para um diretrio raiz, o qual de tamanho xo (448 registros
para um diskete de 1.44M), os diretrios do MS-DOS so arquivos e podem conter um nmero
arbitrrio de registros.
A estrutura de diretrio usada no UNIX extremamente simples, como mostra a gura 3.5(c). Cada registro contm exatamente o nome do arquivo e seu nmero de

inode.

Todas

as informaes sobre tipo, tamanho, marcas de tempo, propriedade, e blocos do disco esto
contidas no

inode

(veja gura 3.4). Todos os diretrios do UNIX so arquivos e podem conter

um nmero arbitrrio destes registros.


bytes

1
usurio

nome do arquivo

tipo
(extenso)

16

contador
de bloco

tamanho

nmero de blocos de disco


(a)

nome do arquivo

tipo
(extenso)

10

atributos

2
hora

2
data

primeiro bloco
(na FAT)

tamanho

(b)

14

numero do inode

nome do arquivo

(c)

Fig. 3.5: Registros de diretrios: (a) CPM; (b) MS-DOS; (c) UNIX
Quando um arquivo aberto, o sistema de arquivos recebe o nome de arquivo fornecido e
localiza seus blocos no disco. Vamos considerar como o nome de caminho

/usr/mfm/mailbox

localizado. Usaremos o UNIX como um exemplo, mas o algoritmo basicamente o mesmo

3.2 Projeto do Sistema de Arquivos

51

para todo sistema hierrquico de diretrios. Primeiro, o sistema de arquivo localiza o diretrio
raiz. No UNIX, o

inode

da raiz posicionado num lugar xo no disco.

Ento, procura-se pelo primeiro componente do caminho,

usr,

no diretrio raiz para achar

/usr. Deste inode, o sistema localiza o diretrio para /usr e procura pelo
mfm, neste caso. Quando o registro para mfm encontrado, tem-se o inode
para o diretrio /usr/mfm. A partir deste inode, pode-se achar o prprio diretrio e procurar
pela entrada do arquivo mailbox. O inode para este arquivo ento lido para a memria e l

inode

do arquivo

prximo componente,

ser mantido at que o arquivo seja fechado. Este processo ilustrado na gura 3.6.
bloco 1
diretrio / (raiz)
1
1
4
7
14
9
6
8
17
11

bloco 132
(diretrio /usr)

.
..

6
1
19
30
51
92
79
27

inode #6

bin
dev
lib
etc
usr
tmp
var
pub

blk = 132
/usr no
inode #6
diretrio /usr
no bloco 132

bloco com os
arquivos do
diretrio /

/usr/mfm/mbox
no inode #85

bloco 416
(diretrio /usr/mfm)
.
51
..
6
321
106
85
539

cursos
papers
mbox
pvm

.
..
clt
ral
mfm
ec
wst
lpm

/usr/mfm no
inode #6

inode #51
blk = 416

diretrio /usr/mfm
no bloco 416

Fig. 3.6: Os passos para achar

/usr/mfm/mailbox

Nomes de caminhos relativos so pesquisados de forma idntica, apenas partindo do diretrio

. e
.., criados juntamente com o diretrio. O registro . armazena o nmero do inode do diretrio
corrente, e o registro .. o nmero do inode do diretrio pai. Assim, o procedimento de procurar
por ../src/prog.c simplesmente localiza .. no diretrio de trabalho, acha o nmero do inode

de trabalho em vez de partir-se do diretrio raiz. Todos os diretrios tm registros para

para o diretrio pai, e pesquisa pelo diretrio

src.

Nenhum mecanismo especial necessrio

para manipular estes nomes.

Arquivos Compartilhados
No raro, usurios desenvolvendo trabalhos em equipe necessitam compartilhar arquivos.
Como resultado, conveniente que um mesmo arquivo pertena simultaneamente a diferentes
diretrios. A gura 3.7 mostra o sistema de arquivos da gura 3.1(c), com um dos arquivos
do usurio C presente em um dos diretrios do usurio B. A associao entre um diretrio e
um arquivo pertencente a outro diretrio chamada de

conexo

ou

link

(linha pontilhada da

gura 3.7). O sistema de arquivos agora um grafo acclico dirigido, ou DAG

graph).

(directed acyclic

Compartilhar arquivos conveniente, mas tambm fonte de alguns problemas. Por exemplo,
se diretrios armazenam endereos de disco, como no CP/M, a conexo se d pela cpia dos
endereos dos blocos do diretrio do qual o arquivo j faz parte para o diretrio sendo conectado.

3.2 Projeto do Sistema de Arquivos

52
diretrio raiz

subdiretrio

diretrio de usurio

C
arquivo compartilhado

Fig. 3.7: Um sistema de arquivos contendo um arquivo compartilhado

Se um usurio aumentar o tamanho do arquivo, os novos blocos sero listados somente no


diretrio deste usurio: as mudanas no sero visveis para os outros usurios, anulando desta
forma o propsito do compartilhamento.
Este problema pode ser solucionado de duas maneiras. Na primeira, os blocos do disco no
so listados nos diretrios, mas em uma pequena estrutura de dados associada com o arquivo
em questo. Os diretrios ento apontariam justamente para a pequena estrutura de dados.
Esta a estratgia usada no UNIX (onde a pequena estrutura de dados o

inode ).

Na segunda soluo, B conecta-se a um dos arquivos de C atravs da criao (em B) de um


arquivo especial. Este arquivo contm justamente o caminho do arquivo conectado. Quando B
referencia o arquivo conectado, o sistema operacional identica-o como do tipo

link, lendo deste

apenas o caminho para o arquivo compartilhado. De posse do caminho, o arquivo compartilhado


acessado. Este mtodo chamado de

conexo simblica.

Cada um destes mtodos tm suas desvantagens.


B conecta-se ao arquivo compartilhado, o

inode

No primeiro mtodo, no momento que

registra C como proprietrio do arquivo. A

criao de uma conexo no muda o proprietrio do arquivo (ver gura 3.8), mas incrementa
um contador no

inode

que diz quantos diretrios apontam para o arquivo.

No caso de C subsequentemente tentar remover o arquivo, o sistema encontra um problema.


Se o sistema remover o arquivo e seu

inode

invlido. Se o

inode

inode, B ter um registro de diretrio apontando para um

for mais tarde reutilizado para um outro arquivo, a conexo de B

apontar para o arquivo incorreto. O sistema pode ver pelo contador do

inode

que o arquivo

est ainda em uso, mas no h maneira de encontrar todos os registros do diretrio para o
arquivo, a m de apag-los. Ponteiros para os diretrios no podem ser armazenados no

inode,

uma vez que podem haver um nmero ilimitado de diretrios.


A nica soluo remover os registros do diretrio C, mas abandonar o

inode

intacto, com

o contador em 1, como mostra a gura 3.8(c). Temos agora uma situao na qual B tem um
registro de diretrio para um arquivo de C. Se o sistema faz controle de cotas, C continuar
sendo contabilizado pelo arquivo at B decidir remov-lo, momento em que o contador ir para
0 e o arquivo ser removido.
Empregando-se conexes simblicas este problema no ocorre pois somente um diretrio
proprietrio guarda o ponteiro para o

inode.

Diretrios que acabaram de conectar-se ao arquivo

3.3 Conabilidade do Sistema de Arquivos


diretrio do
usurio C

diretrio do
usurio B

proprietrio = C
contador = 1

53
diretrio do
usurio C

diretrio do
usurio B

proprietrio = C
contador = 2

proprietrio = C
contador = 1

(b)

(a)

(c)

Fig. 3.8: (a) situao anterior conexo; (b) aps a conexo ter sido feita; (c) aps o proprietrio
remover o arquivo

armazenam o caminho para o arquivo, no ponteiros para o seu


removido do diretrio proprietrio, o

inode

inode.

Quando o arquivo for

liberado pelo sistema, e subsequentes tentativas

para usar o arquivo via conexo simblica falhar, dada a incapacidade do sistema em localizar
o arquivo. Remover uma conexo simblica no afeta o arquivo, causando apenas o decrscimo
do contador do

inode.

overhead
inodes devem

Conexes simblicas introduzem um


acesso via conexo simblica, vrios

extra na manipulao de arquivos.

Num

ser lidos do disco: o primeiro para acessar

o caminho e os subsequentes para percorrer todo o caminho at a localizao do arquivo (ver


gura 3.6). Alm de mltiplos acessos a disco, um

inode

extra necessrio para cada conexo

simblica, juntamente com um bloco extra para armazenar o caminho.


Existe ainda outro problema introduzido pelas conexes, simblicas ou no. Quando conexes so permitidas, uma pesquisa numa rvore de diretrios pode encontrar o mesmo arquivo
vrias vezes.

Isto um problema a se considerar, por exemplo, em aplicativos que efetuam

backups.

3.3 Conabilidade do Sistema de Arquivos


Blocos Defeituosos
Discos frequentemente apresentam blocos defeituosos

(bad blocks),

isto , blocos onde a

escrita e/ou leitura impossibilitada. Duas solues para o problema de blocos defeituosos so
empregadas, uma em

hardware

e outra em

software.

A soluo em

hardware consiste em dedicar

um setor no disco para a lista de blocos defeituosos. Quando o controlador do disco iniciado,
este l a lista de blocos defeituosos e escolhe blocos sobressalentes para substitu-los. So feitas
ento indirees dos blocos defeituosos para os blocos sobressalentes. Da por diante, qualquer
operao envolvendo um bloco defeituoso ter efeito em seu respectivo bloco sobressalente.
A soluo em

software requer que o usurio informe (ou que o sistema de arquivos detecte) os

blocos defeituosos. Estes blocos so armazenados num arquivo, acessado quando da construo
da lista de blocos livres.

Conhecendo os blocos defeituosos, o sistema operacional no os

incorpora na lista de blocos livres, eliminando assim sua ocorrncia futura em arquivos de
dados.

3.3 Conabilidade do Sistema de Arquivos

54

Backups
Mesmo com uma estratgia engenhosa para tratar os blocos defeituosos, importante se
proceder

backups

frequentes.

Sistemas de arquivos em discos de pequena capacidade podem

ser salvos em ta magntica ou disketes de alta densidade.


Para discos de grande capacidade (dezenas de gigabytes), salvar o contedo inteiro em
tas inconveniente e consome muito tempo.

Uma estratgia de fcil implementao, mas

que diminui pela metade a capacidade de armazenamento, prover cada computador com um
segundo disco de igual capacidade.
e

backup.

Ambos os discos so divididos em duas metades: dados

Diariamente, a poro de dados de um disco copiada para a poro de

backup

do outro disco, e vice-versa. Deste modo, se um disco for completamente destrudo, nenhuma
informao perdida.
Uma outra alternativa o

backup

incremental. Em sua forma mais simples, copia-se para

ta todos os arquivos a cada semana ou ms, e, diariamente, apenas daqueles arquivos que
foram modicados deste o ltimo

backup

completo. Um outro esquema, mais eciente, copia-se

apenas aqueles arquivos que foram alterados desde o ltimo

backup.

Para implementar este

mtodo, o horrio da ltima duplicao para cada arquivo deve ser mantida no disco.

Consistncia do Sistema de Arquivos


Outro tpico envolvendo conabilidade a consistncia do sistema de arquivos.
sistemas de arquivos lem blocos, modica-os, e os regrava mais tarde.

Muitos

Se o sistema falha

antes que todos os blocos modicados forem escritos no disco, o sistema de arquivos assume
um estado inconsistente. Este problema especialmente crtico se alguns dos blocos que no
foram escritos, so blocos de

inodes,

blocos de diretrio, ou blocos contendo a lista de blocos

livres.
Para vericar a consistncia do sistema de arquivos, muitos sistemas operacionais utilizam
programas utilitrios desenvolvidos para este m. Este programa executado sempre que o
sistema iniciado, particularmente depois de um desligamento abrupto.

A seguir descrito

como tal utilitrio opera no UNIX .


O controle de consistncia se d em dois nveis: blocos e arquivos. Para controle de consistncia no nvel de bloco, o utilitrio constri uma tabela com dois contadores por bloco,
ambos iniciados em 0. O primeiro contador rastreia quantas vezes o bloco aparece no arquivo;
o segundo registra com que frequncia ele aparece na lista de blocos livres.
O utilitrio l todos os

inodes.

Comeando de um

inode,

possvel construir uma lista de

todos os nmeros de blocos usados no correspondente arquivo.

Assim que cada nmero de

bloco lido, seu respectivo contador na primeira tabela incrementado. A seguir, examinada
a lista de blocos livres rastreando todos os blocos que no esto em uso. Cada ocorrncia de
um bloco na lista de blocos livres resulta no incremento do respectivo contador na segunda
tabela.
Se o sistema de arquivo for consistente, cada bloco ter o valor 1 na primeira tabela ou
na segunda tabela. Contudo, em caso de falha, pode detectar-se blocos que no ocorrem em
nenhuma das tabelas (blocos perdidos). Embora blocos perdidos no causem um dano real, eles
desperdiam espao, reduzindo assim a capacidade do disco. A soluo para blocos perdidos
direta: o vericador do sistema de arquivos acrescenta-os na lista de blocos livres.
Outra situao possvel de ocorrer a repetio de blocos na lista de blocos livres. A soluo
neste caso tambm simples: reconstruir a lista de blocos livres, eliminando-se as duplicaes.
2 Este

utilitrio denomina-se

fsck (le system checker).

3.4 Desempenho do Sistema de Arquivos

55

O mais grave a ocorrncia do mesmo bloco de dados em dois ou mais arquivos. Se cada um
desses arquivos for removido, o bloco duplicado ser posto na lista de blocos livres, chegando-se
em uma situao em que o mesmo bloco est, ambiguamente, em uso e livre ao mesmo tempo.
Se ambos os arquivos forem removidos, o bloco ser adicionado na lista de blocos livres duas
vezes.
A ao apropriada do utilitrio alocar um bloco livre, copiar o contedo do bloco duplicado
para o mesmo, e inserir a cpia em um dos arquivos. Desde modo, a informao dos arquivos
no alterada (embora certamente incorreta para um dos arquivos), mas a estrutura do sistema
de arquivos , pelo menos, consistente. O erro ser informado para permitir ao usurio examinar
a falha.
Ainda para vericar se cada bloco contado corretamente, o utilitrio tambm examina
o sistema de diretrios (consistncia no nvel de arquivos).

Neste caso, usada uma tabela

de contadores por arquivos (no por blocos, como anteriormente).

A vericao comea no

diretrio raiz e, recursivamente, desce a rvore inspecionando cada diretrio no sistema de


arquivos. Para cada arquivo encontrado, incrementa-se o contador para o seu respectivo

inode.

Quando toda a rvore de diretrios percorrida, tem-se uma lista, indexada pelo nmero do

inode,

descrevendo quantos diretrios apontam para aquele

esses valores com os contadores dos

inodes.

inode.

O utilitrio ento compara

Em um sistema de arquivos consistente, ambos

contadores coincidiro. Contudo, dois tipos de erros podem ocorrer: o contador do

inode

pode

ser maior ou menor que o da lista do utilitrio.


Se a contagem no

inode

for maior que o nmero de registros do diretrio, ento mesmo se

todos os arquivos forem removidos dos diretrios, o contador ainda ser diferente de 0 e o
no ser liberado.

inode

Este erro no catastrco, mas consome espao no disco com arquivos

que no esto em nenhum dos diretrios. O contador de conexes do

inode

deve ser corrigido

atravs da atribuio do valor obtido pelo utilitrio.

inode menor que


o encontrado pelo utilitrio. A medida que os arquivos que apontam para o inode vo sendo
removidos, o contador do inode pode chegar a zero, momento que o inode e seus respectivos
blocos so liberados. Esta ao resultar em um dos diretrios apontando para um inode no
Outro erro (potencialmente catastrco) ocorre quando o contador do

mais em uso, cujos blocos podem rapidamente ser atribuidos a outros arquivos. Novamente, a
soluo forar o contador do

inode para

o nmero real de registros do diretrio (obtidas pelo

utilitrio).
Estas duas operaes, vericar blocos e vericar diretrios, so frequentemente integradas
por razes de ecincia (i.e., uma nica passagem sobre os

inodes

requerida). Outros controles

heursticos so tambm possveis. Por exemplo, diretrios tm um formato denido, com um


nmero

inodes

e nomes ASCII. Se um nmero

inode

for maior que o nmero de

inodes

no

disco, o diretrio encontra-se num estado inconsistente.

3.4 Desempenho do Sistema de Arquivos


Um acesso a disco muito mais lento que um acesso a memria.

Ler uma palavra da

memria leva tipicamente algumas centenas de nanosegundos. Ler um bloco do disco requer
alguns milisegundos, um fator 100.000 vezes mais lento. Como resultado, muitos sistemas de
arquivos tm sido projetados para reduzir o nmero necessrio de acessos a disco.
A tcnica mais comum para reduzir o acesso a disco a
contexto, uma

cache

block cache

ou

buer cache.

Neste

uma coleo de blocos que pertencem logicamente ao disco, mas so

mantidos na memria por razes de desempenho.

3.4 Desempenho do Sistema de Arquivos

56

Vrios algoritmos podem ser usados para gerenciar o

cache,

mas o mais comum o que

verica todas as requisies de leitura para ver se o bloco referido est na

cache.

Se estiver,

a requisio de leitura pode ser satisfeita sem acesso a disco. Se o bloco no estiver na
ele inicialmente lido para a

cache,

cache,

e ento copiado para a rea do processo que requisitou o

acesso. Requisies subsequentes do mesmo bloco podem ser satisfeitas atravs da


Quando um bloco tem que ser carregado para uma

cache

cache.

cheia, algum bloco ter que ser

removido e reescrito no disco, caso tenha sido modicado desde o instante em que foi instalado
na

cache.

Esta situao muito parecida com a paginao, e todos os algoritmos usuais de

paginao, tal como o menos recentemente usado (LRU) podem ser aplicados neste contexto.
Se um bloco for essencial para a consistncia do sistema de arquivos (basicamente tudo,
exceto blocos de dados), e foi modicado na

cache, necessrio que o mesmo seja escrito no disco

imediatamente. Escrevendo blocos crticos rapidamente no disco, reduzimos a probabilidade


que falhas daniquem o sistema de arquivos.
At mesmo com estas medidas para manter a integridade do sistema de arquivos, indesejvel manter blocos de dados na

cache

durante muito tempo antes que sejam descarregados

em disco. Os sistemas de arquivos adotam duas estratgias para tal. No UNIX, a chamada de
sistema

sync,

fora com que todos os blocos modicados sejam gravados em disco imediata-

mente. Quando o sistema iniciado, um programa, usualmente chamado


30 em 30 segundos, a atualizao da

cache

update, ativado.

De

estabelecida. Como resultado, na pior hiptese,

perde-se os blocos gravados nos ltimos 30 segundos em caso de uma pane.


A soluo do MS-DOS gravar todo bloco modicado para o disco to logo tenha sido escri-

Caches nas quais blocos modicados so reescritos imediatamente no disco so chamadas


caches de escrita direta. Elas requerem muito mais E/S de disco que caches de escrita no

to.

direta. A diferena entre estas duas tcnicas pode ser vista quando um programa escreve num
buer de 1K, caracter por caracter. O UNIX coleta todos os caracteres da
bloco de uma vez em 30 segundos, ou quando o bloco for removido da

cache,

e escreve o

cache.

O MS-DOS faz acesso a disco para cada um dos caracteres escritos. Naturalmente, muitos
programas fazem buerizao interna, procedendo gravaes em disco apenas quando existir
uma determinada quantidade de bytes pendentes.

A estratgia adotada pelo MS-DOS foi

inuenciada pela garantia que a remoo de um disco exvel de sua unidade no causa perda
de dados. No UNIX, necessria uma chamada

sync

antes da remoo de qualquer meio de

armazenamento (ou da parada programada do sistema).

Cache

no a nica maneira de aumentar o desempenho do sistema de arquivos.

Uma

outra maneira reduzir a quantidade de movimentos do brao do disco, colocando blocos que
esto sendo acessados em sequncia, preferencialmente em um mesmo cilindro. Quando um
arquivo escrito, o sistema de arquivos aloca os blocos um por vez, a medida do necessrio.
Se os blocos livres estiverem gravados em um mapa de bits, e o mapa de bits inteiro est na
memria principal, fcil escolher um bloco que est mais perto do bloco anterior. Com uma
lista de blocos livres, parte da qual est no disco, mais difcil alocar blocos prximos.
Entretanto, com uma lista de blocos livres alguns agrupamentos de blocos podem ser feitos.
O artifcio manter a trilha do disco armazenada no em blocos, mais em grupos consecutivos
de blocos. Se uma trilha consistir de 64 setores de 512 bytes, o sistema pode usar blocos de
1K bytes (2 setores), porm alocando espao no disco em unidades de 2 blocos (4 setores). Isto
no o mesmo que ter um bloco de 2K, posto que na

cache

ainda se usa blocos de 1K com

transferncia para disco tambm de 1K. Entretanto, a leitura sequencial reduz o nmero de
busca de um fator de 2, melhorando consideravelmente o desempenho.
Outra variante fazer uso do posicionamento rotacional. Quando se alocam blocos, o siste-

3.5 O Sistema de Arquivos do UNIX (System V)

57

ma atenta para colocar blocos consecutivos de um arquivo no mesmo cilindro, mas intercalados.
Deste modo, se um disco tiver um tempo de rotao de 16.67 mseg e 4 mseg so necessrios
para o processo do usurio requerer e acessar um bloco do disco, cada bloco deve ser colocado
em ao menos um quarto da distncia do seu antecessor.
Um outro agravante no desempenho dos sistemas que usam

inodes,

ou algo similar, que

para ler at mesmo um pequeno arquivo, seja necessrio 2 acessos no disco: um para o
outro para o bloco. Caso todos os
entre o

inode

inodes

inode

estar em torno da metade do nmero de cilindros, o que exige longas buscas.

Melhor alternativa instalar os


o

inode

estejam prximos do incio do disco, distncia mdia

inodes

no meio do disco, reduzindo a mdia de busca entre

e o primeiro bloco de um fator de 2.

Uma outra idia consiste em dividir o disco

em grupos de cilindros, cada qual com os seus prprios


Quando se cria um novo arquivo, qualquer

inode

inodes,

blocos, e lista de blocos livres.

pode ser escolhido, mas tendo-se o cuidado

de achar um bloco no mesmo grupo de cilindros onde o

inode

est. Caso nenhum bloco esteja

disponvel, escolhe-se um bloco do cilindro mais prximo.

3.5 O Sistema de Arquivos do UNIX (System V)


O funo do ncleo do ponto de vista do sistema de arquivos consiste em permitir que os
processos armazenem novas informaes ou que recuperem informaes previamente armazenadas. Para a realizao destas atividades o ncleo necessita trazer informaes auxiliares para a
memria. Como exemplo, podemos destacar o super-bloco, o qual descreve, dentre outras informaes, a quantidade de espao livre disponvel no sistema de arquivos e os

inodes

disponveis.

Estas informaes so manipuladas de forma transparente para os processos.


Com o objetivo de minimizar a frequncia de acesso ao disco o ncleo gerencia um
interno de buers denominado de

software

cache de buers.

pool

Neste caso, trata-se de uma estrutura de

que no deve ser confundida com a memria

cache

em

hardware

que utilizada para

acelerar as referncias memria.

3.5.1 O Cache de Buers


O nmero de buers que fazem parte do

cache de buers

depende do tamanho da memria

e das restries de desempenho impostas, sendo o espao necessrio para armazen-los alocado
pelo ncleo durante a iniciao do sistema. Cada buer formado de duas partes: um segmento de memria utilizado para abrigar os dados que so lidos/escritos da/na memria e um
cabealho que identica o buer.
A viso que o ncleo possui do sistema de arquivos no disco uma viso lgica. O mapeamento desta viso lgica na estrutura fsica do disco realizada pelos

drivers

dos dispositivos.

Dentro desta viso, o ncleo enxerga o sistema de arquivos como sendo formado por vrios blocos de disco; no caso, um buer corresponde a um bloco, sendo o seu contedo identicado pelo
ncleo atravs de um exame dos campos presentes no cabealho associado ao buer. Podemos
concluir que o buer a cpia na memria de um bloco de disco, cpia esta que mantida at
o instante em que o ncleo decide mapear um outro bloco no buer. Uma restrio importante
a de que um bloco do disco no pode ser mapeado em mais de um buer ao mesmo tempo.
O cabealho de um buer contm 4 classes de informao (ver gura 3.9): identicao,
posicionamento, estado e posio dentro do segmento de memria.

A identicao permite

reconhecer a qual bloco do disco o buer est associado. O cabealho do buer contm um
campo com o nmero do dispositivo e um campo com o nmero do bloco.

Estes campos

3.5 O Sistema de Arquivos do UNIX (System V)

58

especicam o sistema de arquivo e o nmero do bloco de dado no disco identicando de forma


nica o buer. Com relao ao posicionamento, o cabealho possui apontadores para posicionar
o buer em duas estruturas:

lista de buers livres e a la

hash.

O cabealho possui um

apontador para a rea de dado (segmento) correspondente ao buer. Deve ser observado que o
tamanho desta rea deve ser igual ao tamanho do bloco do disco. O quarto campo o campo
de status que indica a situao do buer, podendo ter um dos seguintes valores:

buer trancado (locked );

buer contendo dados vlidos;

buer com escrita retardada - signica a situao em que o ncleo deve escrever o contedo
do buer no disco antes de reatribuir o buer a um outro bloco;

o ncleo encontra-se lendo ou escrevendo o contedo do buer no disco;

um processo encontra-se aguardando que o buer torne-se livre.

nmero do dispositivo
nmero do bloco
status
rea de dados
(tamanho do bloco)

ponteiro p/ area de dados


ponteiro p/ prximo
(fila de hash)
ponteiro p/ anterior
(fila de hash)
ponteiro p/ prximo
(lista de blocos livre)
ponteiro p/ anterior
(lista de blocos livre)

Fig. 3.9: Cabealho do buer

Estrutura do Pool de Buers


Os blocos de dado no disco so organizados no

cache de buers

atravs de uma poltica

denominada de uso menos recente. Atravs desta poltica, quando um buer alocado a um
determinado bloco, este buer no poder ser realocado a um outro bloco, a menos que todos
os outros blocos tenham sido usados mais recentemente.

Para implementao desta poltica

o ncleo mantm uma lista de buers livres que organizada segundo a ordem do uso menos
recente.
O ncleo retira um buer da cabea da lista quando da necessidade de um buer livre.
possvel que um buer seja retirado do meio da lista caso o ncleo identique um bloco
especco no

cache de buers.

Em ambos os casos o buer removido da lista.

Quando o

ncleo retorna um buer ao pool, ele normalmente coloca o buer no nal da lista sendo que,
ocasionalmente (em situaes de erro), o buer colocado na cabea da lista. O buer nunca
recolocado no meio da lista de buers livres.

3.5 O Sistema de Arquivos do UNIX (System V)

59

Quando o ncleo necessita acessar um bloco do disco, ele procura um buer que possua

nmero de dispositivo-nmero de bloco. Para evitar a necessidade do


ncleo pesquisar o cache de buers por completo, estes so organizados em las separadas,
espalhadas por uma funo de hash que tem como parmetros os nmeros do dispositivo e do
bloco. Os buers so colocados em uma la hash circular, duplamente ligada, em uma forma

a combinao adequada

equivalente estrutura da lista de buers livres.


Todo buer est na la

hash,

no existindo, entretanto, signicado para a sua posio na

la. Um buer pode encontrar-se, simultaneamente, na lista de buers livres, caso o seu estado
seja livre, e na la

hash

(por exemplo, o buer 64 da gura 3.10).

pode procurar um buer na lista

hash

Desta forma, o ncleo

caso ele esteja procurando um buer especco, ou ele

pode remover um buer da lista de buers livres caso ele esteja procurando por um buer livre
qualquer. Resumindo, um buer que se encontra na lista

hash

pode ou no encontrar-se na

lista de buers livres.


fila de hash

28

17

97

98

50

64

14

38

cabea
f(b) = b mod 4

Fig. 3.10: Estrutura do

cauda

lista de buffers livres

cache de buers :

la de

hash

e lista de buers livres

Cenrios para Recuperao de um Buer


O

cache de buers

sistema de arquivos.

manipulado por um conjunto de algoritmos que so invocados pelo


O sistema de arquivos determina o nmero do dispositivo lgico e o

nmero do bloco a ser acessado, por exemplo, quando um processo necessita ler dados de um
arquivo.
Quando da leitura ou escrita de dados de um determinado bloco do disco, o ncleo determina
se o bloco encontra-se no

cache de buers

e, caso ele no se encontre, um buer livre atribuido

ao bloco. Os algoritmos para leitura/escrita em blocos do disco usam um algoritmo


para alocao de buers a partir do pool.
Existem cinco cenrios tpicos associados ao algoritmo

(getblk)

getblk:

1. O ncleo encontra o buer correspondente ao bloco na la

hash

e o buer est livre. Neste

3.5 O Sistema de Arquivos do UNIX (System V)

60

caso, o algoritmo marca o buer como ocupado, remove-o da lista de buers livres e
retorna um ponteiro para o buer.
2. O ncleo no encontra o buer correspondente ao bloco na la
lista de buers livres, reposicionando-o na la de

hash.

hash

3. O ncleo no encontra o buer correspondente ao bloco na la

e aloca um buer da

hash

e, na tentativa de

alocar um buer da lista de buer livre (como no cenrio 2), encontra um buer na lista
de buers livres marcado com escrita adiada

(delayed write).

Neste caso, o ncleo deve

escrever (assincronamente) o buer no disco e continuar a procura de um buer livre para


o bloco.
4. O ncleo no encontra o buer correspondente ao bloco na la

hash,

e a lista de buers

livres encontra-se vazia. Neste caso, o processo bloqueado at que outro processo devolva
um buer lista de buers livres.
5. O ncleo encontra o buer correspondente ao bloco na la

hash,

mas o seu buer est

ocupado (outro processo est acessando exatamente este bloco). Neste caso, o processo
bloqueado at que o outro processo conclua a operao sob este bloco.
Note que em qualquer cenrio acima, ou o algoritmo
na la de

hash

getblk volta um buer j posicionado

para que a operao de E/S possa continuar; ou bloqueia o processo a espera

de buer ou liberao do bloco.


Alm do algoritmo

getblk, existem outros quatro algoritmos que operam o cache de buers :

1.

brelse:

2.

bread:

3.

breada:

l assincronamente (sem espera) o bloco do disco para o buer.

4.

bwrite:

escreve um bloco do buer para o disco.

libera um bloco, retornando-o lista de blocos livres.

l sincronamente (com espera) o bloco do disco para o buer.

3.5.2 Representao Interna dos Arquivos


Todo arquivo no UNIX

System

V contm um nico

inode.

inode

possui as informaes

necessrias para um processo acessar um arquivo, tais como: proprietrio do arquivo, direito
de acesso, tamanho do arquivo e localizao dos dados (blocos) do arquivo. A referncia a um
arquivo feita pelo seu nome e, atravs deste, o ncleo determina o
Os algoritmos envolvidos na manipulao dos
ritmos que operam sobre o

iget:

inode previamente
cache de buers ;

retorna um

do disco via o

cache de buers

inodes

inode

do arquivo.

resumidos a seguir utilizam os algo-

discutidos anteriormente.
identicado, possivelmente atravs da sua leitura

iput:

libera o

bmap:

dene os parmetros do ncleo para o acesso a um arquivo;

inode ;

namei:

converte um nome (path ) de arquivo no

alloc:

aloca blocos do disco para os arquivos;

inode

correspondente;

3.5 O Sistema de Arquivos do UNIX (System V)


free:

61

libera blocos de disco;

ialloc:
ifree:

inodes

aloca

libera

para os arquivos;

inodes.

Estes algoritmos utilizam outros que manipulam o

bread, breada, bwrite).

cache de buers (getblk, brelse,

Estrutura do Inode
Um

inode

existe estaticamente no disco e o ncleo realiza a sua leitura para a memria

quando necessita manipul-lo. O

inode

no disco contm os seguintes campos (ver gura 3.4):

identicador do dono do arquivo: divido em dono individual e grupo;

tipo do arquivo: regular, diretrio, especial ou FIFO (pipes);

permisso de acesso;

instantes de acesso ao arquivo: ltima modicao, ltimo acesso e ltima modicao


ocorrida no

inode ;
(links)

nmero de conexes

endereos no disco dos blocos de dados do arquivo;

tamanho do arquivo.

A cpia do

inode

associados ao arquivo;

em memria contm os seguintes campos em adio aos campos do

inode

em disco:

status do
- o

inode

inode

na memria indicando:

est trancado;

- processo encontra-se esperando que o


- a representao do
dados do

inode ;

inode

inode

seja liberado;

na memria difere da cpia do disco devido a mudanas nos

- a representao do arquivo na memria difere da cpia do disco devido a mudanas nos


dados do arquivo;
- o arquivo um

mount point.

o nmero do dispositivo lgico do sistema de arquivos que contm o arquivo;

o nmero do

inode.

inode

no disco no necessita deste nmero pois os

inodes

so

armazenados em um arranjo linear no disco;

apontadores para outros


uma lista de

inodes

inodes

hash e em
so ligados no cache de buers ;

na memria. O ncleo liga os

livres da mesma forma que os buers

inodes

em las

um contador de referncia, indicando o nmero de instncias do arquivo que esto ativas.

3.5 O Sistema de Arquivos do UNIX (System V)


A diferena mais signicativa entre o

de buers

inode

na memria e o cabealho do buer no

inode,

o contador de referncia presente no

(acessos) ativas do arquivo. Um

inode

62
cache

o qual indica o nmero de instncias

torna-se ativo quando um processo realiza a sua alocao,

por exemplo, atravs da abertura do arquivo. Um

inode

inodes

colocado na lista de

livres

se, e somente se, o seu contador de referncia 0, signicando que o ncleo pode realocar sua

inode do disco.
cache de buers ).

estrutura na memria a um outro

de inodes

(exatamente como o

A lista de

inodes

livres serve como um

cache

Acesso aos Inodes


O ncleo identica um

inode

especco atravs do nmero do seu sistema de arquivo e do

iget cria uma cpia do inode na memria fsica,


algoritmo getblk utilizado para encontrar um bloco do

seu nmero dentro deste sistema. O algoritmo


realizando um papel equivalente ao
disco no

cache de buers.

Caso o algoritmo no encontre o

inode

ao nmero do

procurado, um

consequentemente trancado
de ler o

inode

(locked).

inode
inode

na la

hash

associada ao nmero do dispositivo e

alocado a partir da lista de

no

oset

inode

do

no

do bloco: ((

da lista de

oset :

do

inodes

inode -1)

inodes

/ nmero de

no do inode -1) MOD (nmero de inodes

((

inode

(algoritmo

inode

referenciado e para

por bloco) + nmero do bloco inicial

por bloco) * tamanho do

iput)

inode

inode

no disco

ele decrementa seu contador de refe-

Caso o valor do contador se torne 0, o ncleo escreve o

na memria seja diferente da cpia no disco. O


hiptese de que este

inode

dentro do bloco, o ncleo utiliza as seguintes expresses:

Quando o ncleo libera um


rncia.

livres sendo

do disco correspondente ao arquivo que esta sendo referenciado e copi-lo para

a memria fsica. Para determinar o bloco do disco que contm o


determinar o

inodes

A partir deste ponto o ncleo encontra-se em condio

inode

no disco caso a cpia

colocado na lista de

inodes

livres na

possa ser necessrio posteriormente.

Estrutura de um Arquivo Regular


A indicao dos blocos do disco que constituem um determinado arquivo encontra-se no

inode

associado ao arquivo. Esta indicao traduz-se na utilizao de 13 nmeros para blocos.


o
Os 10 primeiros nmeros (blocos diretos) contm nmeros para blocos de disco; o
nmero
o
o
um indireto duplo e o
um indireto triplo. Esta soluo, conforme
um indireto simples, o

12

11

13

discutido anteriormente, permite que os 10 primeiros nmeros componham um arquivo de 10


Kbytes (supondo blocos de 1 Kbytes).

Elevando-se este nmero para 11, 12 e 13, tem-se,

respectivamente, arquivos de at 256 Kilobytes, 64 Megabytes e 16 Gigabytes (mximo para o


UNIX).
Os processos enxergam o arquivo como um conjunto de bytes comeando com o endereo 0
e terminando com o endereo equivalente ao tamanho do arquivo menos 1. O ncleo converte
esta viso dos processos em termos de bytes em uma viso em termos de blocos: o arquivo
comea com o bloco 0 (apontado pelo primeiro nmero de bloco no

inode )

e continua at o

nmero de bloco lgico correspondente ao tamanho do arquivo.


Um exame mais detalhado das entradas dos blocos no

inode

pode mostrar que algumas

entradas possuem o valor 0, indicando que o bloco lgico no contm dados. Isto acontece caso
nenhum processo tenha escrito dados no arquivo em qualquer

oset

correspondente a estes

3.5 O Sistema de Arquivos do UNIX (System V)


blocos.
Este

63

Deve ser observado que nenhum espao em disco desperdiado para estes blocos.

layout

pode ser criado pelo uso das chamadas

lseek

write.

Estrutura do Diretrio
Quando da abertura de um arquivo, o sistema operacional utiliza o nome

(path)

do arquivo

fornecido pelo usurio para localizar os blocos do disco associados ao arquivo. O mapeamento
do nome nos

inodes

est associado forma como o sistema de diretrio encontra-se organizado.

A estrutura de diretrio usada no UNIX extremamente simples. Cada entrada contm o


nome do arquivo e o nmero do seu
para o nmero do

inode

inode,

representados atravs de 16 bytes, ou seja, 2 bytes

e 14 bytes para o nome . Todos os diretrios do UNIX so arquivos e

podem conter um nmero arbitrrio destas entradas de 16 bytes.


Quando um arquivo aberto, o sistema deve, atravs do nome do arquivo, localizar os seus
blocos no disco. Caso o nome do arquivo seja relativo, isto , associado ao diretrio corrente,
o ncleo acessa o

inode

associado ao diretrio corrente na rea U do processo e realiza um

procedimento semelhante ao exemplo da subseo 3.2.

3.5.3 Atribuio de inodes e Blocos


At o momento consideramos a hiptese de que um

inode

havia sido previamente associado

a um arquivo e que os blocos do disco j continham os dados.


como o ncleo atribui

inodes

Ser discutido na sequncia

e blocos do disco. Para isto importante conhecer a estrutura do

super-bloco.

O Super-Bloco
O super-bloco um segmento contnuo de disco formado pelos seguintes campos:

tamanho do sistema de arquivos;

nmero de blocos livres no sistema;

lista de blocos livres disponveis no sistema de arquivos;

ndice do prximo bloco livre na lista de blocos livres;

tamanho da lista de

nmero de

lista de

ndice do prximo

inode

campos trancados

(locked)

ag

inodes

inodes

inodes ;

livres no sistema de arquivos;

livres no sistema de arquivos;


livre na lista de

inodes ;

para as listas de blocos livres e

inodes

livres;

indicando que o super-bloco foi modicado.

O super-bloco mantido na memria fsica de modo a agilizar as operaes sobre o sistema


de arquivos, sendo periodicamente copiado no disco para manter a consistncia do sistema de
arquivos.
3 Verses

correntes do UNIX permitem nomes bem mais extensos.

3.5 O Sistema de Arquivos do UNIX (System V)

64

Atribuio de um Inode a um Novo Arquivo


de arquivos

ialloc

inode do disco para um arquivo recm criado. O sistema


contm uma lista linear de inodes. Um inode nesta lista encontra-se livre quando o

O algoritmo

atribui um

seu campo de tipo zero. Para melhorar o desempenho, o super-bloco do sistema de arquivos
contm um arranjo que atua como um

cache

sistema de arquivos No confundir esta lista com aquela para abrigar os


de

inodes

inodes livres do
inodes livres no pool

no qual so armazenados os

em memria. Aquela est relacionada manipulao de

inodes

associados a arquivos

j criados e que sero ativos para manipulao por parte dos processos. Esta lista de
livres associada ao super-bloco abriga os

inodes

inodes

no disco que no esto alocados a nenhum

arquivo e que podero ser associados aos arquivos que sero criados no sistema.

Alocao de Blocos no Disco


Quando um processo necessita escrever dados em um arquivo, o ncleo aloca blocos do
disco para a expanso do arquivo, o que signica associar novos blocos ao

inode.

Para agilizar

a determinao de quais blocos do disco esto disponveis para serem alocados ao arquivo, o
super-bloco contm um arranjo que relaciona o nmero de blocos do disco que esto livres. Este
arranjo utiliza blocos de disco cujo contedo so nmeros de blocos livres. Uma das entradas
destes blocos constitui-se de um apontador para outro bloco contendo nmeros de blocos livres.
Estabelece-se, desta forma, uma lista ligada (em disco) de blocos que contm nmeros de blocos
livres. O super-bloco possui parte desta lista ligada, de tamanho mximo correspondendo a
um bloco, sendo gerenciada quando da liberao de blocos e quando da requisio de blocos de
modo a manter sempre uma indicao de parte dos blocos livres no disco. O algoritmo

alloc

realiza a alocao de um bloco do sistema de arquivos alocando o prximo bloco disponvel na


lista do super-bloco.

3.5.4 Chamadas de Sistema Referentes ao Sistema de Arquivos


As chamadas de sistema que compem o sistema de arquivos utilizam, dentre outros, os
algoritmos descritos acima (getblk,
um

descritor de arquivos

ialloc,

etc.). Cada arquivo no UNIX identicado por

(um nmero inteiro). Descritores de arquivos identicam univoca-

mente arquivos no nvel de processo, isto , dois arquivos abertos pelo mesmo processo possuem
descritores necessariamente diferentes.
As principais chamadas de sistema referentes ao sistema de arquivos sero suscintamente
descritas a seguir.
1.

open:

abre um arquivo para leitura/gravao.

Parmetros da chamada indicam, por

exemplo, se o arquivo deve ser criado (caso inexista) e permisses.


2.

dup:

duplica um descritor de arquivo, retornando um novo descritor associado ao mesmo

arquivo.
3.

pipe:

cria no sistema de arquivos um

pipe.

Pipes so arquivos de uso exclusivo por parte

de dois processos: um produtor e um consumidor de dados.


4.

close:

5.

link:

encerra a operao sobre um arquivo aberto.

cria uma conexo simblica para um arquivo j existente.

3.5 O Sistema de Arquivos do UNIX (System V)

65

6.

unlink:

7.

read:

8.

write:

escreve dados num arquivo (de um buer em memria).

9.

lseek:

altera a posio corrente de leitura/gravao no arquivo.

10.

mknod:

cria um aquivo especial (tipo bloco ou caractere), associando-o a perifrico (uni-

remove uma conexo simblica.

l dados de um arquivo (para um buer em memria).

dade de disco, ta, terminal, etc).


11.

mount:

12.

umount:

13.

chdir:

altera o diretrio corrente na rea U.

14.

chown:

altera o usurio que tm a posse do arquivo.

15.

chmod:

altera permisses de um arquivo.

16.

stat:

adiciona uma nova unidade lgica ao sistema de arquivos.


remove uma unidade lgica do sistema de arquivos.

fornece informaes sobre um arquivo (tipicamente as constantes no

arquivo).

inode

do

Você também pode gostar