Buscar

Sistema de arquivos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

T164s Tanenbaum, Andrewa S.
 Sistemas operacionais [recurso eletrônico] : projeto e
 implementação / Andrew S. Tanenbaum, Albert S. Woodhull ;
 tradução João Tortello. – 3. ed. – Dados eletrônicos. – Porto
 Alegre : Bookman, 2008.
 Editado também como livro impresso em 2008.
 ISBN 978-85-7780-285-2
 1. Sistemas operacionais. I. Woodhull, Albert S. II. Título.
 CDU 004.4
Catalogação na publicação: Mônica Ballejo Canto – CRB 10/1023
446 SISTEMAS OPERACIONAIS
Do ponto de vista dos usuários, o aspecto mais importante de um sistema de arquivos 
é como ele aparece para eles; isto é, o que constitui um arquivo, como os arquivos recebem 
seus nomes e como são protegidos, quais operações são permitidas etc. Os detalhes de serem 
utilizadas listas encadeadas ou mapas de bits para monitorar o espaço de armazenamento 
livre e de que existem muitos setores em um bloco lógico têm menos interesse, embora se-
jam de grande importância para os projetistas do sistema de arquivos. Por isso, estruturamos 
este capítulo com várias seções. As duas primeiras são dedicadas à interface do usuário para 
arquivos e diretórios, respectivamente. Em seguida, há uma discussão sobre maneiras alterna-
tivas pelas quais um sistema de arquivos pode ser implementado. Após uma discussão sobre 
segurança e mecanismos de proteção, concluímos com uma descrição do sistema de arquivos 
do MINIX 3.
 5.1 ARQUIVOS
Nas páginas a seguir, veremos os arquivos do ponto de vista do usuário; isto é, como eles são 
usados e quais são suas propriedades.
 5.1.1 Atribuição de nomes de arquivo
Os arquivos são um mecanismo de abstração. Eles proporcionam uma maneira de armazenar 
informações no disco e de lê-las posteriormente. Isso deve ser feito de modo a esconder do 
usuário os detalhes sobre como e onde as informações são armazenadas e como os discos 
realmente funcionam.
Provavelmente, a característica mais importante de qualquer mecanismo de abstração é 
a maneira de atribuir nomes aos objetos que estão sendo gerenciados; portanto, começaremos 
nosso estudo dos sistemas de arquivos com o assunto da atribuição de nomes de arquivo. 
Quando um processo cria um arquivo, é dado um nome a ele. Quando o processo termina, o 
arquivo continua a existir e pode ser acessado por outros processos, usando seu nome.
As regras de atribuição de nomes de arquivo exatas variam de um sistema para outro, 
mas todos os sistemas operacionais atuais permitem strings de uma a oito letras como nomes 
de arquivo válidos. Assim, andrea, bruce e cathy são possíveis nomes de arquivo. Freqüente-
mente, algarismos e caracteres especiais também são permitidos; assim, nomes como 2, ur-
gente! e Fig.2-14 freqüentemente também são válidos. Muitos sistemas de arquivos suportam 
nomes de até 255 caracteres.
Alguns sistemas de arquivos fazem distinção entre letras maiúsculas e minúsculas, en-
quanto outros, não. O UNIX (incluindo todas as suas variantes) entra na primeira categoria; 
o MS-DOS, na segunda. Assim, um sistema UNIX pode ter todos os seguintes nomes como 
três arquivos distintos: maria, Maria e MARIA. No MS-DOS, todos esses nomes referem-se 
ao mesmo arquivo.
O Windows fi ca entre esses extremos. Os sistemas de arquivos do Windows 95 e Win-
dows 98 são baseados no sistema de arquivos do MS-DOS e, assim, herdam muitas de suas 
propriedades, como o modo de construir nomes de arquivo. A cada nova versão foram adicio-
nados aprimoramentos, mas os recursos que discutiremos são comuns no MS-DOS de modo 
geral e nas versões clássicas do Windows. Além disso, o Windows NT, o Windows 2000 e o 
Windows XP suportam o sistema de arquivos do MS-DOS. Entretanto, estes últimos sistemas 
também têm um sistema de arquivos nativo (o NTFS), que tem propriedades diferentes (como 
nomes de arquivo em Unicode). Esse sistema de arquivos também passou por alterações nas 
sucessivas versões. Neste capítulo, vamos nos referir aos sistemas mais antigos como sistema 
de arquivos do Windows 98. Se um recurso não se aplicar às versões do MS-DOS ou do Win-
CAPÍTULO 5 • SISTEMA DE ARQUIVOS 447
dows 95, indicaremos isso. Do mesmo modo, vamos nos referir ao sistema mais recente como 
sistema de arquivos NTFS ou como sistema de arquivos do Windows XP e destacaremos isso, 
caso um aspecto que esteja sendo discutido também não se aplique aos sistemas de arquivos 
do Windows NT ou do Windows 2000. Quando dissermos apenas Windows, isso signifi cará 
todos os sistemas de arquivos do Windows, desde o Windows 95.
Muitos sistemas operacionais suportam nomes de arquivo com duas partes, sendo elas 
separadas por um ponto, como em prog.c. A parte após o ponto é chamada de extensão de 
arquivo e normalmente indica algo a respeito do arquivo (neste exemplo, que se trata de um 
arquivo-fonte da linguagem de programação C. No MS-DOS, por exemplo, os nomes de 
arquivo têm de 1 a 8 caracteres, mais uma extensão opcional de 1 a 3 caracteres. No UNIX, 
o tamanho da extensão, se houver, fi ca por conta do usuário, e um arquivo pode até ter duas 
ou mais extensões, como em prog.c.bz2, onde .bz2 é comumente usado para indicar que o 
arquivo (prog.c) foi compactado usando o algoritmo de compactação bzip2. Algumas das 
extensões de arquivo mais comuns e seus signifi cados aparecem na Figura 5-1.
Extensão Signifi cado
arquivo.bak Arquivo de backup
arquivo.c Programa fonte em C
arquivo.gif Imagem no formato Graphical Interchange Format
arquivo.html Documento em HyperText Markup Language da World Wide Web
arquivo.iso Imagem ISO de um CD-ROM (para gravar no CD)
arquivo.jpg Fotografi a codifi cada com o padrão JPEG
arquivo.mp3 Música codifi cada no formato de áudio MPEG camada 3
arquivo.mpg Filme codifi cado com o padrão MPEG
arquivo.o Arquivo-objeto (saída do compilador ainda não vinculada)
arquivo.pdf Arquivo no formato Portable Document Format
arquivo.ps Arquivo em PostScript
arquivo.tex Entrada para o programa de formatação TEX
arquivo.txt Arquivo de texto geral
arquivo.zip Repositório de arquivos compactado
Figura 5-1 Algumas extensões de arquivo típicas.
Em alguns sistemas (por exemplo, o UNIX), as extensões de arquivo são apenas conven-
ções e não são impostas pelo sistema operacional. Um arquivo chamado arquivo.txt poderia 
ser algum tipo de arquivo de texto, mas esse nome serve mais para lembrar o proprietário do 
que para transmitir qualquer informação para o computador. Por outro lado, um compilador 
C pode fazer questão de que os arquivos a serem compilados terminem com .c e se recusar a 
compilá-los, caso não terminem.
Convenções como essas são particularmente úteis quando o mesmo programa pode ma-
nipular vários tipos diferentes de arquivos. O compilador C, por exemplo, pode receber uma 
lista de arquivos para compilar e ligar, alguns deles sendo arquivos em C (por exemplo, foo.
c), alguns em linguagem assembly (por exemplo, bar.s) e alguns sendo arquivos-objeto (por 
exemplo, other.o). Então, a extensão torna-se fundamental para o compilador identifi car quais 
são os arquivos em C, quais são arquivos em assembly e quais são arquivos-objeto.
448 SISTEMAS OPERACIONAIS
Em contraste, o Windows é muito atento quanto às extensões e atribui signifi cado para 
elas. Os usuários (ou processos) podem registrar extensões no sistema operacional e especi-
fi car qual programa esta associado a cada uma delas. Quando um usuário dá um duplo clique 
em um nome de arquivo, o programa atribuído a sua extensão de arquivo é ativado e recebe o 
nome do arquivo como parâmetro. Por exemplo, dar um duplo clique em arquivo.doc inicia o 
programa Word da Microsoft, com arquivo.doc sendo o arquivo inicial a ser editado.
Pode-se achar estranho a Microsoft ter optado por tornar as extensões comuns invisíveis 
por padrão, devido a sua importância. Felizmente, a maioria das confi gurações “erradas por 
padrão” do Windows pode ser alterada por um usuário sofi sticado que saiba onde procurar.
 5.1.2 Estrutura do arquivo
Os arquivos podem ser estruturados de várias maneiras. Três possibilidades comunsaparecem 
na Figura 5-2. O arquivo da Figura 5-2(a) é apenas uma seqüência não estruturada de bytes. 
Na verdade, o sistema operacional não sabe ou não se preocupa com o que há no arquivo. 
Tudo que ele vê são bytes. Qualquer signifi cado deve ser imposto pelos programas em nível 
de usuário. Tanto o UNIX como o Windows 98 usam essa estratégia.
O fato de o sistema operacional enxergar os arquivos como nada mais do que seqüên-
cias de bytes proporciona o máximo de fl exibilidade. Os programas de usuário podem colocar 
o que quiserem em seus arquivos e chamá-los da maneira que for conveniente. O sistema 
operacional não ajuda, mas também não atrapalha. Para usuários que queiram fazer coisas 
incomuns, este último aspecto pode ser muito importante.
(a) (b) (c)
1 Registro
Formiga Raposa Porco
Gato Vaca Cachorro Bode Leão Coruja Pônei Rato Minhoca
Galinha Íbis Carneiro
1 Byte
Figura 5-2 Três tipos de arquivos. (a) Seqüência de bytes. (b) Seqüência de registros. (c) Árvore.
A primeira etapa na estrutura aparece na Figura 5-2(b). Nesse modelo, um arquivo é 
uma seqüência de registros de tamanho fi xo, cada um com alguma estrutura interna. O mais 
importante na idéia de um arquivo ser uma seqüência de registros é a noção de que a operação 
de leitura retorna apenas um registro e a operação de escrita sobrescreve ou anexa apenas um 
registro. Como um dado histórico, quando o cartão perfurado de 80 colunas reinava, os sis-
temas operacionais (de computadores de grande porte) baseavam seus sistemas de arquivos 
em arquivos compostos de registros de 80 caracteres, na verdade, imagens de cartão. Esses 
sistemas também suportavam arquivos de registros de 132 caracteres, os quais se destinavam 
à impressora de linha (as quais, naquela época, eram impressoras enormes com 132 colunas). 
CAPÍTULO 5 • SISTEMA DE ARQUIVOS 449
Os programas liam a entrada em unidades de 80 caracteres e escreviam em unidades de 132 
caracteres, embora os últimos 52 pudessem ser espaços, naturalmente. Nenhum sistema de 
propósito geral atual funciona assim.
O terceiro tipo de estrutura de arquivo aparece na Figura 5-2(c). Nessa organização, um 
arquivo consiste em uma árvore de registros, não necessariamente todos do mesmo tamanho, 
mas cada um contendo um campo de chave em uma posição fi xa no registro. A árvore é orde-
nada pelo campo de chave, permitindo localizar rapidamente uma chave em particular.
A operação básica aqui não é obter o “próximo” registro, embora isso também seja 
possível, mas obter o registro com uma chave específi ca. Para o arquivo zoo da Figura 5-2(c), 
poderia ser solicitado que o sistema obtivesse o registro cuja chave é pônei, por exemplo, 
sem se preocupar com sua posição exata no arquivo. Além disso, novos registros podem ser 
adicionados no arquivo, com o sistema operacional (e não o usuário) decidindo onde colocá-
los. Esse tipo de arquivo é claramente muito diferente dos fl uxos de bytes não estruturados 
utilizados no UNIX e no Windows 98, mas é amplamente usado nos computadores de grande 
porte ainda utilizados no processamento de dados comerciais.
 5.1.3 Tipos de arquivo
Muitos sistemas operacionais suportam vários tipos de arquivos. O UNIX e o Windows, por 
exemplo, têm arquivos normais e diretórios. O UNIX tem também arquivos especiais de carac-
tere e de bloco. O Windows XP também usa arquivos de metadados, os quais mencionaremos 
posteriormente. Os arquivos normais são aqueles que contêm informações do usuário. Todos 
os arquivos da Figura 5-2 são normais. Os diretórios são arquivos de sistema para manter a 
estrutura do sistema de arquivos. Estudaremos os diretórios a seguir. Os arquivos especiais de 
caractere são relacionados à entrada/saída e usados para modelar dispositivos de E/S seriais, 
como terminais, impressoras e redes. Os arquivos especiais de bloco são usados para modelar 
discos. Neste capítulo, estaremos interessados principalmente nos arquivos normais.
Os arquivos normais geralmente são arquivos ASCII ou arquivos binários. Os arquivos 
ASCII consistem em linhas de texto. Em alguns sistemas, cada linha termina com um caractere 
de carriage return. Em outros, é usado o caractere de avanço de linha (line feed). Alguns siste-
mas usam ambos (por exemplo, o Windows). As linhas não precisam ter todas a mesma largura.
A grande vantagem dos arquivos ASCII é que eles podem ser exibidos e impressos no 
estado em que se encontram e podem ser editados com qualquer editor de textos. Além disso, 
se um grande número de programas utiliza arquivos ASCII para entrada e saída, é fácil conec-
tar a saída de um programa na entrada de outro, como ocorre no caso de pipes em um shell. 
(comunicar processos não é nada fácil, mas interpretar as informações certamente é, caso 
uma convenção padrão, como o ASCII, for usado para expressá-las.)
Outros arquivos são binários, o que signifi ca apenas que não são arquivos ASCII. Impri-
mi-los resulta em uma listagem incompreensível, repleta do que aparentemente é apenas lixo. 
Normalmente, eles têm alguma estrutura interna, conhecida dos programas que os utilizam.
Por exemplo, na Figura 5-3(a), vemos um arquivo binário executável simples, obtido de 
uma versão UNIX mais antiga. Embora, tecnicamente, o arquivo seja apenas uma seqüência 
de bytes, o sistema operacional só executará um arquivo se ele tiver o formato correto. Ele 
tem cinco seções: cabeçalho, texto, dados, bits de realocação e tabela de símbolos. O cabeça-
lho começa com o chamado número mágico, identifi cando o arquivo como executável (para 
impedir a execução acidental de um arquivo que não esteja nesse formato). Em seguida, vêm 
os tamanhos das várias partes do arquivo, o endereço no qual a execução começa e alguns bits 
de fl ag. Após o cabeçalho estão o texto e os dados do programa em si. Eles são carregados 
na memória e os endereços corrigidos usando os bits de realocação. A tabela de símbolos é 
usada para depuração.
450 SISTEMAS OPERACIONAIS
Nosso segundo exemplo de arquivo binário é um repositório de arquivos, também do 
UNIX. Ele consiste em um conjunto de funções de biblioteca (módulos) compiladas, mas não 
ligadas. Cada uma tem como prefácio um cabeçalho indicando seu nome, data da criação, 
proprietário, código de proteção e tamanho. Exatamente como acontece com o arquivo exe-
cutável, os cabeçalhos do módulo estão repletos de números binários. Copiá-los na impresso-
ra produziria simplesmente lixo.
Todo sistema operacional deve reconhecer pelo menos um tipo de arquivo – seu próprio 
arquivo executável –, mas alguns sistemas operacionais reconhecem mais. O antigo sistema 
TOPS-20 (da DECsystem 20) ia a ponto de examinar a hora da criação de qualquer arquivo a 
ser executado. Então, localizava o arquivo-fonte e via se o código-fonte tinha sido modifi cado 
desde a criação do binário. Se tivesse sido, recompilava o código-fonte automaticamente. Em 
termos de UNIX, o programa make foi incorporado ao shell. As extensões de arquivo eram 
obrigatórias, de modo que o sistema operacional podia identifi car qual programa binário era 
derivado de qual código-fonte.
(a) (b)
Cabeçalho
Cabeçalho
Cabeçalho
Número mágico
Tamanho do texto
Tamanho dos dados
Tamanho do BSS
Tamanho da
tabela de símbolos
Ponto de entrada
Flags
Texto
Dados
Bits de
realocação
Tabela de
símbolos
Módulo
objeto
Módulo
objeto
Módulo
objeto
Nome do
módulo
Data
Proprietário
Proteção
Tamanho
C
ab
eç
al
ho
Figura 5-3 (a) Um arquivo executável. (b) Um repositório de arquivos.
Ter arquivos fortemente tipados como esse causa problemas quando o usuário faz algo 
que os projetistas do sistema não esperavam. Considere, como exemplo, um sistema no qual 
os arquivos de saída do programa têm extensão .dat (arquivos de dados). Se um usuário 
CAPÍTULO 5 • SISTEMA DE ARQUIVOS 451
escrever um formatador de programa que leia um arquivo .c (programa em C), o transforme 
(por exemplo, convertendo-o para um layout de alinhamento padrão) e depois escreva o 
arquivo transformado como saída,o arquivo de saída será de tipo .dat. Se o usuário tentar 
compilá-lo, o sistema se recusará, pois ele tem a extensão errada. As tentativas de copiar 
arquivo.dat em arquivo.c serão rejeitadas pelo sistema como inválidas (para proteger o 
usuário contra erros).
Embora esse tipo de “camaradagem com o usuário” possa ajudar os iniciantes, deixa 
os usuários experientes desesperados, pois precisam dedicar um esforço considerável para 
contornar a idéia que o sistema operacional tem sobre o que é razoável e o que não é.
 5.1.4 Acesso a arquivo
Os sistemas operacionais antigos forneciam apenas um tipo de acesso a arquivo: o acesso se-
qüencial. Nesses sistemas, um processo podia ler todos os bytes ou registros em um arquivo 
na ordem, começando no princípio, mas não podia pular e lê-los fora de ordem. Entretanto, 
era possível voltar ao início do arquivo, de modo que eles podiam ser lidos quantas vezes 
fossem necessárias. Os arquivos seqüenciais eram convenientes quando o meio de armazena-
mento era uma fi ta magnética, em vez de disco.
Quando os discos começaram a ser usados para armazenar arquivos, tornou-se possível 
ler os bytes ou registros de um arquivo fora de ordem ou acessar registros pela chave, em vez 
de ler pela posição. Os arquivos cujos bytes ou registros podem ser lidos em qualquer ordem 
são chamados de arquivos de acesso aleatório. Eles são exigidos por muitos aplicativos.
Os arquivos de acesso aleatório são fundamentais para muitos aplicativos, como por 
exemplo, os sistemas de banco de dados. Se um cliente de uma companhia aérea telefonar e 
quiser reservar um assento em determinado vôo, o programa de reservas deve ser capaz de 
acessar o registro desse vôo sem ter de ler primeiro os registros de milhares de outros vôos.
Dois métodos são usados para especifi car onde a leitura vai começar. No primeiro, cada 
operação read fornece a posição no arquivo na qual a leitura deve começar. No segundo, uma 
operação especial, seek, é fornecida para estabelecer a posição corrente. Após uma operação 
seek, o arquivo pode ser lido seqüencialmente a partir da posição corrente atual.
Em alguns sistemas operacionais de computadores de grande porte mais antigos, os 
arquivos são classifi cados como sendo de acesso seqüencial ou aleatório no momento em que 
são criados. Isso possibilita que o sistema utilize diferentes técnicas de armazenamento para 
as duas classes. Os sistemas operacionais modernos não fazem essa distinção. Todos os seus 
arquivos são automaticamente de acesso aleatório.
 5.1.5 Atributos de arquivo
Todo arquivo tem um nome e dados. Além disso, todos os sistemas operacionais associam 
outras informações a cada arquivo, por exemplo, a data e hora em que o arquivo foi criado 
e o tamanho do arquivo. Chamaremos esses itens extras de atributos do arquivo, embora 
algumas pessoas os chamem de metadados. A lista de atributos varia consideravelmente de 
um sistema para outro. A tabela da Figura 5-4 mostra algumas das possibilidades, mas tam-
bém existem outras. Nenhum sistema tem todas elas, mas cada uma está presente em algum 
sistema.
Os quatro primeiros atributos se relacionam com a proteção do arquivo e informam 
quem pode acessá-lo e quem não pode. Todos os tipos de esquemas são possíveis, alguns dos 
quais estudaremos posteriormente. Em alguns sistemas, o usuário precisa apresentar uma 
senha para acessar um arquivo, no caso em que a senha deve ser um dos atributos.
452 SISTEMAS OPERACIONAIS
Atributo Signifi cado
Proteção Quem pode acessar o arquivo e de que maneira
Senha A senha necessária para acessar o arquivo
Criador ID da pessoa que criou o arquivo
Proprietário Proprietário atual
Flag de leitura somente 0 para leitura/escrita; 1 para leitura somente
Flag de oculto 0 para normal; 1 para não exibir em listagens
Flag de sistema 0 para arquivos normais; 1 para arquivo de sistema
Flag de arquivamento 0 para salvo em backup; 1 para ser salvo em backup
Flag de ASCII/binário 0 para arquivo ASCII; 1 para arquivo binário
Flag de acesso aleatório 0 para acesso seqüencial somente; 1 para acesso aleatório
Flag de temporário 0 para normal; 1 para excluir arquivo na saída do processo
Flags de travamento 0 para destravado; diferente de zero para travado
Tamanho do registro Número de bytes em um registro
Posição da chave Deslocamento da chave dentro de cada registro
Tamanhos da chave Número de bytes no campo de chave
Tempo da criação Data e hora em que o arquivo foi criado
Tempo do último acesso Data e hora em que o arquivo foi acessado pela última vez
Tempo da última alteração Data e hora em que o arquivo foi alterado pela última vez
Tamanho corrente Número de bytes no arquivo
Tamanho máximo Número de bytes até o qual o arquivo pode crescer
Figura 5-4 Alguns atributos de arquivo possíveis.
Os fl ags são bits, ou campos simples, que controlam ou ativam alguma propriedade 
específi ca. Os arquivos ocultos, por exemplo, não aparecem nas listagens dos arquivos. O 
fl ag de arquivamento é um bit que monitora se foi feito o backup do arquivo. O programa de 
backup desativa o bit e o sistema operacional o ativa quando um arquivo é alterado. Desse 
modo, o programa de backup pode identifi car quais arquivos precisam de backup. O fl ag de 
temporário permite que um arquivo seja marcado para exclusão automática, quando o proces-
so que o criou terminar.
Os campos de tamanho do registro, posição da chave e tamanho da chave só estão pre-
sentes em arquivos cujos registros podem ser pesquisados usando uma chave. Eles fornecem 
as informações exigidas para encontrar as chaves.
Os vários tempos monitoram quando o arquivo foi criado, acessado mais recentemente 
e o modifi cado. Eles são úteis para uma variedade de propósitos. Por exemplo, um arquivo-
fonte que foi modifi cado após a criação do arquivo-objeto correspondente precisa ser recom-
pilado. Esses campos fornecem as informações necessárias.
O tamanho corrente informa o tamanho atual do arquivo. Alguns sistemas operacionais 
de computadores de grande porte antigos exigem que o tamanho máximo seja especifi cado 
quando o arquivo é criado, para permitir que o sistema operacional reserve a máxima quanti-
dade de armazenamento antecipadamente. Os sistemas operacionais modernos são inteligen-
tes o sufi ciente para prescindirem desse recurso.
CAPÍTULO 5 • SISTEMA DE ARQUIVOS 453
 5.1.6 Operações sobre arquivos
Os arquivos existem para armazenar informações e permitir que elas sejam recuperadas pos-
teriormente. Diferentes sistemas fornecem diferentes operações para permitir o armazena-
mento e a recuperação. A seguir está uma discussão sobre as chamadas de sistema mais co-
muns relacionadas aos arquivos.
 1. Create. O arquivo é criado sem dados. O objetivo da chamada é anunciar que o 
arquivo está sendo criado e confi gurar alguns atributos.
 2. Delete. Quando o arquivo não é mais necessário, precisa ser excluído para liberar 
espaço em disco. Sempre é fornecida uma chamada de sistema para esse propósito.
 3. Open. Antes de usar um arquivo, um processo precisa abri-lo. O objetivo da cha-
mada de open é permitir que o sistema busque os atributos e a lista de endereços de 
disco na memória principal, para acesso rápido nas chamadas posteriores.
 4. Close. Quando todos os acessos tiverem terminado, os atributos e os endereços de 
disco não serão mais necessários; portanto, o arquivo deve ser fechado para liberar 
espaço em tabelas internas do sistema operacional. Muitos sistemas estimulam 
isso, impondo um número máximo de arquivos abertos nos processos. Um disco é 
escrito em blocos e o fechamento de um arquivo obriga a escrita do último bloco 
do arquivo, mesmo que esse bloco possa ainda não estar totalmente cheio.
 5. Read. Os dados são lidos do arquivo. Normalmente, os bytes são provenientes da 
posição corrente. O processo que fez a chamada deve especifi car quantos dados 
são necessários e também fornecer um buffer para colocá-los.
 6. Write. Os dados são escritos no arquivo, em geral, novamente, na posiçãocorren-
te. Se a posição corrente for o fi nal do arquivo, o tamanho do arquivo aumentará. 
Se a posição corrente for no meio do arquivo, os dados existentes serão sobrescri-
tos e perdidos para sempre.
 7. Append. Esta chamada é uma forma restrita de write. Ela só pode adicionar dados 
no fi nal do arquivo. Os sistemas que fornecem um conjunto mínimo de chamadas 
de sistema geralmente não têm a operação append, mas muitos sistemas fornecem 
várias maneiras de fazer a mesma coisa e, às vezes, esses sistemas têm a operação 
append.
 8. Seek. Para arquivos de acesso aleatório, é necessário um método para especifi -
car de onde os dados serão extraídos. Uma estratégia comum é uma chamada de 
sistema, seek, que reposiciona o ponteiro de arquivo para um local específi co no 
arquivo. Depois que essa chamada termina, os dados podem ser lidos ou escritos 
nessa posição.
 9. Get attributes. Freqüentemente, os processos precisam ler atributos de arquivo 
para fazer seu trabalho. Por exemplo, o programa make do UNIX é usado normal-
mente para gerenciar projetos de desenvolvimento de software compostos de mui-
tos arquivos-fonte. Quando o programa make é chamado, ele examina os tempos 
de modifi cação de todos os arquivos-fonte e arquivos-objeto, e faz as compilações 
necessárias para que tudo esteja atualizado. Para realizar seu trabalho, make preci-
sa ler os atributos, a saber, os tempos de modifi cação.
 10. Set attributes. Alguns atributos são confi gurados pelo usuário e podem ser altera-
dos depois que o arquivo foi criado. Esta chamada de sistema torna isso possível. 
As informações de modo de proteção são um exemplo óbvio. A maioria dos fl ags 
também entra nesta categoria.
454 SISTEMAS OPERACIONAIS
 11. Rename. Freqüentemente acontece de um usuário precisar alterar o nome de um 
arquivo já existente. Esta chamada de sistema torna isso possível. Ela nem sempre 
é rigorosamente necessária, pois o arquivo normalmente pode ser copiado em um 
novo arquivo com o novo nome e, então, o arquivo antigo pode ser excluído.
 12. Lock. Travar um arquivo ou uma parte de um arquivo impede a existência de vá-
rios acessos simultâneos por diferentes processos. Para um sistema de reservas 
de passagens aéreas, por exemplo, travar o banco de dados enquanto se faz uma 
reserva evita a marcação de um assento para dois passageiros diferentes.
 5.2 DIRETÓRIOS
Para monitorar os arquivos, os sistemas de arquivos normalmente têm diretórios ou pastas, 
os quais, em muitos sistemas, também são arquivos. Nesta seção, discutiremos os diretórios, 
sua organização, suas propriedades e as operações que podem ser efetuadas neles.
 5.2.1 Diretórios simples
Normalmente, um diretório contém várias entradas, uma por arquivo. Uma possibilidade apa-
rece na Figura 5-5(a), na qual cada entrada contém o nome do arquivo, os atributos do arquivo 
e os endereços de disco onde os dados estão armazenados. Outra possibilidade aparece na 
Figura 5-5(b). Aqui, uma entrada de diretório contém o nome do arquivo e um ponteiro para 
outra estrutura de dados onde são encontrados os atributos e os endereços de disco. Esses dois 
sistemas são comumente usados.
Quando um arquivo é aberto, o sistema operacional pesquisa seu diretório até encontrar 
o nome do arquivo a ser aberto. Então, ele extrai os atributos e endereços de disco, ou direta-
mente a partir da entrada de diretório ou da estrutura de dados apontada, e os coloca em uma 
tabela na memória principal. Todas as referências subseqüentes ao arquivo usam as informa-
ções que estão na memória principal.
O número de diretórios varia de um sistema para outro. A forma mais simples de siste-
ma de diretório é um único diretório contendo todos os arquivos de todos os usuários, como 
ilustrado na Figura 5-6(a). Nos primeiros computadores pessoais, esse sistema de diretório 
único era comum, em parte porque havia apenas um usuário.
(a)
jogos
correio
notícias
trabalho
atributos
atributos
atributos
atributos
Estrutura de
dados contendo
os atributos
(b)
jogos
correio
notícias
trabalho
Figura 5-5 (a) Atributos na própria entrada de diretório. (b) Atributos em outro lugar.
O problema de ter apenas um diretório em um sistema com vários usuários é que dife-
rentes usuários podem, acidentalmente, usar os mesmos nomes para seus arquivos. Por exem-
plo, se o usuário A cria um arquivo chamado mailbox e, posteriormente, o usuário B também 
CAPÍTULO 5 • SISTEMA DE ARQUIVOS 455
cria um arquivo chamado mailbox, o arquivo de B sobrescreverá o arquivo de A. Conseqüen-
temente, esse esquema não é mais usado em sistemas multiusuário, mas poderia ser usado em 
um pequeno sistema embarcado, por exemplo, um assistente digital pessoal portátil (PDA) 
ou um telefone celular.
Para evitar os confl itos causados pelo fato de diferentes usuários escolherem o mesmo 
nome de arquivo para seus próprios arquivos, o próximo passo é fornecer a cada usuário 
um diretório privado. Desse modo, os nomes escolhidos por um usuário não interferem 
nos nomes escolhidos por outro, e não há nenhum problema causado pelo fato de o mesmo 
nome ocorrer em dois ou mais diretórios. Esse projeto leva ao sistema da Figura 5-6(b). 
Ele poderia ser usado, por exemplo, em um computador multiusuário ou em uma rede de 
computadores pessoais simples que compartilhasse um servidor de arquivos comum em uma 
rede local.
Implícito nesse projeto está o fato de que, quando um usuário tenta abrir um arquivo, 
o sistema operacional sabe quem é ele, para saber qual diretório deve pesquisar. Como con-
seqüência, é necessário algum tipo de procedimento de login, no qual o usuário especifi que 
um nome de login ou uma identifi cação, algo não exigido em um sistema de diretório de um 
único nível.
Quando esse sistema é implementado em sua forma mais básica, os usuários só podem 
acessar arquivos em seus próprios diretórios.
 5.2.2 Sistemas de diretório hierárquicos
A hierarquia de dois níveis elimina os confl itos de nome de arquivo entre os usuários. Mas 
outro problema é que os usuários com muitos arquivos talvez queiram agrupá-los em sub-
grupos menores; por exemplo, um professor talvez queira separar anotações para uma aula a 
partir de rascunhos de capítulos de um novo livro-texto. O que é necessário é uma hierarquia 
geral (isto é, uma árvore de diretórios). Com essa estratégia, cada usuário pode ter quantos 
diretórios forem necessários para que os arquivos possam ser agrupados naturalmente. Essa 
estratégia aparece na Figura 5-6(c). Aqui, os diretórios A, B e C contidos no diretório-raiz 
pertencem cada um a um usuário diferente, dois dos quais criaram subdiretórios para projetos 
em que estão trabalhando.
(a) (b) (c)
Diretório Arquivo
Arquivos
Diretório-raiz
Diretório de
usuário
Subdiretórios de usuário
C C
C
C C
C
B
B
A
A
B
B
C C
C
BA A
A B
B
C
CC C
A A B C
Diretório-raiz Diretório-raiz
Figura 5-6 Três projetos de sistema de arquivos. (a) Diretório único compartilhado por todos os usuá-
rios. (b) Um diretório por usuário. (c) Árvore arbitrária por usuário. As letras indicam o proprietário do 
diretório ou arquivo.
456 SISTEMAS OPERACIONAIS
A capacidade de criar um número arbitrário de subdiretórios fornece uma ferramenta 
de estruturação poderosa para os usuários organizarem seu trabalho. Por isso, praticamente 
todos os sistemas de arquivos de PCs e servidores modernos são organizados dessa maneira.
Entretanto, conforme mencionamos antes, a história freqüentemente se repete com no-
vas tecnologias. As câmaras digitais precisam registrar suas imagens em algum lugar, nor-
malmente em uma memória fl ash. As primeiras câmaras digitais tinham um único diretório e 
chamavam os arquivos de DSC0001.JPG, DSC0002.JPG etc. Entretanto, não demorou muito 
para os fabricantes de câmaras construírem sistemas de arquivos com vários diretórios, como 
se vê na Figura 5-6(b). Que diferença faz se nenhum dos proprietários de câmara sabe usar 
vários diretórios e, provavelmente, não poderiam imaginar qualquer usopara esse recurso, 
mesmo que soubessem? Afi nal, isso é apenas software (incorporado) e, assim, não custa qua-
se nada para o fabricante fornecer. Será que vai demorar muito para surgirem câmaras digitais 
com sistemas de arquivos hierárquicos completos, múltiplos logins e nomes de arquivo de 
255 caracteres?
 5.2.3 Nomes de caminho
Quando o sistema de arquivos é organizado como uma árvore de diretórios, é necessário al-
guma maneira de especifi car os nomes de arquivo. Dois métodos diferentes são comumente 
usados. No primeiro método, cada arquivo recebe um nome de caminho absoluto (absolute 
path name), consistindo no caminho do diretório-raiz até o arquivo. Como exemplo, o cami-
nho /usr/ast/mailbox signifi ca que o diretório-raiz contém um subdiretório usr/ que, por sua 
vez, contém um subdiretório ast/, o qual contém o arquivo mailbox. Os nomes de caminho 
absolutos sempre começam no diretório-raiz e são exclusivos. No UNIX, os componentes do 
caminho são separados por /. No Windows, o separador é \. Assim, nesses dois sistemas, o 
mesmo nome de caminho seria escrito como segue:
Windows \usr\ast\mailbox
UNIX /usr/ast/mailbox
Independente do caractere usado, se o primeiro caractere do nome de caminho é o separador, 
então o caminho é absoluto.
O outro tipo de nome é o nome de caminho relativo (relative path name). Ele é usado 
em conjunto com o conceito de diretório de trabalho (working directory), também chamado 
de diretório corrente (current directory). Um usuário pode designar um diretório como dire-
tório de trabalho corrente, no caso em que todos os nomes de caminho que não começam no 
diretório-raiz são considerados relativos ao diretório de trabalho. Por exemplo, se o diretório 
de trabalho corrente é /usr/ast, então o arquivo cujo caminho absoluto é /usr/ast/mailbox 
pode ser referenciado simplesmente como mailbox. Em outras palavras, o comando UNIX
cp /usr/ast/mailbox /usr/ast/mailbox.bak
e o comando
cp mailbox mailbox.bak
fazem exatamente a mesma coisa, se o diretório de trabalho é /usr/ast/. Freqüentemente, a 
forma relativa é mais conveniente, mas faz a mesma coisa que a forma absoluta.
Alguns programas precisam acessar um arquivo específi co sem considerar qual é o 
diretório de trabalho. Nesse caso, eles sempre devem usar nomes de caminho absolutos. Por 
exemplo, um corretor ortográfi co talvez precise ler /usr/lib/dictionary para fazer seu trabalho. 
Nesse caso, ele deve usar o nome de caminho absoluto completo, pois não sabe qual será o 
CAPÍTULO 5 • SISTEMA DE ARQUIVOS 457
diretório de trabalho quando for chamado. O nome de caminho absoluto sempre funciona, 
independente de qual seja o diretório de trabalho.
É claro que, se o corretor ortográfi co precisar de um grande número de arquivos de 
/usr/lib/, uma estratégia alternativa será executar uma chamada de sistema para mudar seu 
diretório de trabalho para /usr/lib/ e, então, usar apenas dictionary como primeiro parâmetro 
de open. Mudando o diretório de trabalho explicitamente, ele sabe com certeza onde está na 
árvore de diretórios, de modo que, então, pode usar caminhos relativos.
Cada processo tem seu próprio diretório de trabalho; portanto, quando um processo 
muda seu diretório de trabalho e depois sai, nenhum outro processo é afetado e não resta 
nenhum vestígio da mudança no sistema de arquivos. Dessa maneira, é sempre perfeitamente 
seguro um processo alterar seu diretório de trabalho quando for conveniente. Por outro lado, 
se uma função de biblioteca mudar o diretório de trabalho e não voltar para onde estava ao 
terminar, o restante do programa poderá não funcionar, porque sua suposição sobre onde está 
pode agora ser repentinamente inválida. Por isso, as funções de biblioteca raramente mudam 
o diretório de trabalho e quando precisam fazer isso, elas sempre voltam ao inicial, antes de 
retornar.
A maioria dos sistemas operacionais que suportam um sistema de diretório hierárqui-
co tem duas entradas especiais em cada diretório, “.” e “..”, geralmente pronunciadas como 
“ponto” e “ponto-ponto”. O ponto refere-se ao diretório corrente; ponto-ponto refere-se ao 
seu pai. Para ver como eles são usados, considere a árvore de arquivos UNIX da Figura 5-7. 
Certo processo tem /usr/ast/ como diretório de trabalho. Ele pode usar.. para subir na árvore. 
Diretório-raiz
bin etc lib usr
ast
jim
tmp
jim
bin
etc
lib
usr
tmp
/
ast
/usr/jim
lib
lib
dict.
Figura 5-7 Uma árvore de diretórios UNIX.
458 SISTEMAS OPERACIONAIS
Por exemplo, ele pode copiar o arquivo /usr/lib/dictionary em seu próprio diretório, usando 
o comando
cp ../lib/dictionary .
O primeiro caminho instrui o sistema a ir para cima (para o diretório usr) e, depois, para ir 
para baixo até o diretório lib/, para encontrar o arquivo dictionary.
O segundo argumento (o ponto) fornece o nome do diretório corrente. Quando o co-
mando cp recebe um nome de diretório (incluindo o ponto) como último argumento, ele copia 
todos os arquivos lá. É claro que uma maneira mais normal de fazer a cópia seria digitar
cp /usr/lib/dictionary .
Aqui, o uso do ponto evita que o usuário digite dictionary uma segunda vez. Contudo, digitar
cp /usr/lib/dictionary dictionary
também funciona bem, assim como
cp /usr/lib/dictionary /usr/ast/dictionary
Todos esses comandos fazem exatamente a mesma coisa.
 5.2.4 Operações sobre diretórios
As chamadas de sistema para gerenciamento de diretórios apresentam mais variações de um 
sistema para outro do que as chamadas de sistema para arquivos. Para dar uma idéia do que 
são e de como funcionam, daremos um exemplo (tirado do UNIX).
 1. Create. Um diretório é criado. Ele está vazio, exceto pelo ponto e pelo ponto-pon-
to, que são colocados lá automaticamente pelo sistema (ou, em alguns casos, pelo 
programa mkdir).
 2. Delete. Um diretório é excluído. Somente um diretório vazio pode ser excluído. 
Um diretório contendo apenas ponto e ponto-ponto é considerado vazio, pois eles 
normalmente não podem ser excluídos.
 3. Opendir. Os diretórios podem ser lidos. Por exemplo, para listar todos os arquivos 
em um diretório, um programa de listagem abre o diretório para ler os nomes de 
todos os arquivos que ele contém. Antes que um diretório possa ser lido, ele deve 
ser aberto, o que é análogo a abrir e ler um arquivo.
 4. Closedir. Quando um diretório foi lido, ele deve ser fechado para liberar espaço 
em tabelas internas do sistema operacional.
 5. Readdir. Esta chamada retorna a próxima entrada em um diretório aberto. Antiga-
mente, era possível ler diretórios usando a chamada de sistema read normal, mas 
essa estratégia tem a desvantagem de obrigar o programador a conhecer e a lidar 
com a estrutura interna dos diretórios. Em contraste, readdir sempre retorna uma 
entrada em um formato padrão, independente de qual das possíveis estruturas de 
diretório esteja sendo usada.
 6. Rename. Sob muitos aspectos, os diretórios são exatamente como os arquivos e 
podem ser renomeados da mesma maneira que os arquivos.
 7. Link. A vinculação, ou atalhos, é uma técnica que permite a um arquivo aparecer 
em mais de um diretório. Esta chamada de sistema especifi ca um arquivo existente

Continue navegando