Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Fundamentos Bsicos
A maior parte dos sistemas operacionais trazem a seguinte proposta para armazenamento
de informao: permitir aos usurios denir objetos chamados
arquivos,
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.
qualquer dispositivo de armazenamento, permitindo que qualquer arquivo seja acessado pelo
seu nome
(path name),
usurio deve especicar em qual dispositivo cada arquivo se encontra (exceto quando um dispositivo
default
drive
de entrada e sada no drive
um programa localizado no
drive
A com arquivos
default
for o
C, para executar
B, cada um deles
45
O UNIX,
por exemplo, mantm arquivos regulares, diretrios e arquivos especiais. Arquivos regulares
contm dados e programas do usurio.
nomes simblicos (i.e.
especicar perifricos tais como terminais, impressoras, unidades de ta, etc. Assim podemos
digitar
cp abc /dev/tty
para copiar um arquivo
abc
/dev/tty).
pelo
linker
Diretrios
Para organizar os arquivos, o sistema de arquivos prov
casos so tambm arquivos.
por arquivo.
diretrios,
os quais em muitos
/usr/mfm/mailbox
contm o subdiretrio mfm,
mailbox.
usr,
o qual
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.
/usr/mfm/mailbox
/usr/mfm,
ento o
(ponto).
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
bytes:
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
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
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.
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.
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
(File
O registro no diretrio
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.
indiretos. Para arquivos com 10 blocos ou menos, todos os endereos dos blocos de dados no
disco so mantidos no prprio
inode,
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
inode
simples pode acessar 256 endereos de disco. Esse esquema suciente para arquivos de at
266 blocos (10 no
inode,
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
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
50
usurio
informa a quem
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).
inode.
Todas
as informaes sobre tipo, tamanho, marcas de tempo, propriedade, e blocos do disco esto
contidas no
inode
1
usurio
nome do arquivo
tipo
(extenso)
16
contador
de bloco
tamanho
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
51
para todo sistema hierrquico de diretrios. Primeiro, o sistema de arquivo localiza o diretrio
raiz. No UNIX, o
inode
usr,
/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
/usr/mfm/mailbox
. 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
src.
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
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.
52
diretrio raiz
subdiretrio
diretrio de usurio
C
arquivo compartilhado
inode ).
conexo simblica.
inode
criao de uma conexo no muda o proprietrio do arquivo (ver gura 3.8), mas incrementa
um contador no
inode
inode
invlido. Se o
inode
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,
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.
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
inode
inode.
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
Num
inode
backups.
(bad blocks),
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
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.
incorpora na lista de blocos livres, eliminando assim sua ocorrncia futura em arquivos de
dados.
54
Backups
Mesmo com uma estratgia engenhosa para tratar os blocos defeituosos, importante se
proceder
backups
frequentes.
que diminui pela metade a capacidade de armazenamento, prover cada computador com um
segundo disco de igual capacidade.
e
backup.
backup
do outro disco, e vice-versa. Deste modo, se um disco for completamente destrudo, nenhuma
informao perdida.
Uma outra alternativa o
backup
ta todos os arquivos a cada semana ou ms, e, diariamente, apenas daqueles arquivos que
foram modicados deste o ltimo
backup
backup.
mtodo, o horrio da ltima duplicao para cada arquivo deve ser mantida no disco.
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,
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
inodes.
Comeando de um
inode,
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
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).
A vericao comea no
inode.
Quando toda a rvore de diretrios percorrida, tem-se uma lista, indexada pelo nmero do
inode,
inodes.
inode.
inode
pode
inode
todos os arquivos forem removidos dos diretrios, o contador ainda ser diferente de 0 e o
no ser liberado.
inode
inode
mais em uso, cujos blocos podem rapidamente ser atribuidos a outros arquivos. Novamente, a
soluo forar o contador do
inode para
utilitrio).
Estas duas operaes, vericar blocos e vericar diretrios, so frequentemente integradas
por razes de ecincia (i.e., uma nica passagem sobre os
inodes
inodes
inode
inodes
no
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
56
cache,
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,
cache
cache.
removido e reescrito no disco, caso tenha sido modicado desde o instante em que foi instalado
na
cache.
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
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-
cache
update, ativado.
De
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.
inuenciada pela garantia que a remoo de um disco exvel de sua unidade no causa perda
de dados. No UNIX, necessria uma chamada
sync
Cache
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
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-
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,
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
inode
inodes
inode
inodes,
inode
inodes
disponveis.
software
cache de buers.
pool
cache
em
hardware
cache de buers
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
58
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 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;
nmero do dispositivo
nmero do bloco
status
rea de dados
(tamanho do bloco)
cache de buers
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.
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.
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.
59
Quando o ncleo necessita acessar um bloco do disco, ele procura um buer que possua
a combinao adequada
hash,
la. Um buer pode encontrar-se, simultaneamente, na lista de buers livres, caso o seu estado
seja livre, e na la
hash
hash
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
28
17
97
98
50
64
14
38
cabea
f(b) = b mod 4
cauda
cache de buers :
la de
hash
cache de buers
sistema de arquivos.
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
(getblk)
getblk:
hash
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
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).
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,
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
1.
brelse:
2.
bread:
3.
breada:
4.
bwrite:
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.
discutidos anteriormente.
identicado, possivelmente atravs da sua leitura
iput:
libera o
bmap:
inode ;
namei:
alloc:
inode
correspondente;
61
ialloc:
ifree:
inodes
aloca
libera
para os arquivos;
inodes.
Estrutura do Inode
Um
inode
inode
permisso de acesso;
inode ;
(links)
nmero de conexes
tamanho do arquivo.
A cpia do
inode
associados ao arquivo;
inode
em disco:
status do
- o
inode
inode
na memria indicando:
est trancado;
inode ;
inode
inode
seja liberado;
mount point.
o nmero do
inode.
inode
inodes
so
inodes
inodes
hash e em
so ligados no cache de buers ;
inodes
em las
de buers
inode
inode,
inode
62
cache
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 ).
de inodes
(exatamente como o
A lista de
inodes
cache
inode
cache de buers.
inode
ao nmero do
procurado, um
consequentemente trancado
de ler o
inode
(locked).
inode
inode
na la
hash
no
oset
inode
do
no
do bloco: ((
da lista de
oset :
do
inodes
inode -1)
inodes
/ nmero de
((
inode
(algoritmo
inode
referenciado e para
iput)
inode
inode
no disco
inode
livres sendo
inodes
inode
colocado na lista de
inodes
livres na
inode
12
11
13
inode )
e continua at o
inode
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
63
Deve ser observado que nenhum espao em disco desperdiado para estes blocos.
layout
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
inode
inode,
inode
inode
inodes
super-bloco.
O Super-Bloco
O super-bloco um segmento contnuo de disco formado pelos seguintes campos:
tamanho da lista de
nmero de
lista de
ndice do prximo
inode
campos trancados
(locked)
ag
inodes
inodes
inodes ;
inodes ;
inodes
livres;
64
ialloc
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
inodes
inodes livres do
inodes livres no pool
no qual so armazenados os
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
arquivo e que podero ser associados aos arquivos que sero criados no sistema.
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
descritor de arquivos
ialloc,
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:
dup:
arquivo.
3.
pipe:
pipe.
close:
5.
link:
65
6.
unlink:
7.
read:
8.
write:
9.
lseek:
10.
mknod:
mount:
12.
umount:
13.
chdir:
14.
chown:
15.
chmod:
16.
stat:
arquivo).
inode
do