Você está na página 1de 39

sistema operacional?

Um sistema operacional um componente importante de praticamente todo sistema de computao. Um sistema de computao pode ser dividido em basicamente quatro componentes: o hardware, o sistema operacional, os programas aplicativos e os usurios (Figura 1.1).
O hardware - a unidade central de processamento (CPU, central processing Uttit), a memria e os dispositivos de entrada/sada (I/O, Input/Output) - fornece os recursos bsicos de computao. Os programas aplicativos - processadores de texto, planilhas eletrnicas, compiladores c navegadores Web - definem as maneiras em que esses recursos so usados para resolver os problemas de computao dos usurios. Pode haver muitos usurios diferentes (pessoas, mquinas, outros computadores) tentando resolver problemas diferentes. Da mesma forma, pode haver muitos programas aplicativos diferentes. O sistema operacional controla e coordena o uso do hardware entre os vrios programas aplicativos para os vrios usurios. Um sistema operacional semelhante a um governo. Os componentes de um sistema de computao so seu hardware, software e dados. O sistema operacional fornece o meio para o uso adequado desses recursos na operao do sistema de computador. Como um governo, o sistema operacional no executa nenhuma funo til por si mesma. Simplesmente fornece um ambiente no qual outros programas podem realizar tarefas teis. Podemos considerar um sistema operacional como um alocador de recursos. Um sistema de computao possu muitos recursos (hardware e software) que podem ser necessrios para resolver um problema: tempo de CPU, espao na memria, espao de armazenamento de arquivos, dispositivos de entrada/sada (l/O), entre outros. O sistema operacional atua como gerente desses recursos e os aloca a programas e usurios especficos, conforme necessrio, para a execuo das tarefas. Como pode haver muitos pedidos de recursos, possivelmente conflitantes entre si, o sistema operacional deve decidir em que pedidos sero alceados recursos para que ele possa operar o sistema de computao de forma eficiente c justa. Uma viso ligeiramente diferente de um sistema operacional enfatiza a necessidade de controlar os vrios dispositivos de 1/0 e programas de usurio. Um sistema operacional um programa de controle. Um programa de controle controla a execuo dos programas de usurio para evitar erros e o uso indevido do computador. Preocupa-se especialmente com a operao e o controle de dispositivos de l/O. Em geral, no entanto, no existe uma definio completamente adequada de um sistema operacional. Os sistemas operacionais existem porque so uma forma razovel de resolver o problema de criar um sistema de computao que possa ser usado. O objetivo primordial dos sistemas de computao executar programas de usurio e tornar fcil a resoluo dos problemas de usurio. Para atingir essa meta, 0 hardware construdo. Como o hardware por si s no particularmente fcil de usar, programas aplicativos so desenvolvidos. Esses vrios programas exigem certas operaes comuns, como aquelas que controlam os dispositivos de I/O. As funes comuns de controle e alocao de recursos so ento reunidas em um nico software: o sistema operacional. No existe uma definio universalmente aceita do que faz e do que no faz parte do sistema operacional. Um ponto de vista simples que tudo o que o fornecedor entrega quando voc solicita"o sistema operacional" deve ser considerado. Os requisitos de memria c os recursos includos, no entanto, variam muito de sistema para sistema. Alguns usam menos de 1 megabyte de espao e no tm nem um editor de tela inteira, enquanto outros exigem centenas de megabytes de espao e baseiam-se inteiramente em sistemas grficos de janelas. Uma definio mais comum que o sistema operacional um programa que est sempre executando no computador (geralmente chamado ncleo ou kernel), todo o resto consistindo em programas aplicativos. Normalmente, adotamos essa ltima definio. A questo em torno do que constitui um sistema operacional est se tornando importante. Em 1998, o Departamento de justia norte-americano entrou com um processo contra a Microsoft basicamente alegando que a empresa inclua um nmero excessivo de funcionalidades em seus sistemas operacionais, impedindo, assim, qualquer concorrncia por parte de outros fabricantes. E mais fcil definir um sistema operacional pelo que ele faz do que pelo q u e d e i . O principal objetivo de

um sistema operacional a convenincia do usurio. Os sistemas operacionais existem porque tm como misso tornar a tarefa computacional mais fcil. Essa viso fica particularmente ntida quando analisamos sistemas operacionais para computadores pessoais de pequeno porte (PCs). Uma meta secundria a operao eficiente do sistema de computao. Essa meta particularmente importante para sistemas multiusurio compartilhados e de grande porte. Esses sistemas so geralmente caros, por isso devem ser o mais eficientes possvel. Essas duas metas - convenincia e eficincia - s vezes so contraditrias. No passado, a eficincia era frequentemente mais importante que a convenincia. Assim, boa parte da teoria dos sistemas operacionais concentra-se no uso otimizado dos recursos computacionais.

SISTEMAS DE ARQUIVOS
Para a maior parte dos usurios, o sistema de arquivos o aspecto mais visvel de um sistema operacional. Ele fornece o mecanismo para armazenamento online e acesso a dados e programas que pertencem ao sistema operacional e a todos os usurios do sistema de computao. O sistema de arquivos consiste em duas partes distintas: uma coleo de arquivos, cada qual armazenando dados correlatos e uma estrutura de diretrio, que organiza e fornece informaes sobre todos os arquivos no sistema. Neste captulo, consideramos vrios aspectos dos arquivos e a diversidade de estruturas de diretrio. Tambm discutimos formas de proporcionar a proteo de arquivos, que necessria em um ambiente no qual mltiplos usurios tm acesso aos arquivos e onde geralmente desejvel controlar quem acessa os arquivos e de que forma. Alm disso, discutimos o armazenamento e o acesso de arquivos no meio do armazenamento secundrio mais comum, o disco. Exploramos formas de alocar espao em disco, recuperar espao livre, rastrear as posies de dados e interfacear as outras partes do sistema operacional com o armazenamento secundrio.

11.1 Conceito de arquivo


Os computadores podem armazenar informaes em vrios meios de armazenamento diferentes, tais como discos magnticos, fitas magnticas e discos ticos. Para que o sistema de computao seja conveniente de usar, o sistema operacional fornece uma viso lgica uniforme do armazenamento de informaes. O sistema operacional abstrai das propriedades fsicas de seus dispositivos de armazenamento para definir uma unidade de armazenamento lgica, o arquivo. Os arquivos so mapeados, pelo sistema operacional, em dispositivos fsicos. Esses dispositivos de armazenamento geralmente so no-volteis, de modo que o contedo persiste nos casos de falta de energia e reinicializao do sistema. Um arquivo uma coleo de informaes correlatas que recebe um nome e gravado no armazenamento secundrio. Da perspectiva do usurio, um arquivo a menor unidade alocvel de armazenamento secundrio lgico; ou seja, os dados s podem ser gravados no armazenamento secundrio se estiverem em um arquivo. Em geral, os arquivos representam programas (tanto fonte quanto objeto) e dados. Os arquivos de dados podem ser numricos, alfabticos, alfanumricos ou binrios. Os arquivos podem ter forma livre, como arquivos de texto, ou podem ter uma formatao rgida. Em geral, um arquivo uma sequncia de bit, bytes, linhas ou registros cujo significado definido pelo criador e usurio do arquivo. O conceito de arquivo , portanto, extremamente geral. As informaes em um arquivo so definidas pelo seu criador. Muitos tipos diferentes de informaes podem ser armazenadas em um arquivo: programas-fonte, programas-objeto, programas executveis, dados numricos, texto, registros de folha de pagamento, imagens grficas, gravaes de udio, entre outros. Um arquivo tem uma estrutura determinada, definida de acordo com seu tipo. Um arquivo de texto uma sequncia de caracteres organizados em linhas (e possivelmente pginas); um arquivo-fonte uma sequncia de sub-rotinas e funes, cada qual sendo organizada como declaraes seguidas por instrues executveis; um arquivo objeto uma sequncia de bytes organizados em blocos compreensveis pelo linkeditor do sisteSistemas de Arquivos 245

ma; um arquivo executvel uma srie de sees de cdigo que o carregador pode levar para a memria e executar. A estrutura interna dos arquivos discutida na Seo 11.1.5.

11.1.1 Atributos de arquivo


Um arquivo recebe um nome, para convenincia de seus usurios humanos, e referenciado pelo seu nome. Um nome geralmente um string de caracteres, tais como "exemplo.c". Alguns sistemas fazem distino entre caracteres maisculos e minsculos nos nomes, enquanto outros sistemas consideram os dois equivalentes. Quando um arquivo recebe um nome, ele se torna independente do processo, do usurio e mesmo do sistema que o criou. Por exemplo, um usurio pode criar o arquivo "exemplo.c", enquanto outro pode editar esse arquivo especificando seu nome. O proprietrio do arquivo poder gravar o arquivo em um disquete ou fita magntica e l-lo em outro sistema, onde ainda poderia continuar sendo chamado de "exemplo.c". Um arquivo tem determinados atributos, que variam de um sistema operacional para outro, mas geralmente consistem em: Nome: O nome simblico de arquivo a nica informao mantida no formato legvel pelo homem. Tipo: Essas informaes so necessrias para os sistemas que suportam tipos diferentes. Posio: Essas informaes so um ponteiro para um dispositivo e para a posio do arquivo no dispositivo. Tamanho: O tamanho atual do arquivo (em bytes, palavras ou blocos) e possivelmente o tamanho mximo permitido esto includos neste atributo. Proteo: Informaes de controle de acesso que controlam quem pode realizar as operaes de leitura, escrita, execuo etc. Hora, data e identificao de usurio: Essas informaes podem ser mantidas para (1) criao, (2) ltima modificao e (3) ltimo uso. Esses dados podem ser teis para proteo, segurana e monitorao de uso. As informaes sobre todos os arquivos so mantidas na estrutura de diretrio que tambm reside no armazenamento secundrio. De 16 a mais de 1000 bytes podem ser necessrios para gravar essas informaes para cada arquivo. Em um sistema com muitos arquivos, o tamanho do diretrio em si pode ser de megabytes. J que os diretrios, como os arquivos, devem ser no-volteis, eles precisam ser armazenados no dispositivo e levados para a memria gradativamente, conforme necessrio. A organizao da estrutura de diretrio ser discutida na Seo 11.3.

11.1.2 Operaes com arquivos


Um arquivo um tipo abstrato de dados. Para definir corretamente os arquivos, precisamos considerar as operaes que podem ser realizadas sobre eles. O sistema operacional fornece chamadas ao sistema para criar, escrever, ler, reposicionar, excluir e truncar arquivos. Vamos considerar o que o sistema operacional deve fazer para cada uma das seis operaes bsicas. Depois ento, ser fcil ver como implementar operaes semelhantes, por exemplo, renomear um arquivo. Para criar um arquivo: Um arquivo criado em duas etapas. Primeiro, deve haver espao no sistema de arquivos para o arquivo. O Captulo 11 discute como alocar espao para o arquivo. Em segundo lugar, uma entrada para o novo arquivo deve ser feita no diretrio. A entrada no diretrio registra o nome do arquivo e sua localizao no sistema de arquivos. Para escrever em um arquivo: Para escrever em um arquivo, fazemos uma chamada ao sistema especificando o nome do arquivo e as informaes a serem escritas nele. Dado o nome do arquivo, o sistema pesquisa o diretrio para encontrar a sua posio. O sistema deve manter um ponteiro de escrita para a posio no arquivo onde ocorrer a prxima escrita. O ponteiro de escrita deve ser atualizado sempre que ocorrer uma escrita. Para ler um arquivo: Para ler um arquivo, preciso usar uma chamada ao sistema que especifique o nome do arquivo e onde (na memria) o prximo bloco do arquivo dever ser colocado. Mais uma 246 Sistemas Operacionais vez, o diretrio pesquisado para encontrar a entrada de diretrio associada, e o sistema mantm um ponteiro de leitura para a posio no arquivo na qual a prxima leitura dever ocorrer. Assim que a leitura ocorrer, o ponteiro de leitura ser atualizado. Como, em geral, um arquivo est sendo gravado ou lido, a maioria dos sistemas mantm apenas um ponteiro de posio atual do arquivo. As operaes

de leitura e escrita utilizam esse mesmo ponteiro, economizando espao e reduzindo a complexidade do sistema. Para reposicionar dentro do arquivo: O diretrio pesquisado buscando a entrada apropriada, e a posio do arquivo atual ajustada para um determinado valor. Reposicionar dentro de um arquivo no precisa envolver operaes de I/O. Essa operao de arquivo tambm chamada de busca no arquivo. Para excluir um arquivo: Para excluir um arquivo, pesquisamos no diretrio o arquivo identificado pelo nome. Ao encontrar a entrada de diretrio associada, liberamos todo o espao de arquivo (para que ele possa ser reutilizado por outros arquivos) e apagamos a entrada do diretrio. Para truncar um arquivo: Existem momentos em que o usurio deseja que os atributos de um arquivo permaneam os mesmos, mas quer apagar o contedo do arquivo. Em vez de forar o usurio a excluir o arquivo e, em seguida, recri-lo, essa funo permite que todos os atributos permaneam inalterados (exceto pelo tamanho do arquivo), mas que o arquivo seja reajustado para o tamanho zero. Essas seis operaes bsicas certamente compreendem o conjunto mnimo exigido de operaes com arquivos. Outras operaes comuns incluem anexar {append) novas informaes ao final de um arquivo existente e renomear um arquivo existente. Essas operaes primitivas podem ento ser combinadas para realizar outras operaes com arquivos. Por exemplo, podemos criar uma cpia de um arquivo, ou copiar o arquivo para outro dispositivo de I/O, como uma impressora ou monitor, criando um novo arquivo e, em seguida, lendo do antigo e escrevendo no novo. Tambm queremos ter operaes que permitam que o usurio obtenha e defina os vrios atributos de um arquivo. Por exemplo, talvez tenhamos uma operao que permita ao usurio determinar o status de um arquivo, tais como o tamanho do arquivo, e outra operao que permita ao usurio definir os atributos de arquivo, tais como o proprietrio do arquivo. Boa parte das operaes de arquivo mencionadas envolvem pesquisar o diretrio pela entrada associada com o arquivo nomeado. Para evitar essa pesquisa constante, muitos sistemas vo inicialmente abrir um arquivo quando ele for usado ativamente. O sistema operacional mantm uma pequena tabela contendo informaes sobre todos os arquivos abertos: a tabela de arquivos abertos (open-file tabl). Quando uma operao de arquivo solicitada, um ndice para essa tabela usado, de modo que no h necessidade de pesquisa. Quando o arquivo no estiver mais sendo utilizado ativamente, ele ser fechado pelo processo, e o sistema operacional remover sua entrada da tabela de arquivos abertos. Alguns sistemas abrem implicitamente um arquivo quando a primeira referncia a ele feita. O arquivo automaticamente fechado quando o job ou o programa que abriu o arquivo termina. A maioria dos sistemas, no entanto, exigem que um arquivo seja aberto explicitamente pelo programador com uma chamada ao sistema (open) antes que ele possa ser usado. A operao open pega um nome de arquivo e pesquisa no diretrio, copiando a entrada de diretrio na tabela de arquivos abertos, supondo que as protees de arquivo permitem esse acesso. A chamada ao sistema open geralmente retornar um ponteiro entrada na tabela de arquivos abertos. Esse ponteiro, em vez do nome do arquivo em si, usado em todas as operaes de I/O, evitando pesquisas adicionais e simplificando a interface de chamada ao sistema. A implementao das operaes open e cl ose em um ambiente multiusurio, como o UNIX, mais complicada. Nesse sistema, vrios usurios podem abrir o arquivo ao mesmo tempo. Em geral, o sistema de arquivos utiliza dois nveis de tabelas internas. Existe uma tabela local, por processo, de todos os arquivos que o processo j abriu. Armazenadas nessa tabela esto informaes relativas ao uso do arquivo pelo processo. Por exemplo, o ponteiro atual de arquivo para cada arquivo encontrado aqui, indicando a posio no arquivo que a prxima chamada read ou escrever afetar. Cada entrada na tabela local, por sua vez, aponta para uma tabela global de arquivos abertos (systemwide open-file tabl). A tabela global, que abrange todo o sistema, contm informaes independentes de processo, tais como a posio do arquivo no disco, as datas de acesso e o tamanho do arquivo. Assim que um arquivo for aberto por um processo, outro processo executando uma chamada open simplesmente resultar no acrscimo Sistemas de Arquivos 247 de uma nova entrada tabela local de arquivos abertos do processo com um novo ponteiro de arquivo atual e um ponteiro para a entrada apropriada na tabela global do sistema. Em geral, a tabela global de arquivos abertos tambm tem um contador de aberturas (open count) associado a cada arquivo, indicando o nmero de

processos que tm o arquivo aberto. Cada chamada dose diminui esse contador e, quando o contador chegar a zero, o arquivo no estar mais em uso, e a entrada ser removida da tabela global de arquivos abertos. Em resumo, existem vrias informaes diferentes relacionadas com um arquivo aberto. Ponteiro de arquivo: Em sistemas que no incluem um deslocamento (offset) de arquivo como parte das chamadas ao sistema read e escrever, ser preciso rastrear a ltima posio de leitura e escrita como um ponteiro de posio atual no arquivo. Esse ponteiro exclusivo para cada processo que opera no arquivo e, portanto, deve ser mantido separado dos atributos de arquivo no disco. Contador de aberturas de arquivo: A medida que os arquivos so fechados, o sistema operacional dever reutilizar suas entradas na tabela de arquivos abertos, ou poder acabar ficando sem espao na tabela. Como mltiplos processos podem abrir um arquivo, o sistema dever esperar que o ltimo processo feche o arquivo antes de remover a entrada na tabela de arquivos abertos. Esse contador rastreia o nmero de procedimentos de abertura e fechamento, e chega a zero na ltima operao de fechamento. O sistema poder ento remover a entrada. Posio do arquivo no disco: A maior parte das operaes de arquivo exigem que o sistema modifique os dados no arquivo. As informaes necessrias para localizar o arquivo no disco so mantidas na memria para evitar ter de l-las do disco para cada operao. Alguns sistemas operacionais fornecem recursos para bloquear sees de um arquivo aberto para acesso de mltiplos processos, para compartilhar sees de um arquivo entre vrios processos e at mesmo para mapear as sees de um arquivo na memria em sistemas de memria virtual. Esta ltima funo chamada de mapeamento de um arquivo em memria; ela permite que uma parte do espao de endereamento virtual seja associado logicamente com uma seo de um arquivo. As operaes de leitura e escrita a essa regio da memria so ento tratadas como operaes de leitura e escrita no arquivo, simplificando em muito a utilizao de arquivos. Fechar o arquivo resulta em escrever todos os dados mapeados na memria de volta no disco, removendo-os da memria virtual do processo. Mltiplos processos podero mapear o mesmo arquivo na memria virtual de cada um, para permitir o compartilhamento de dados. As operaes de escrita de qualquer processo modificam os dados na memria virtual e podem ser vistas por todos os outros processos que mapeiam a mesma seo do arquivo. Considerando nosso conhecimento de memria virtual adquirido no Captulo 10, deve ser fcil entender como o compartilhamento de sees mapeadas na memria implementado. O mapa de memria virtual de cada processo que participa do compartilhamento aponta para a mesma pgina de memria fsica - a pgina que mantm uma cpia do bloco de disco. Esse compartilhamento de memria ilustrado na Figura 11.1. Para que o acesso aos dados compartilhados seja coordenado, os processos envolvidos podem usar um dos mecanismos para obter a excluso mtua descritos no Captulo 7.

11.1.3 Tipos de arquivos >


Uma considerao importante no projeto de um sistema de arquivos, e de todo sistema operacional, se o sistema dever reconhecer e oferecer suporte a tipos de arquivo. Se um sistema operacional reconhecer o tipo de um arquivo, ele poder operar com o arquivo de forma razovel. Por exemplo, um erro comum ocorre quando um usurio tenta imprimir a forma objeto-binria de um programa. Essa tentativa normalmente gera lixo, mas a impresso desse arquivo poder ser evitada se o sistema operacional tiver sido informado que o arquivo um programa objeto-binrio. Uma tcnica comum para implementar os tipos de arquivo incluir o tipo como parte do nome do arquivo. O nome dividido em duas partes - um nome e uma extenso, geralmente separada por um caractere de ponto (Figura 11.2). Dessa forma, o usurio e o sistema operacional podem saber imediatamente a partir do nome qual o tipo de arquivo em questo. Por exemplo, no MS-DOS, um nome pode consistir em at oito caracteres seguido por um ponto e terminado por uma extenso de at trs caracteres. O sistema utiliza a extenso para indicar o tipo de arquivo e o tipo de operaes que podem ser realizadas com aquele arquivo. Por exemplo, apenas arquivos com extenso ".com", ".exe" ou ".bat" podem ser executados. Os arquivos
248 Sistemas Operacionais
memria

virtual do processo A memria fsica

I112|3
memoria virtual do processo B

arquivo em disco Figura 11.1 Arquivos mapeados em memria. ".com" e ".exe" so duas formas de arquivos binrios executveis, enquanto um arquivo ".bat" um arquivo batch (lote) que contm comandos para o sistema operacional em formato ASCII. O MS-DOS reconhece apenas algumas extenses de arquivos, mas os programas aplicativos as utilizam para indicar os tipos de arquivos nos quais esto interessados. Por exemplo, um processador de textos pode criar arquivos com a extenso ".doe". O sistema operacional dever ento responder Seleo desse arquivo (uma chamada open, por exemplo) chamando o processador de textos e dando a ele o arquivo como entrada. Essas extenses podem ser suprimidas se o sistema operacional o permitir, mas podem economizar tempo de digitao e ajudar os usurios a entenderem o tipo de cada arquivo. Alguns sistemas operacionais incluem suporte a extenso, enquanto outros deixam a cargo das aplicaes mudar seu comportamento com base na extenso. Neste ltimo caso, as extenses podem ser consideradas dicas para as aplicaes que operam com elas. tipo de arquivo executvel objeto cdigo-fonte batch texto processador de textos biblioteca impresso ou visualizao arquivo compactado extenso comum exe, com, bin, ou nada obj, o c, cc, pas, java, asm, a bat, sh txt, doe wpd, tex, doe, etc lib, a, DLL ps, dvi, gif are, zip, tar funo programa de linguagem de mquina pronto para executar linguagem de mquina, compilado, sem linkedio cdigo fonte em vrias linguagens comandos para o interpretador de comandos dados textuais, documentos vrios formatos de processador de textos bibliotecas de rotinas para programadores arquivo ASCII ou binrio em um formato para impresso ou visualizao arquivos correlatos agrupados em um arquivo nico, s vezes compactado, para fins de arquivamento ou armazenamento Figura 11.2 Tipos de arquivo comuns. Sistemas de Arquivos 249

Outro exemplo da utilidade dos tipos de arquivo vem do sistema operacional TOPS-20. Se o usurio tentar executar um programa objeto cujo arquivo-fonte tenha sido modificado (editado) desde que o arquivo objeto foi gerado, o arquivo-fonte ser recompilado automaticamente. Essa funo garante que o usurio sempre executar um arquivo objeto atualizado. Caso contrrio, o usurio poderia perder um tempo precioso executando o arquivo objeto antigo. Observe que, para que essa funo seja possvel, o sistema operacional dever fazer a distino entre o arquivo-fonte e o arquivo objeto para verificar a hora em que cada arquivo foi modificado pela ltima vez ou criado, e para determinar a linguagem do programa fonte (para que possa utilizar o compilador correto). Considere o sistema operacional do Apple Macintosh. Nesse sistema, cada arquivo tem um tipo, como "text" ou "pict". Cada arquivo tambm tem um atributo de criador, contendo o nome do programa que o criou. Esse atributo definido pelo sistema operacional durante a chamada create, portanto, seu uso imposto e suportado pelo sistema. Por exemplo, um arquivo produzido por um processador de textos tem o nome do processador como seu criador. Quando o usurio abre esse arquivo, clicando duas vezes com o mouse no cone que representa o arquivo, o processador de textos ser chamado automaticamente, e o arquivo ser carregado, pronto para edio. O sistema UNIX no oferece esse recurso porque utiliza um nmero mgico bruto armazenado no incio de alguns arquivos para indicar basicamente o tipo de arquivo: programa executvel, arquivo batch (conhecido como script de shell), arquivo PostScript e assim por diante. Nem todos os arquivos tm nmeros mgicos, por isso os recursos do sistema no podem ser baseados unicamente nesse tipo de informao. O UNIX tambm no registra o nome do programa de criao. Ele permite a existncia de dicas sobre as extenses de nome de arquivo, mas essas extenses no so impostas nem implementadas pelo sistema operacional; basicamente, so usadas para orientar os usurios na determinao do tipo de contedo do arquivo.

11.1.4 Estrutura de arquivos


Tambm possvel utilizar tipos de arquivo para indicar a estrutura interna do arquivo. Como mencionado na Seo 11.1.3, os arquivos-fonte e objeto tm estruturas que correspondem s expectativas dos programas que os lem. Alm disso, certos arquivos devem se adequar a uma determinada estrutura que seja compreendida pelo sistema operacional. Por exemplo, o sistema operacional poder exigir que um arquivo executvel tenha uma estrutura especfica de modo que possa determinar onde na memria o arquivo dever ser carregado e qual a posio da primeira instruo. Alguns sistemas operacionais estendem essa ideia a um conjunto de estruturas de arquivos suportadas pelo sistema, com conjuntos de operaes especiais para manipular arquivos com essas estruturas. Por exemplo, o popular sistema operacional VMS da DEC tem um sistema de arquivos que oferece suporte a mltiplas estruturas de arquivos. Ele define trs estruturas de arquivos. Nossa discusso aponta para uma das desvantagens do suporte por parte do sistema operacional a mltiplas estruturas de arquivos: o sistema operacional resultante pesado demais. Se o sistema operacional definir cinco estruturas de arquivo diferentes, ele precisar conter o cdigo para suportar essas estruturas de arquivos. Alm disso, cada arquivo poder precisar ser definido como um dos tipos de arquivo aceitos pelo sistema operacional. Graves problemas podero resultar de novas aplicaes que exijam que as informaes sejam estruturadas de formas no suportadas pelo sistema operacional. Por exemplo, vamos supor que um sistema oferea suporte a dois tipos de arquivos: arquivos de texto (compostos de caracteres ASCII separados por um caractere carriage-return e um avano de linha) e arquivos executveis binrios. Agora, se ns (como usurios) desejarmos definir um arquivo criptografado para proteger nossos arquivos contra leitura por pessoas no-autorizadas, talvez nenhum dos tipos de arquivo seja adequado. O arquivo criptografado no consiste em linhas de texto ASCII, mas em bits (aparentemente) aleatrios. Embora possa parecer ser um arquivo binrio, ele no executvel. Como resultado, poderemos ter de contornar ou usar indevidamente o mecanismo de tipos de arquivo do sistema operacional, ou modificar ou abandonar nosso esquema de criptografia.

Alguns sistemas operacionais impem (e suportam) um nmero mnimo de estruturas de arquivo. Essa abordagem tem sido adotada no UNIX, MS-DOS e outros. O UNIX considera cada arquivo uma sequncia de bytes com oito bits; no h interpretao desses bytes pelo sistema operacional. Esse esquema fornece flexibilidade mxima, mas pouco suporte. Cada programa aplicativo dever incluir seu prprio cdigo para in250 Sistemas Operacionais terpretar um arquivo de entrada na estrutura adequada. No entanto, todos os sistemas operacionais devero suportar pelo menos uma estrutura - a de um arquivo executvel - para que o sistema possa carregar e executar programas. Outro exemplo de um sistema operacional que oferece suporte a um nmero mnimo de estruturas de arquivo o Sistema Operacional Macintosh, que espera que os arquivos contenham duas partes: o ramo de recursos e o ramo de dados. O ramo de recursos contm as informaes de interesse para o usurio. Por exemplo, ele mantm as identificaes de qualquer boto exibido pelo programa. Um usurio estrangeiro talvez queira renomear esses botes no seu prprio idioma, e o Sistema Operacional Macintosh fornece as ferramentas para permitir a modificao dos dados no ramo de recursos. O ramo de dados contm cdigo de programa ou dados: o contedo tradicional dos arquivos. Para realizar a mesma tarefa em um sistema UNIX ou MS-DOS, o programador precisaria alterar e recompilar o cdigo-fonte, a menos que tivesse criado seu prprio arquivo de dados altervel pelo usurio. A lio desse exemplo que til para um sistema operacional oferecer suporte a estruturas que sero usadas com frequncia e que pouparo trabalho do programador. Poucas estruturas tornam a programao inconveniente, enquanto o excesso de estruturas pode aumentar em muito o tamanho dos sistemas operacionais e causar confuso ao programador.

11.1.5 Estrutura interna dos arquivos


Internamente, localizar um deslocamento em um arquivo pode ser complicado para o sistema operacional. Lembre-se do Captulo 2 que os sistemas de disco geralmente tm um tamanho de bloco bem definido determinado pelo tamanho de um setor.|,Todas as operaes de I/O de disco so realizadas em unidades de um bloco (registro fsico), e todos os blocos tm o mesmo tamanho.j pouco provvel que o tamanho do registro fsico seja exatamente igual ao tamanho do registro lgico desejado.| Os registros lgicos podem at variar em tamanho. Agrupar alguns registros lgicos em blocos fsicos uma soluo comum para esse problema./ Por exemplo, o sistema operacional UNIX define todos os arquivos simplesmente como um fluxo de bytes. Cada byte individualmente enderevel pelo seu deslocamento a partir do incio (ou fim) do arquivo. Nesse caso, o registro lgico 1 byte. O sistema de arquivos agrupa e desagrupa automaticamente os bytes em blocos de disco fsico (digamos 512 bytes por bloco), conforme necessrio. j O tamanho do registro lgico, o tamanho do bloco fsico e a tcnica de agrupamento determinam quanytos registros lgicos existem em cada bloco fsico. O agrupamento pode ser feito pelo programa aplicativo do iusurio ou pelo sistema operacional. / V^ Em ambos os casos, o arquivo pode ser considerado uma sequncia de blocos. Todas as funes de I/O bsicas operam em termos de blocos. A converso dos registros lgicos em blocos fsicos um problema de software relativamente simples. Observe que o espao de disco sendo sempre alocado em blocos tem como resultado o possvel desperdcio de alguma parte do ltimo bloco de cada arquivo. Se cada bloco tiver 512 bytes, um arquivo de 1.949 bytes ocuparia quatro blocos (2.048 bytes); os 99 bytes finais seriam desperdiados. Os bytes desperdiados alocados para manter tudo em unidades de blocos (em vez de bytes) a fragmentao interna. Todos os sistemas de arquivos sofrem de fragmentao interna; quanto maior o tamanho do bloco, maior a fragmentao interna.

11.1.6 Semntica de consistncia


A semntica de consistncia um critrio importante para avaliar qualquer sistema de arquivos que suporte o compartilhamento de arquivos. ; uma caracterizao do sistema que especifica a semntica de vrios usurios acessando ao mesmo tempo um arquivo compartilhado. Especificamente, essa semntica deve especificar quando as modificaes de dados de um usurio so observveis por outros usurios. Existem vrias semnticas

de consistncia diferentes. Descrevemos aquela utilizada no UNIX. O sistema de arquivos do UNIX (consulte o Captulo 17) utiliza a seguinte semntica de consistncia: As operaes de escrita em um arquivo aberto por um usurio so imediatamente visveis a outros usurios que tenham esse arquivo aberto ao mesmo tempo. Sistemas de Arquivos 251 Existe um modo de compartilhamento no qual os usurios compartilham o ponteiro da posio atual no arquivo. Assim, o avano do ponteiro por um usurio afeta todos os usurios compartilhados. Aqui, um arquivo tem uma nica imagem que se intercala em todos os acessos, independentemente da sua origem. Essas semnticas s vezes se prestam a uma implementao na qual um arquivo associado a uma imagem fsica nica que acessada como um recurso exclusivo. A disputa por essa imagem nica resulta em atrasos nos processos de usurio.

11.2 Mtodos de acesso


Os arquivos armazenam informaes. Quando so usadas, essas informaes devem ser acessadas e lidas na memria do computador. Existem vrias formas das informaes no arquivo a serem acessadas. Alguns sistemas fornecem apenas um mtodo de acesso aos arquivos. Em outros sistemas, tais como os da IBM, muitos mtodos de acesso so aceitos, e escolher o mtodo correto para determinada aplicao um problema importante de projeto.

11.2.1 Acesso sequencial


O mtodo de acesso mais simples o acesso sequencial. As informaes no arquivo so processadas em ordem, um registro aps o outro. Esse modo de acesso de longe o mais comum, por exemplo, os editores e compiladores geralmente acessam arquivos desse modo. A maior parte das operaes com um arquivo so de leitura e escrita. Uma operao de leitura l a prxima poro do arquivo e automaticamente avana um ponteiro do arquivo, que indica a posio de I/O. Da mesma forma, uma operao de escrita acrescenta informaes ao final do arquivo e avana at o fim do material recm-escrito (o novo fim do arquivo). Esse ponteiro de arquivo pode ser retornado para o incio e, em alguns sistemas, um programa pode avanar ou voltar n registros, para determinado inteiro n (talvez apenas para n = 1). O acesso sequencial est apresentado na Figura 11.3. O acesso sequencial baseia-se em um modelo de fita de um arquivo e funciona tanto em dispositivos de acesso sequencial quanto em dispositivos de acesso aleatrio.
inicio posio atual ,. retornar i 1= ler ou escrever i

Figura 11.3 Arquivo de acesso sequencial.

11.2.2 Acesso direto


Outro mtodo o acesso direto (ou acesso relativo). Um arquivo formado por registros lgicos de tamanho fixo que permitem que os programas leiam e escrevam registros rapidamente sem uma ordem especfica. O mtodo de acesso direto baseia-se em um modelo de disco de um arquivo; os discos permitem o acesso aleatrio a qualquer bloco do arquivo. Para o acesso direto, o arquivo visto como uma sequncia numerada de blocos ou registros. Um arquivo de acesso direto permite que blocos arbitrrios sejam lidos ou escritos. Assim, podemos ler o bloco 14, em seguida ler o bloco 53 e depois escrever o bloco 7. No existem restries quanto ordem de leitura ou escrita para um arquivo de acesso direto. Os arquivos de acesso direto so teis para acesso imediato a grandes quantidades de informao. Os bancos de dados muitas vezes tm essa necessidade. Quando uma consulta relativa a determinado assunto surge, identificamos (calculamos) o bloco que contm a resposta e, em seguida, lemos esse bloco diretamente para fornecer as informaes desejadas. Por exemplo, em um sistema de reserva de passagens areas, podemos armazenar todas as informaes sobre determinado vo (por exemplo, o vo 713) no bloco identificado pelo nmero do vo. Assim, o nume252

Sistemas Operacionais ro dos assentos disponveis para o vo 713 armazenando no bloco 713 do arquivo de reserva. Para armazenar informaes sobre um conjunto maior, tais como pessoas, podemos calcular uma funo de hashing nos nomes das pessoas ou pesquisar um pequeno ndice na memria para determinar um bloco para leitura e pesquisa. As operaes de arquivo devem ser modificadas para incluir o nmero de bloco como parmetro. Assim, temos read w, onde no nmero do bloco, em vez de read next, e escrever , em vez de escrever next. Uma abordagem alternativa manter read next e escrever next, como fazemos com o acesso sequencial e adicionar uma operao, posi ti on f i 1 e to n, onde no nmero de bloco. Em seguida, para efetuar um read n fazemos position file to n e read next. O nmero de bloco fornecido pelo usurio ao sistema operacional normalmente um nmero de bloco relativo, que um ndice relativo ao incio do arquivo. Assim, o primeiro bloco relativo do arquivo 0, o seguinte 1, e assim por diante, embora o endereo absoluto real de disco do bloco talvez seja 14703 para o primeiro bloco, e 3192 para o segundo. O uso de nmeros de bloco relativos permite que o sistema operacional decida onde o arquivo deve ser colocado (chamado de problema de alocao, conforme discutido mais tarde neste captulo), e ajuda a evitar que o usurio acesse partes do sistema de arquivos que talvez no faam parte do seu arquivo. Alguns sistemas comeam seus nmeros de bloco relativos em 0; outros em 1. Dado um tamanho de registro lgico L, um pedido para o registro N transformado em um pedido de I/O para L bytes comeando na posio L * (N-1) dentro do arquivo (considerando que o primeiro registro N = 1). Como os registros lgicos so de tamanho fixo, tambm fcil ler, escrever ou excluir um registro. Nem todos os sistemas operacionais suportam acesso direto e sequencial aos arquivos. Alguns sistemas permitem apenas acesso sequencial aos arquivos; outros permitem apenas acesso direto. Alguns sistemas exigem que um arquivo seja definido como sequencial ou direto quando ele criado; esse arquivo pode ser acessado apenas de forma consistente com sua declarao. Observe, por outro lado, que fcil simular o acesso sequencial sobre um arquivo de acesso direto. Se mantivermos uma varivel cp {current position), que define nossa posio atual, podemos simular operaes sequenciais, como mostrado na Figura 11.4. Por outro lado, extremamente ineficiente e pouco prtico simular um arquivo de acesso direto sobre um arquivo de acesso sequencial.

11.2.3 Outros mtodos de acesso


Outros mtodos de acesso podem ser desenvolvidos com base no mtodo de acesso direto. Esses mtodos adicionais geralmente envolvem a construo de um ndice para o arquivo. O ndice, como um ndice na parte posterior de um livro, contm ponteiros aos vrios blocos. Para encontrar um registro no arquivo, primeiro pesquisamos o ndice e depois usamos o ponteiro para acessar o arquivo diretamente e encontrar o registro desejado. Por exemplo, um arquivo de preos de varejo pode listar os cdigos de produtos (UPCs - Universal Product Codes) para itens, com seus preos associados. Cada registro consiste em um UPC de 10 dgitos e um preo de 6 dgitos, perfazendo um registro de 16 bytes. Se nosso disco tiver 1.024 bytes por bloco, podemos armazenar 64 registros por bloco. Um arquivo de 120.000 registros ocuparia em torno de 2.000 blocos (2 milhes de bytes). Ao manter o arquivo ordenado por UPC, podemos definir um ndice consistindo no primeiro UPC em cada bloco. Esse ndice teria 2.000 entradas de 10 dgitos cada, ou 20.000 bytes, e assim poderia ser mantido na memria. Para encontrar o preo de determinado item, podemos fazer uma pesquisa (binria) no ndice. A partir dessa pesquisa, sabemos exatamente que bloco contm o registro desejado e acessamos esse bloco. Essa estrutura nos permite pesquisar um arquivo grande efetuando poucas operaes de entrada e sada. Com arquivos grandes, o arquivo de ndice propriamente dito pode ficar grande demais para ser mantido na memria. Uma soluo criar um ndice para o arquivo de ndice. O arquivo de ndice principal contm ponteiros aos arquivos de ndice secundrios, que apontam para os itens de dados reais. Por exemplo, o mtodo de acesso sequencial indexado da IBM (ISAM - Indexed Sequential Access Mode) utiliza um pequeno ndice mestre que aponta para blocos de disco de um ndice secundrio. Os blocos

de ndice secundrio apontam para os blocos reais do arquivo. O arquivo mantido ordenado por uma chave definida. Para encontrar determinado item, fazemos primeiro uma pesquisa binria do ndice mestre, que Sistemas de Arquivos 253 fornece o nmero do bloco do ndice secundrio. Esse bloco lido e mais uma vez uma pesquisa binria usada para encontrar o bloco que contm o registro desejado. Finalmente, este bloco pesquisado sequencialmente. Dessa forma, qualquer registro pode ser localizado a partir de sua chave no mximo em duas operaes de leitura de acesso direto. A Figura 11.5 mostra uma situao semelhante implementada pelo mecanismo de arquivo de ndice e arquivo relativo ao sistema VMS. acesso sequencial reset read next escrever next implementao com acesso direto

cp = 0;
read cp; cp = cp + 1; escrever cp;

cp = cp + 1;
Figura 11.4 Simulao de acesso sequencial em um arquivo de acesso direto.

11.3 Estrutura de diretrio


Os sistemas de arquivos dos computadores podem ser enormes. Alguns sistemas armazenam milhares de arquivos em centenas de gigabytes de disco. Para gerenciar todos esses dados, precisamos organiz-los. Essa organizao geralmente feita em duas partes. Em primeiro lugar, o sistema de arquivos quebrado em parties, tambm chamadas de minidiscos no mundo da IBM ou volumes nos PCs e Macintosh. Em geral, cada disco em um sistema contm pelo menos uma partio, que uma estrutura de baixo nvel na qual residem arquivos e diretrios. Alguns sistemas utilizam parties para fornecer vrias reas separadas em um mesmo disco, tratando cada uma como um dispositivo de armazenamento separado, enquanto outros sistemas permitem que as parties sejam maiores do que um disco, de forma que possam agrupar os discos em uma nica estrutura lgica. O usurio ento precisa se preocupar apenas com a estrutura lgica de arquivos e diretrios; ele pode ignorar completamente os problemas de alocao de espao fsico para os arquivos. Por esse motivo, as parties podem ser consideradas discos virtuais. Em segundo lugar, cada partio contm informaes sobre os arquivos dentro dela. Essas informaes so mantidas em entradas em um diretrio de dispositivo ou ndice de volume. O diretrio de dispositivo (mais conhecido simplesmente como diretrio) registra informaes - tais como nome, posio, tamanho e tipo - para todos os arquivos naquela partio. A Figura 11.6 mostra a organizao tpica de um sistema de arquivos. O diretrio pode ser visto como uma tabela de smbolos que traduz nomes de arquivos em entradas de diretrio. Se considerarmos essa viso, fica aparente que o diretrio em si pode ser organizado de muitas forsobrenome
numero de registro lgico Adams Arthur Asher

Smith Smith, John seguro social idade arquivo de ndice arquivo relativo

.:::., M

Figura 11.5 Exemplo de arquivo ndice e arquivo relativo. 254 Sistemas Operacionais mas. Queremos ser capazes de inserir e excluir entradas, pesquisar uma entrada por nome e listar todas as entradas no diretrio. Na Seo 11.8, discutimos as estruturas de dados apropriadas que podem ser usadas na implementao da estrutura de diretrio. Nesta seo, examinamos vrios esquemas para definir a estrutura

lgica do sistema de diretrios. Ao considerar determinada estrutura de diretrio, precisamos ter em mente que operaes devero ser realizadas em um diretrio: Pesquisar arquivos: preciso poder pesquisar uma estrutura de diretrio para encontrar determinado arquivo. Como os arquivos tm nome simblico e nomes semelhantes podem indicar uma relao entre os arquivos, talvez surja a necessidade de encontrar todos os arquivos cujos nomes correspondam a um determinado padro. Criar um arquivo: preciso poder criar novos arquivos e adicion-los ao diretrio.
partio A < partio B \ / disco 1 partio C < r" disco 2 ? disco 3

Figura 11.6 Uma organizao tpica de sistema de arquivos. Excluir um arquivo: Quando um arquivo no mais necessrio, precisamos ter a capacidade de removlo do diretrio. Listar um diretrio: E preciso poder listar os arquivos em um diretrio e o contedo da entrada no diretrio para cada arquivo na lista. Renomear um arquivo: Como o nome de um arquivo representa seu contedo para os usurios, precisamos ter a capacidade de alterar o nome quando o contedo ou uso do arquivo mudar. Renomear um arquivo talvez permita tambm que sua posio dentro da estrutura de diretrio seja alterada. Percorrer o sistema de arquivos: til poder acessar todos os diretrios e todos os arquivos dentro de uma estrutura de diretrio. Para fins de confiabilidade, boa ideia salvar o contedo e a estrutura do sistema de arquivos inteiro em intervalos regulares. Essa operao geralmente consiste em copiar todos os arquivos para uma fita magntica. Essa tcnica fornece uma cpia backup em caso de falha do sistema ou se o arquivo simplesmente no estiver mais em uso. Nesse caso, o arquivo pode ser copiado para fita, e o espao em disco desse arquivo pode ser liberado para reutilizao por outro arquivo. Nas Sees 11.3.1 a 11.3.5, descrevemos os esquemas mais comuns para definir a estrutura lgica de um diretrio.

11.3.1 Diretrio de nvel nico


A estrutura de diretrio mais simples a de diretrio de nvel nico. Todos os arquivos esto contidos no mesmo diretrio, que de fcil suporte e compreenso (Figura 11.7).
diretrio arquivos cat test data mail cont hex

Figura 11.7 Diretrio de nvel nico. Sistemas de Arquivos 255 Um diretrio de nvel nico tem limitaes significativas, no entanto, quando o nmero de arquivos aumenta ou quando existe mais de um usurio. Como todos os arquivos esto no mesmo diretrio, eles devem ter nomes exclusivos. Se tivermos dois usurios que chamem seu arquivo de dados de teste, a regra de nome exclusivo ser violada. (Por exemplo, em uma turma de programao, 23 alunos deram o nome de progl ao programa para sua segunda tarefa; outros 11 o chamaram de tarefai.) Embora os nomes de arquivos sejam geralmente selecionados para refletir o contedo do arquivo, eles normalmente so limitados em tamanho. O sistema operacional MS-DOS permite apenas nomes de arquivos com 11 caracteres; o UNIX permite 255 caracteres. Mesmo com um nico usurio, medida que o nmero de arquivos aumenta, fica difcil lembrar dos nomes de todos os arquivos, de modo a criar apenas arquivos com nomes exclusivos. No incomum um usurio ter centenas de arquivos em um sistema de computao e um nmero igual de arquivos adicionais em outro sistema. Em um ambiente assim, manter o controle de tantos arquivos uma tarefa e tanto.

11.3.2 Diretrio de dois nveis


A principal desvantagem de um diretrio de nvel nico a confuso de nomes de arquivos criada pelos diferentes usurios. A soluo padro criar um diretrio separado para cada usurio. Na estrutura de diretrio de dois nveis, cada usurio tem seu prprio diretrio de arquivos de usurio (UFD - User File Directory). Cada UFD tem uma estrutura semelhante, mas lista apenas os arquivos de um nico usurio. Quando um job de usurio comea ou quando o usurio efetua o logon, o diretrio de arquivos mestre (MFD - Master File Directory) pesquisado. O MFD indexado por nome de usurio ou nmero de conta, e cada entrada aponta para o UFD daquele usurio (Figura 11.8).

diretrio de arquivos mestre (MFD) diretrio de arquivos de usurio (UFD)

Figura 11.8 Estrutura de diretrio de dois nveis. Quando um usurio fizer referncia a determinado arquivo, apenas seu prprio UFD ser pesquisado. Assim, diferentes usurios podem ter arquivos com o mesmo nome, desde que todos os nomes de arquivo em cada diretrio de usurio sejam exclusivos. Para criar um arquivo para um usurio, o sistema operacional pesquisa apenas o UFD daquele usurio para determinar se existe outro arquivo com esse nome. Para excluir um arquivo, o sistema operacional restringe a sua busca ao UFD local; assim, ele no poder excluir acidentalmente o arquivo de outro usurio que tenha o mesmo nome. Os diretrios de usurio propriamente ditos devem ser criados e excludos conforme necessrio. Um programa especial de sistema executado com as informaes apropriadas de nome de usurio e conta. O programa cria um novo diretrio de arquivos de usurio e acrescenta uma entrada para ele no diretrio de arquivos mestre. A execuo desse programa deve ser restrita a administradores de sistema. A alocao de espao em disco para os diretrios de usurio pode ser realizada com as tcnicas discutidas na Seo 11.6 para os prprios arquivos. A estrutura de diretrio de dois nveis resolve o problema de coliso de nomes, mas ainda assim tem problemas. Essa estrutura efetivamente isola um usurio do outro. Esse isolamento uma vantagem quando os usurios so completamente independentes, mas uma desvantagem quando os usurios desejam cooperar em alguma tarefa e acessar os arquivos uns dos outros. Alguns sistemas simplesmente no permitem que os arquivos locais de um usurio sejam acessados por outros usurios. 256 Sistemas Operacionais Se o acesso for permitido, um usurio deve ser capaz de indicar o nome de um arquivo no diretrio de outro usurio. Para indicar determinado arquivo de forma exclusiva em um diretrio de dois nveis, preciso fornecer o nome do usurio e o nome do arquivo. Um diretrio de dois nveis pode ser considerado uma rvore - ou uma rvore invertida- de altura 2. A raiz da rvore o diretrio de arquivos mestre. Seus descendentes diretos so os UFDs. Os descendentes dos diretrios de arquivo de usurio so os prprios arquivos. Os arquivos so as folhas da rvore. Especificar um nome de usurio e um nome de arquivo define um caminho na rvore a partir da raiz (o diretrio de arquivos mestre) at a folha (o arquivo especificado). Assim, um nome de usurio e um nome de arquivo definem um nome de caminho. Todo arquivo no sistema tem um nome de caminho. Para indicar um arquivo de forma exclusiva, um usurio deve saber o nome de caminho do arquivo desejado. Por exemplo, se o usurio A desejar acessar seu prprio arquivo de teste chamado test, ele simplesmente poder fazer referncia a test. Para acessar o arquivo de teste do usurio B (com o nome de entrada de usurio userb), no entanto, ele talvez tenha de fazer referncia a /userb/test. Cada sistema tem sua prpria sintaxe para nomear arquivos em diretrios diferentes do prprio diretrio do usurio. Existe uma sintaxe adicional para especificar a partio de um arquivo. Por exemplo, no MS-DOS uma partio especificada por uma letra seguida de dois-pontos. Assim, uma especificao de arquivo pode ser "C:\userb\test". Alguns sistemas vo mais alm e separam a partio, as partes de nome do diretrio e nome do arquivo da especificao. Por exemplo, no VMS, o arquivo "login.com" pode ser especificado como: "u:[sst.jdeck]login.com;l", onde "u" o nome da partio, "sst" o nome do diretrio, "jdeck" o nome do subdiretrio e " 1" o nmero da verso. Outros sistemas simplesmente tratam o nome da partio como parte do nome do diretrio. O primeiro nome dado o da partio e o resto o diretrio e o arquivo. Por exemplo,

"/u/pbg/test" pode especificar a partio "u", diretrio "pbg" e o arquivo "test". Um caso especial dessa situao ocorre com relao aos arquivos de sistema. Esses programas fornecidos como parte do sistema (carregadores, montadores, compiladores, utilitrios, bibliotecas, entre outros) geralmente so definidos como arquivos. Quando os comandos apropriados so dados ao sistema operacional, esses arquivos so lidos pelo carregador e executados. Muitos interpretadores de comando atuam simplesmente tratando o comando como o nome de um arquivo a ser carregado e executado. Da forma em que o sistema de diretrio est definido no momento, esse nome de arquivo seria pesquisado no diretrio de arquivos de usurio atual. Uma soluo seria copiar os arquivos do sistema para cada diretrio de arquivos de usurio. No entanto, copiar todos os arquivos do sistema seria um enorme desperdcio de espao. (Se os arquivos do sistema exigem 5 megabytes, ento o suporte a 12 usurios exigiria 5 X 12 = 60 megabytes apenas para cpias dos arquivos de sistema.) A soluo padro complicar um pouco o procedimento de pesquisa. Um diretrio especial de usurio definido para conter os arquivos do sistema (por exemplo, usurio 0). Sempre que um nome de arquivo for dado para ser carregado, o sistema operacional primeiro pesquisa o diretrio de arquivos de usurio local. Se o arquivo for encontrado, ele ser usado. Se no for encontrado, o sistema pesquisar automaticamente o diretrio especial de usurio que contm os arquivos do sistema. A sequncia de diretrios pesquisados quando um arquivo referenciado denominada caminho de pesquisa. Essa ideia pode ser estendida, de modo que o caminho de pesquisa contenha uma lista ilimitada de diretrios a serem pesquisados quando um nome de comando fornecido. Esse mtodo o utilizado com mais frequncia no UNIX e no MS-DOS.

11.3.3 Diretrios estruturados em rvore


Assim que tivermos visto como visualizar um diretrio de dois nveis como uma rvore de dois nveis, a generalizao natural estender a estrutura de diretrio em uma rvore de altura arbitrria (Figura 11.9). Essa generalizao permite que os usurios criem seus prprios subdiretrios e organizem seus arquivos adequadamente. O sistema MS-DOS, por exemplo, estruturado como uma rvore. Na verdade, uma rvore a estrutura de diretrio mais comum. A rvore tem um diretrio raiz. Todo arquivo no sistema tem um nome de caminho exclusivo. Um diretrio (ou subdiretrio) contm um conjunto de arquivos ou subdiretrios. Um diretrio simplesmente outro arquivo, mas tratado de modo especial. Todos os diretrios tm o mesmo formato interno. Um bit em cada entrada de diretrio define a entrada como um arquivo (0) ou um subdiretrio (1). Chamadas ao sistema especiais criam e excluem diretrios. Sistemas de Arquivos 257
p e mail
hex count

Figura 11.9 Diretrio estruturado em rvore. Em uso normal, cada usurio tem um diretrio corrente. O diretrio corrente deve conter a maior parte dos arquivos que so de interesse ao usurio. Quando for feita referncia a um arquivo, o diretrio corrente ser pesquisado. Se houver necessidade de um arquivo que no esteja no diretrio corrente, o usurio dever especificar um nome de caminho ou alterar o diretrio corrente para que seja o diretrio contendo esse arquivo. Para que o usurio possa mudar o diretrio corrente para outro diretrio, uma chamada ao sistema feita utilizando o nome do diretrio como um parmetro e usando esse parmetro para redefinir o diretrio corrente. De uma chamada ao sistema change di rectory prxima, todas as chamadas open pesquisam o diretrio corrente pelo arquivo especificado. O diretrio corrente inicial de um usurio designado quando o job de usurio comea ou o usurio efetua logon. O sistema operacional pesquisa o arquivo de contabilizao (ou alguma outra posio predefinida)

para encontrar uma entrada para esse usurio (para fins de contabilizao). No arquivo de contabilizao, existe um ponteiro (ou nome) para o diretrio inicial do usurio. Esse ponteiro copiado para uma varivel local do usurio, que especifica o diretrio corrente inicial do usurio. Os nomes de caminho podem ser de dois tipos: absolutos ou relativos. Um nome de caminho absoluto comea na raiz e segue um caminho at o arquivo especificado, fornecendo os nomes de diretrio no caminho. Um nome de caminho relativo define um caminho a partir do diretrio corrente. Por exemplo, no sistema de arquivos estruturado em rvore da Figura 11.9, se o diretrio corrente for root/spell/mail, ento o nome de caminho relativo prt/first refere-se ao mesmo arquivo que o nome de caminho absoluto root/ spell/ mail/prt/first. Permitir que o usurio defina seus prprios subdiretrios possibilita que ele imponha uma estrutura para os seus arquivos. Essa estrutura poder resultar em diretrios separados para os arquivos associados a diferentes tpicos (por exemplo, criamos um subdiretrio para conter o texto deste livro) ou diferentes formas de informao (por exemplo, o diretrio programs pode conter programas fonte; o diretrio bin pode armazenar todos os binrios). Uma importante deciso de poltica em uma estrutura de diretrio em rvore como tratar a excluso de um diretrio. Se o diretrio estiver vazio, sua entrada no diretrio que o contm pode ser simplesmente excluda. No entanto, vamos supor que o diretrio a ser excludo no esteja vazio, mas contenha vrios arquivos ou possivelmente subdiretrios. Uma de duas abordagens pode ocorrer. Alguns sistemas, como o MS-DOS, s excluem um diretrio quando ele estiver vazio. Assim, para excluir um diretrio, o usurio precisar primeiro excluir (ou mover) todos os arquivos daquele diretrio. Se houver subdiretrios, o usurio dever aplicar esse procedimento de forma recursiva, excluindo-os tambm, o que pode envolver muito trabalho. 258 Sistemas Operacionais Uma alternativa - permitida pelo comando rm do UNIX - fornecer uma opo que exclua tambm todos os arquivos e subdiretrios, quando h um pedido para excluir um diretrio. Observe que as duas abordagens so de fcil implementao, a escolha de uma delas poltica. A ltima opo mais conveniente, mas mais arriscada, porque toda a estrutura de diretrios pode ser removida com um comando. Se esse comando for emitido por engano, um grande nmero de arquivos e diretrios precisaria ser restaurado das fitas de backup (considerando que exista backup). Com um sistema de diretrios estruturado em rvore, os usurios podem acessar, alm dos seus arquivos, os arquivos de outros usurios. Por exemplo, o usurio B pode acessar os arquivos do usurio A especificando seus nomes de caminho. O usurio B pode especificar um nome de caminho absoluto ou relativo. Como alternativa, o usurio B pode mudar de diretrio corrente para que esse seja o diretrio do usurio A, e acessar os arquivos por seus nomes de arquivo. Alguns sistemas tambm permitem que um usurio defina seus prprios caminhos de pesquisa. Nesse caso, o usurio B poderia definir seu caminho de pesquisa como (1) seu diretrio local, (2) o diretrio de arquivos do sistema e (3) o diretrio do usurio A, nessa ordem. Desde que o nome de um arquivo do usurio A no entre em conflito com o nome de um arquivo ou arquivo de sistema local, ele seria chamado simplesmente por seu nome. Observe que um caminho a um arquivo em um diretrio estruturado em rvore pode ser maior do que em um diretrio de dois nveis. Para permitir que os usurios acessem programas sem ter de lembrar esses longos nomes de caminho, o sistema Macintosh automatiza a pesquisa para programas executveis. Ele mantm um arquivo, chamado "Desktop File", que contm o nome e a posio de todos os programas executveis. Quando um novo disco rgido ou disquete acrescentado ao sistema, ou a rede acessada, o sistema operacional percorre a estrutura de diretrio, procurando programas executveis no dispositivo e registrando as informaes pertinentes. Esse mecanismo suporta a funcionalidade de execuo com clique duplo descrita anteriormente. Clicar duas vezes em um arquivo faz com que seu atributo de criador seja lido e que o "Desktop File" seja pesquisado por uma entrada coincidente. Assim que essa entrada for encontrada, o programa executvel apropriado ser iniciado, com o arquivo clicado como entrada.

11.3.4 Diretrios em grafos acclicos

Considere dois programadores que estejam trabalhando em um projeto conjunto. Os arquivos associados a esse projeto podem ser armazenados em um subdiretrio, separando-os de outros projetos e dos arquivos dos dois programadores. No entanto, como os dois programadores so igualmente responsveis pelo projeto, ambos querem que o subdiretrio esteja localizado em seu prprio diretrio. O subdiretrio comum deveria ser compartilhado. Um diretrio ou arquivo compartilhado existir no sistema de arquivos em dois (ou mais) locais de uma vez. Observe que um arquivo (ou diretrio) compartilhado no igual a manter duas cpias do arquivo. Com duas cpias, cada programador pode visualizar a cpia em vez do original, mas se um programador alterar o arquivo, as alteraes no aparecero na cpia do outro. Com um arquivo compartilhado, existe apenas um arquivo real, de modo que qualquer alterao feita por uma pessoa seria imediatamente vista pela outra. Essa forma de compartilhamento particularmente importante para subdiretrios compartilhados; um novo arquivo criado por uma pessoa aparecer automaticamente em todos os subdiretrios compartilhados. Uma estrutura de rvore probe o compartilhamento de arquivos ou diretrios. Um grafo acclico, que um grafo sem ciclos, permite que os diretrios tenham subdiretrios e arquivos compartilhados (Figura 11.10). O mesmo arquivo ou subdiretrio poder estar em dois diretrios diferentes. Um grafo acclico uma generalizao natural do esquema de diretrio estruturado em rvore. Quando vrias pessoas esto trabalhando como uma equipe, todos os arquivos a serem compartilhados podem ser colocados juntos em um diretrio. Os diretrios de arquivos de usurio de todos os membros da equipe contm esse diretrio de arquivos compartilhados como um subdiretrio. Mesmo quando existe um nico usurio, a sua organizao de arquivos pode exigir que alguns arquivos sejam colocados em vrios subdiretrios diferentes. Por exemplo, um programa escrito para determinado projeto deve estar no diretrio de todos os programas e no diretrio daquele projeto. Sistemas de Arquivos 259
count words list + list rade w7

Figura 11.10 Estrutura de diretrio em grafo acclico Os arquivos e subdiretrios compartilhados podem ser implementados de vrias formas. Uma maneira :omum, exemplificada por muitos dos sistemas UNIX, criar uma nova entrada de diretrio chamada link. 'Um link , na verdade, um ponteiro para outro arquivo ou subdiretrio. Por exemplo, um link pode ser implementado como um nome de caminho absoluto ou relativo - chamado link simblico. Quando uma referncia feita a um arquivo, o diretrio pesquisado. Se a entrada do diretrio for marcada como um link, o nome do arquivo (ou diretrio) real ser fornecido. O link resolvido usando o nome de caminho para localizar o arquivo real. Os links so facilmente identificveis pelo seu formato na entrada do diretrio (ou por ter um tipo especial nos sistemas que suportam tipos); eles servem como ponteiros indiretos com nome. O sistema operacional ignora esses links quando estiver percorrendo as rvores de diretrio, para preservar a estrutura acclica do sistema. - A outra abordagem para implementar arquivos compartilhados simplesmente duplicar todas as informaes sobre eles nos dois diretrios compartilhados. Assim, as duas entradas so idnticas. Um link claramente diferente da entrada de diretrio original; portanto, as duas no so iguais. Entradas duplicadas, no entanto, tornam o original e a cpia indistinguveis. O principal problema com entradas de diretrio duplicadas manter a consistncia se o arquivo for modificado. Uma estrutura de diretrio em grafo acclico mais flexvel do que uma estrutura de rvore simples, mas tambm mais complexa. Observe que um arquivo agora pode ter mltiplos nomes de caminho absolutos. Consequentemente, diferentes nomes de arquivo podem fazer referncia ao mesmo arquivo. Essa situao semelhante ao problema de nomes alternativos para as linguagens de programao. Se estivermos tentando percorrer todo o sistema de arquivos (para encontrar um arquivo, acumular estatsticas sobre todos os arquivos ou copiar todos os arquivos para fins de backup), esse problema se torna significativo, j que no queremos percorrer as estruturas compartilhadas mais de uma vez. Outro problema envolve a excluso. Quando o espao alocado a um arquivo compartilhado pode ser

desalocado e reutilizado? Uma possibilidade remover o arquivo sempre que algum o excluir, mas essa ao poder deixar ponteiros pendentes para o arquivo agora inexistente. Pior, se os outros ponteiros de arquivo contiverem endereos reais de disco, e o espao for reutilizado depois para outros arquivos, esses ponteiros pendentes podem apontar para o meio de outros arquivos. Em um sistema no qual o compartilhamento implementado por links simblicos, essa situao um pouco mais fcil de resolver. A excluso de um link no precisa afetar o arquivo original; somente o link removido. Se a entrada de arquivo propriamente for excluda, o espao para o arquivo ser desalocado, deixando os links pendentes. Podemos pesquisar esses links e remov-los tambm, mas a menos que uma lista dos links associados seja mantida em cada arquivo, essa pesquisa pode ser cara. Como alternativa, podemos deixar os links at que ocorra uma tentativa de us-los. Nesse momento, podemos determinar que o arquivo com o nome dado pelo link no existe e, portanto, no resolver o nome do link; o acesso tratado como qualquer outro nome de arquivo ilegal. (Nesse caso, o projetista do sistema deve considerar cuidadosamente o que fazer quando um arquivo excludo ou outro arquivo com o mesmo nome criado, antes que um link 260 Sistemas Operacionais simblico ao arquivo original seja usado.) No caso do UNIX, os links simblicos so mantidos quando um arquivo excludo, e cabe ao usurio verificar se o arquivo original foi eliminado ou substitudo. Outra abordagem excluso preservar o arquivo at que todas as referncias a ele sejam excludas. Para implementar essa abordagem, devemos ter algum mecanismo para determinar que a ltima referncia ao arquivo foi excluda. Poderamos manter uma lista de todas as referncias a um arquivo (entradas de diretrio ou links simblicos). Quando um link ou uma cpia da entrada do diretrio for estabelecido, uma nova entrada ser adicionada lista de referncias do arquivo. Quando um link ou entrada de diretrio for excludo, removemos sua entrada na lista. O arquivo ser excludo quando sua lista de referncias de arquivo estiver vazia. O problema com esta abordagem o tamanho varivel e potencialmente grande da lista de referncias de arquivo. No entanto, no precisamos manter a lista inteira - precisamos manter apenas um contador do nmero de referncias. Um novo link ou entrada de diretrio incrementa o contador de referncias; excluir um link ou entrada decrementa o contador. Quando o contador for 0, o arquivo pode ser excludo; no existem referncias restantes. O sistema operacional UNIX utiliza essa abordagem para links no-simblicos, ou hard links, mantendo um contador de referncias no bloco de informaes de arquivo (ou inode, consulte a Seo 20.7.2). Ao proibir efetivamente mltiplas referncias aos diretrios, mantemos uma estrutura de grafo acclico. Para que seus usurios evitem esses problemas, alguns sistemas no permitem diretrios ou links compartilhados. Por exemplo, no MS-DOS, a estrutura de diretrio uma estrutura em rvore, em vez de um grafo acclico, evitando assim os problemas associados excluso de arquivos em uma estrutura de diretrio em grafo acclico.

11.3.5 Diretrio em grafo genrico


Um problema grave com o uso de uma estrutura de grafo acclico que difcil garantir que no existam ciclos. Se comearmos com um diretrio d\dois nveis e permitirmos que os usurios criem subdiretrios, teremos como resultado um diretrio estruturado em rvore. Deve ser razoavelmente fcil verificar que adicionar novos arquivos e subdiretrios a um orretrio estruturado em rvore existente preserva a natureza estruturada em rvore. No entanto, quando adicionamos links a um diretrio estruturado em rvore, a estrutura destruda, resultando em uma estrutura de^grafo simples (Figura 11.11). /
avi te

text mail count book book mail unhex hyp

Figura 11.11 Diretrio em grafo genrico. A principal vantagem de um grafo acclico a relativa simplicidade dos algoritmos para percorrer o grafo e determinar quando no existem mais referncias a um arquivo. Devemos evitar percorrer sees

compartilhadas de um grafo duas vezes, principalmente por motivos de desempenho. Se tivermos acabado de pesquisar um subdiretrio compartilhado importante para encontrar determinado arquivo, a segunda pesquisa ser uma perda de tempo. Se for permitida a existncia de ciclos no diretrio, devemos evitar tambm pesquisar qualquer componente duas vezes, por motivos de correo assim como desempenho. Um algoritmo mal projetado pode reSistemas de Arquivos 261 sultar em um lao infinito fazendo a pesquisa continuamente no ciclo, sem nunca terminar. Uma soluo limitar arbitrariamente o nmero de diretrios que podem ser acessados durante a pesquisa. Enfrentamos um problema semelhante quando tentamos determinar quando um arquivo pode ser excludo. Como ocorre nas estruturas de diretrio em grafo genrico, um valor de 0 no contador de referncias significa que no h mais referncias no arquivo ou diretrio e, portanto, que o arquivo pode ser excludo. No entanto, tambm possvel que o contador de referncias seja diferente de zero, quando existirem ciclos, mesmo quando no for rriaisjpssvel fazer referncia a um diretrio ou arquivo. Essa anomalia resulta da possibilidade de auto-refernq (um ciclo) na estrutura de diretrio. Nesse caso, geralmente necessrio usar um esquema de coleta de/ixp para determinar quando a referncia final foi excluda e quando o espao de disco pode ser realocado. A coleta de lixo envolve percorrer todo o sistema de arquivos, marcando tudo que pode ser acessado. Em seguida, uma segunda passada coleta tudo que no est marcado em uma lista de espao livre. (Um procedimento de marcao semelhante pode ser usado para garantir que uma busca ou pesquisa cobrir tudo no sistema de arquivos uma nica vez.) A coleta de lixo para um sistema de arquivos baseado em disco, no entanto, extremamente demorada e, assim, raramente tentada. A coleta de lixo necessria apenas por causa dos possveis ciclos no grafo. Assim, trabalhar com uma estrutura de grafo acclico muito mais fcil. A dificuldade evitar ciclos medida que novos links so adicionados estrutura. Como sabemos quando um novo link completar um ciclo? Existem algoritmos para detectar ciclos em grafos; no entanto, eles so computacionalmente caros, especialmente quando o grafo est em disco. Geralmente, por esse motivo, as estruturas de diretrios em rvore so mais comuns do que as de grafos acclicos.

11.4 Proteo
Quando as informaes so mantidas em um sistema de computao, uma importante preocupao a confiabilidade, ou ficar livre de danos fsicos. Outra a proteo, ou no permitir acesso indevido. A confiabilidade geralmente obtida por cpias duplicadas dos arquivos. Muitos computadores tm programas de sistemas que copiam automaticamente (ou por meio da interveno do operador do computador) os arquivos do disco para fita em intervalos regulares (uma vez por dia, semana ou ms) para manter uma cpia em caso de destruio acidental ou maliciosa do sistema de arquivos. Os sistemas de arquivos podem ser danificados por problemas de hardware (tais como erros de leitura e escrita), surtos ou falhas de energia, choques da cabea de leitura, sujeira, temperaturas extremas ou vandalismo. Os arquivos podem ser excludos acidentalmente. Os bugs no software do sistema de arquivos tambm podem fazer com que haja perda do contedo de arquivos. A confiabilidade tratada no Captulo 13. A proteo pode ser provida de muitas formas. Para um sistema pequeno, monousurio, podemos remover os disquetes fisicamente e coloc-los em um gabinete de arquivos ou gaveta. Em um sistema multiusurio, outros mecanismos so necessrios.

11.4.1 Tipos de acesso


A necessidade de proteger arquivos resultado direto da capacidade de acessar arquivos. Nos sistemas que no permitem acesso aos arquivos de outros usurios, a proteo no necessria. Assim, um extremo seria fornecer proteo completa proibindo o acesso. O outro extremo fornecer acesso livre sem proteo. As duas abordagens so extremas demais para uso geral. O que necessrio o acesso controlado. Os mecanismos de proteo fornecem acesso controlado limitando os tipos de acesso a arquivo que podem

ser feitos. O acesso permitido ou negado dependendo de vrios fatores, um dos quais o tipo de acesso solicitado. Vrios tipos distintos de operaes podem ser controladas: Ler: Ler um arquivo. Escrever: Escrever ou reescrever um arquivo. Executar: Carregar o arquivo na memria e execut-lo. Anexar: Escrever novas informaes no final do arquivo. Excluir: Excluir o arquivo e liberar seu espao para possvel reutilizao. 262 Sistemas Operacionais Listar: Listar o nome e os atributos do arquivo. Outras operaes - tais como renomear, copiar ou editar o arquivo - tambm podem ser controladas. Para muitos sistemas, no entanto, essas funes de mais alto nvel (tais como copiar) podem ser implementadas por um programa de sistema que faz chamadas de baixo nvel ao sistema. A proteo fornecida apenas no nvel inferior. Por exemplo, copiar um arquivo pode ser implementado simplesmente por uma sequncia de pedidos de leitura. Nesse caso, um usurio com acesso de leitura tambm poder fazer o arquivo ser copiado, impresso etc. Muitos mecanismos diferentes de proteo tm sido propostos. Cada esquema tem suas vantagens e desvantagens, por isso voc deve selecionar aquele apropriado para o uso pretendido. Um sistema de computao pequeno que seja usado apenas por poucos membros de um grupo de pesquisa talvez no precise dos mesmos tipos de proteo que um computador de uma grande corporao utilizado para realizar operaes de pesquisa, finanas e de pessoal. Nesta seo, discutimos a proteo e como ela se relaciona com o sistema de arquivos. No Captulo 18, o tratamento completo do problema de proteo apresentado.

11.4.2 Listas de acesso e grupos


A abordagem mais comum ao problema de proteo tornar o acesso dependente da identidade do usurio. Vrios usurios podem precisar de diferentes tipos de acesso a um arquivo ou diretrio. O esquema mais geral para implementar o acesso dependente da identidade associar a cada arquivo e diretrio uma lista de acesso, especificando para cada nome de usurio listado os tipos de acesso permitidos. Quando um usurio solicita acesso a determinado arquivo, o sistema operacional verifica a lista de acesso associada quele arquivo. Se o usurio estiver listado para o acesso solicitado, o acesso ser permitido. Caso contrrio, ocorrer uma violao de proteo, e o job do usurio no receber acesso ao arquivo. ^ O principal problema com as listas de acesso o seu tamanho. Se queremos que todos leiam um arquivo, preciso listar todos os usurios e dar a eles acesso de leitura. Essa tcnica tem duas consequncias indesejveis: 1. Construir uma lista desse tipo pode ser uma tarefa entediante e pouco compensadora, especialmente se no soubermos de" antemo qual a lista de usurios no sistema. 2. A entrada de diretrio que anteriormente tinha tamanho fixo agora precisa ser de tamanho varivel, resultando em uma gerncia de espao mais complicada. Podemos resolver esses problemas usando uma verso condensada da lista de acesso. Para condensar o tamanho da lista de acesso, muitos sistemas reconhecem trs classificaes de usurios em relao a cada arquivo: Proprietrio: O usurio que criou o arquivo o proprietrio. Grupo: Um conjunto de usurios que compartilha o arquivo e precisa de acesso semelhante um grupo, ou grupo de trabalho. Universo: Todos os outros usurios no sistema constituem o universo. Como exemplo, considere uma pessoa, Sara, que est escrevendo um livro novo. Ela contratou trs alunos de ps-graduao (Jim, Dawn e Jill) para ajud-la no projeto. O texto do livro mantido em um arquivo chamado book. A proteo associada a esse arquivo a seguinte: Sara deve ser capaz de invocar todas as operaes sobre o arquivo. Jim, Dawn e Jill s devem ser capazes de ler e gravar o arquivo; no devem ter permisso para excluir o arquivo. Todos os outros usurios devem ter permisso para ler o arquivo, mas no para grav-lo ou exclu-lo. (Sara est interessada em deixar o maior nmero possvel de pessoas lerem o texto de modo que ela possa obter o retorno apropriado.)

Para chegar a essa proteo, preciso criar um novo grupo, como text, com os membros Jim, Dawn e Jill. O nome do grupo text deve ser ento associado ao arquivo book, e o direito de acesso deve ser definido de acordo com a poltica que descrevemos. Sistemas de Arquivos 263 Observe que, para esse esquema funcionar adequadamente, os membros do grupo devem ser muito bem controlados. Esse controle pode ser alcanado de vrias formas. Por exemplo, no sistema UNIX, os grupos podem ser criados e modificados apenas pelo gerente da instalao (ou qualquer superusurio). Assim, esse controle obtido atravs da interao humana. O sistema VMS utiliza listas de acesso. Com essa classificao de proteo mais limitada, s precisamos de trs campos para definir a proteo. Cada campo geralmente uma coleo de bits, cada qual permite ou impede o acesso associado a ele. Por exemplo, o sistema UNIX define trs campos de 3 bits cada: rwx, onde r controla o acesso de leitura (read), w controla o acesso de escrita (write) ex controla a execuo (execution). Campos separados so mantidos para o proprietrio do arquivo, para o grupo do arquivo e para todos os outros usurios. Nesse esquema, 9 bits por arquivo so necessrios para registrar as informaes de proteo. Assim, no nosso exemplo, os campos de proteo para o arquivo book so os seguintes: para o proprietrio Sara, todos os 3 bits esto ativos; para o grupo text, os bits r e w esto ativos e para o universo, apenas o bit r est ativo. Observe, no entanto, que esse esquema no to geral quanto o esquema de lista de acesso. Para ilustrar nossa posio, vamos voltar ao exemplo do livro. Vamos supor que Sara tenha uma discusso sria com Jason e agora queira exclu-lo da lista de pessoas que podem ler o texto. Ela no pode fazer isso usando o esquema de proteo bsico definido.

11.4.3 Outras abordagens de proteo


Existem outras abordagens ao problema de proteo. Uma delas associar uma senha com cada arquivo. Assim como o acesso a um sistema de computador por si s geralmente controlado por uma senha, o acesso a cada arquivo pode ser controlado por uma senha. Se as senhas forem escolhidas aleatoriamente e alteradas com frequncia, esse esquema pode ser eficaz na limitao do acesso a um arquivo apenas aos usurios que conheam a senha. Existem, no entanto, vrias desvantagens nesse esquema. Em primeiro lugar, se associarmos uma senha separada a cada arquivo, o nmero de senhas que um usurio deve se lembrar pode aumentar muito, tornando o esquema impraticvel. Se apenas uma senha for usada para todos os arquivos, ento, assim que ela for descoberta, todos os arquivos sero acessveis. Alguns sistemas (por exemplo, o TOPS-20) permitem que um usurio associe uma senha com um subdiretrio, em vez de com urruarquivo individual, para lidar com esse problema. O sistema operacional VM/CMS da IBM permite trs senhas para um minidisco: uma para acesso de leitura, outra para escrita e outra para multiescrita. Em segundo lugar, geralmente apenas uma senha est associada a cada arquivo. Assim, a proteo funciona com base em tudo ou nada. Para fornecer proteo em um nvel mais detalhado, devemos usar mltiplas senhas. A proteo de arquivo limitada tambm est disponvel em sistemas monousurio, como o MS-DOS e o sistema operacional do Macintosh. Esses sistemas operacionais, quando foram projetados, basicamente ignoravam o problema de proteo. Agora, no entanto, eles esto sendo colocados em redes nas quais o compartilhamento de arquivos e a comunicao so necessrios, de modo que mecanismos de proteo esto sendo preparados para eles. E quase sempre mais fcil incluir um recurso no projeto original de um sistema operacional do que adicionar um recurso a um sistema existente. Tais atualizaes geralmente so pouco eficazes e no so transparentes. Em uma estrutura de diretrio de multinvel, precisamos no s proteger os arquivos individuais, mas tambm proteger colees de arquivos contidos em um subdiretrio; ou seja, precisamos fornecer um mecanismo para a proteo de diretrio. As operaes de diretrio que precisam ser protegidas so ligeiramente diferentes das operaes de arquivo. Devemos controlar a criao e excluso de arquivos em um diretrio. Alm disso, provavelmente vamos querer controlar se um usurio pode ou no determinar a existncia de um arquivo no diretrio. s vezes, o conhecimento da existncia e do nome de um arquivo

pode ser significativo por si s. Assim, listar o contedo de um diretrio deve ser uma operao protegida. Portanto, se um nome de caminho fizer referncia a um arquivo em um diretrio, o usurio dever ter acesso ao diretrio e ao arquivo. Nos sistemas em que os arquivos podem ter vrios nomes de caminho (como grafos acclicos ou genricos), os usurios podem ter diferentes direitos de acesso a um arquivo, dependendo dos nomes de caminho utilizados. 264 Sistemas Operacionais

11.4.4 Um exemplo: UNIX


No sistema UNIX, a proteo de diretrio tratada como proteo de arquivo. Ou seja, associados com cada subdiretrio esto trs campos - proprietrio, grupo e universo - cada qual consistindo nos 3 bits rwx. Assim, um usurio s pode listar o contedo de um subdiretrio se o bit r estiver ativo no campo apropriado. Da mesma forma, um usurio poder mudar seu diretrio corrente para outro diretrio (digamos foo) somente se o bit x associado com o subdiretrio foo estiver ativo no campo apropriado. Um exemplo de listagem de diretrio de um ambiente UNIX est apresentado na Figura 11.12. O primeiro campo descreve a proteo de arquivo ou diretrio. Um d como primeiro caractere indica um subdiretrio. Tambm indicado est o nmero de links para o arquivo, o nome do proprietrio, o nome do grupo, o tamanho do arquivo em unidades de bytes, a data de criao e finalmente o nome do arquivo (com extenso opcional). -rw-rw-rdrwx drwxrwxr-x drwxrwx -rw-r-r-rwxr-xr-x drw-x-x drwx drwxrwxrwx lpbg 5pbg 2pbg 2pbg lpbg lpbg 4pbg 3pbg 3 pbg staff staff staff student staff staff faculty staff staff 31200 512 512 512 9423 20471 512 1024 512 Sep3 08:30 Jul 8 09:33 Jul 8 09:35 Aug3 14:13

Feb 24 1998 Feb 24 1998 Jul 31 10:31 Aug 29 06:52 Jul 8 09:35 intro.ps private/ doe/ student-proj/ program.c program lib/ mail/ test/ Figura 11.12 Um exemplo de listagem de diretrios.

.5 Estrutura do sistema de arquivos


Os discos so a principal parte do armazenamento secundrio no qual um sistema de arquivos mantido. Para melhorar a eficincia de I/O, realizamos transferncias entre a memria e o disco em unidades de blocos. Cada bloco tem um ou mais setores. Os setores em diferentes unidades de disco variam de 32 bytes a 4.096 bytes; geralmente, eles tm 512 bytes. Os discos tm duas caractersticas importantes que os tornam um meio conveniente para armazenar mltiplos arquivos: 1. Eles podem ser regravados; possvel ler um bloco do disco, modificar o bloco e grav-lo de volta na mesma posio. 2. Podemos acessar diretamente qualquer bloco de informaes no disco. Assim, simples acessar qualquer arquivo quer sequencial ou aleatoriamente, e alternar de um arquivo a outro requer apenas mover as cabeas de leitura e escrita e esperar que o disco gire. O Captulo 13 discute a estrutura do disco.

11.5.1. Organizao do sistema de arquivos


Para fornecer um acesso eficiente e conveniente ao disco, o sistema operacional impe um sistema de arquivos para que os dados sejam facilmente armazenados, localizados e recuperados. Desenvolver um sistema de arquivos gera dois problemas de projeto diferentes. O primeiro problema definir como o sistema de arquivos deve se apresentar ao usurio. Essa tarefa envolve a definio de um arquivo e seus atributos, das operaes permitidas em um arquivo e da estrutura de diretrio para organizar os arquivos. Em seguida, os algoritmos e as estruturas de dados devem ser criados para mapear o sistema de arquivos lgico nos dispositivos fsicos de armazenamento secundrio. O sistema de arquivos por si s geralmente composto por muitos nveis diferentes. A estrutura apresentada na Figura 11.13 um exemplo de um projeto em camadas. Cada nvel no projeto utiliza os recursos dos nveis inferiores para criar novos recursos a serem utilizados pelos nveis superiores.
programas aplicativos

Sistemas de Arquivos 265


sistema de arquivos lgico mdulo de organizao de arquivos sistema de arquivos bsico controle de l/O

dispositivos Figura 11.13 Sistema de arquivos em camadas. O nvel mais baixo, o controle de I/O, consiste em drivers de dispositivo e rotinas de tratamento de interrupes que transferem informaes entre a memria e o sistema de disco. Um driver de dispositivo pode ser visto como um tradutor. Sua entrada consiste em comandos de alto nvel, tais como "retrieve block 123". Sua sada consiste em instrues especficas de hardware, de baixo nvel, que so utilizadas pela controladora do hardware, que faz a interface do dispositivo de entrada/sada com o resto do sistema. O driver de dispositivo geralmente escreve padres especficos de bits em posies especiais na memria da controladora de I/O para inform-la sobre a posio do dispositivo onde atuar e que aes devem ser tomadas. Os drivers de

dispositivo e a infra-estrutura de I/O so discutidos no Captulo 12. O sistema de arquivos bsico s precisa emitir comandos genricos ao driver de dispositivo apropriado para ler e gravar blocos fsicos no disco. Cada bloco fsico identificado pelo seu endereo numrico de disco (por exemplo, unidade 1, cilindro 73, trilha 2, setor 10). O mdulo de organizao de arquivos conhece os arquivos e seus blocos lgicos, assim como os blocos fsicos. Ao conhecer o tipo de alocao de arquivo usada e a posio do arquivo, o mdulo de organizao de arquivos pode traduzir os endereos de bloco lgico em endereos de bloco fsico para que o sistema de arquivos bsico faa a transferncia. Cada bloco lgico de arquivo numerado de 0 (ou 1) a N, enquanto os blocos fsicos contendo os dados geralmente no correspondem aos nmeros lgicos, por isso h necessidade de traduo para localizar cada bloco. O mdulo de organizao de arquivos tambm inclui um gerenciador de espao livre, que rastreia os blocos no-alocados e fornece esses blocos ao mdulo de organizao de arquivos quando necessrio. Finalmente, o sistema de arquivos lgico utiliza a estrutura de diretrio para fornecer ao mdulo de organizao de arquivos as informaes necessrias, considerando um nome de arquivo simblico. O sistema de arquivos lgico tambm responsvel pela proteo e segurana, conforme discutido na Seo 11.4 e que ser abordado em maiores detalhes no Captulo 18. Para criar um novo arquivo, um programa aplicativo chama o sistema de arquivos lgico. Este, por sua vez, conhece o formato das estruturas de diretrio. Para criar um novo arquivo, ele l o diretrio apropriado na memria, atualiza-o com a nova entrada e o grava de volta no disco. Alguns sistemas operacionais, incluindo o UNIX, tratam um diretrio exatamente como um arquivo - com um campo de tipo indicando que um diretrio. Outros sistemas operacionais, incluindo o Windows NT, implementam chamadas ao sistema separadas para arquivos e diretrios e tratam os diretrios como entidades separadas dos arquivos. Quando um diretrio tratado como um arquivo especial, o sistema de arquivos lgico pode chamar o mdulo de organizao de arquivos para mapear as operaes de I/O do diretrio em nmeros de bloco de disco, que so passados para o sistema de arquivos bsico e o sistema de controle de I/O. Agora que o arquivo foi criado, ele pode ser usado para I/O. Para cada operao de I/O, a estrutura de diretrio poderia ser pesquisada para encontrar o arquivo, seus parmetros poderiam ser verificados, seus blocos de dados examinados e, finalmente, a operao nesses blocos de dados realizada. Cada operao envolve um 266 Sistemas Operacionais alto custo. Em vez disso, antes que o arquivo seja utilizado para procedimentos de I/O, ele precisa ser aberto. Quando um arquivo aberto, a estrutura de diretrio pesquisada para encontrar a entrada de arquivo desejada. Partes da estrutura de diretrio so armazenadas em cache para acelerar as operaes de diretrio. Assim que o arquivo encontrado, as informaes a ele associadas - como tamanho, proprietrio, permisses de acesso e posies dos blocos de dados - so copiadas para uma tabela na memria. Essa tabela de arquivos abertos contm informaes sobre todos os arquivos abertos no momento (Figura 11.14). A primeira referncia a um arquivo (normalmente open) faz com que a estrutura do diretrio seja pesquisada e que a entrada de diretrio para esse arquivo seja copiada para a tabela de arquivos abertos. O ndice nessa tabela devolvido ao programa de usurio, e todas as referncias futuras so feitas atravs do ndice em vez do nome simblico. O nome dado ao ndice varia. Os sistemas UNIX referem-se a ele como descritor de arquivo (file descriptor), o Windows NT como handle de arquivo e os outros sistemas como bloco de controle de arquivo. Consequentemente, desde que o arquivo no esteja fechado, todas as operaes de arquivo so feitas na tabela de arquivos abertos. Quando o arquivo fechado por todos os usurios que o abriram, as

informaes do arquivo atualizado so copiadas para a estrutura de diretrio baseada no disco. ndice nome de arquivo permisses datas de acesso ponteiro para o bloco de disco

TEST.C MAIL.TXT rw rw rw rw
-> ->

Figura 11.14 Uma tabela de arquivos abertos tpica. Alguns sistemas complicam esse esquema ainda mais usando multinvel de tabelas na memria. Por exemplo, no sistema de arquivos do UNIX BSD, cada processo tem uma tabela de arquivos abertos que armazena uma lista de ponteiros, indexados por descritor. Os ponteiros levam a uma tabela de arquivos abertos em todo o sistema. Essa tabela contm informaes sobre a entidade subjacente que est aberta. Para arquivos, ela aponta para uma tabela de inodes ativos. Para outras entidades, como conexes de rede e dispositivos, ela aponta para informaes de acesso semelhantes. A tabela de inodes ativos um cache em memria dos inodes em uso no momento, e inclui os campos de ndice de inode que apontam para os blocos de dados no disco. Assim que um arquivo aberto, tudo est na memria para acesso rpido por qualquer processo que acessa o arquivo, menos os blocos de dados reais. Na verdade, open primeiro pesquisa a tabela de arquivos abertos para ver se o arquivo j est em uso por outro processo. Se o arquivo estiver em uso, uma entrada na tabela local de arquivos abertos criada apontando para a tabela global de arquivos abertos. Se o arquivo no estiver em uso, o inode copiado para a tabela de inodes ativos e so criadas uma nova entrada global e uma nova entrada local. O sistema UNIX BSD tpico na sua forma de utilizar os caches sempre que operaes de I/O em disco puderem ser economizadas. Sua taxa mdia de acerto de cache de 85% mostra que essas tcnicas so de implementao vlida. O sistema UNIX BSD est descrito no Captulo 20. A tabela de arquivos abertos est detalhada na Seo 11.1.2.

11.5.2 Montagem do sistema de arquivos


Assim como um arquivo deve estar aberto antes de ser usado, um sistema de arquivos deve ser montado antes de poder estar disponvel aos processos no sistema. O procedimento de montagem simples. O sistema operacional recebe o nome do dispositivo e a posio na estrutura de arquivos na qual anexar o sistema de arquivos Sistemas de Arquivos 267 (chamado ponto de montagem). Por exemplo, em um sistema UNIX, o sistema de arquivos que contm os diretrios de trabalho dos usurios pode ser montado como /home; em seguida, para acessar a estrutura de diretrio naquele sistema de arquivos, precedemos os nomes de diretrios com /home, como em /home/jane. Montar esse sistema de arquivos em lusers permitiria ao usurio utilizar o nome de caminho /users/jane para alcanar o mesmo diretrio. Em seguida, o sistema operacional verifica se o dispositivo contm um sistema de arquivos vlido. Isso feito pedindo ao driver de dispositivo para ler o diretrio do dispositivo e verificar se o diretrio tem o formato esperado. Finalmente, o sistema operacional registra na sua estrutura de diretrio que um sistema de arquivos est montado no ponto de montagem especificado. Esse esquema permite que o sistema operacional percorra sua estrutura de diretrio, alternando entre os sistemas de arquivos, conforme apropriado. Considere as aes do Sistema Operacional do Macintosh. Sempre que o sistema encontra um disco pela primeira vez (os discos rgidos so encontrados no momento de inicializao, os disquetes so vistos quando so inseridos na unidade), o Sistema Operacional do Macintosh pesquisa o sistema de arquivos no dispositivo. Se encontrar um, ele automaticamente montar o sistema de arquivos no nvel da raiz, adicionando um cone de pasta na tela identificada com o nome do sistema de arquivos (conforme armazenado no diretrio do dispositivo). O usurio pode ento clicar no cone e assim exibir o sistema de arquivos recm-montado.

A montagem de sistemas de arquivos discutida em maiores detalhes nas Sees 17.6 e 20.7.5.

11.6 Mtodos de alocao


A natureza de acesso direto dos discos permite flexibilidade na implementao de arquivos. Em quase todos os casos, muitos arquivos sero armazenados no mesmo disco. O principal problema como alocar espao a esses arquivos de modo que o espao em disco seja utilizado com eficcia e os arquivos sejam acessados rapidamente. Existem trs mtodos principais muito utilizados para alocar espao em disco: contguo, encadeado e indexado. Cada mtodo tem suas vantagens e desvantagens. Da mesma forma, alguns sistemas (tais como RDOS da Data General para sua linha de computadores Nova) suportam todos os trs mtodos. Mais comumente, um sistema usar um mtodo particular para todos os arquivos.

11.6.1 Alocao contgua


O mtodo de alocao contgua requer que cada arquivo ocupe um conjunto de blocos contguos no disco. Os endereos de disco definem uma ordenao linear no disco. Observe que, com essa ordenao, considerando que apenas um job est acessando o disco, um acesso ao bloco b + 1 depois do bloco b normalmente no exige movimento da cabea do disco. Quando movimento necessrio (do ltimo setor de um cilindro para o primeiro setor do prximo cilindro), s de uma trilha. Assim, o nmero de buscas de disco necessrias para acessar arquivos alocados contiguamente mnimo, assim como o tempo de busca quando uma busca finalmente necessria. O sistema operacional VM/CMS da IBM utiliza alocao contgua porque essa abordagem fornece um bom desempenho. A alocao contgua de um arquivo definida pelo endereo de disco (do primeiro bloco) e tamanho (em unidades de blocos). Se o arquivo comear na posio b e tiver n blocos de comprimento, ele ocupar os blocos fr, b + l,b + 2,...,b + - 1 . A entrada de diretrio para cada arquivo indica o endereo do bloco de incio e o tamanho da rea alocada para esse arquivo (Figura 11.15). Acessar um arquivo que tenha sido alocado de forma contgua fcil. Para acesso sequencial, o sistema de arquivos lembra do endereo de disco do ltimo bloco referenciado e, quando necessrio, l o prximo bloco. Para acesso direto ao bloco / de um arquivo que comea no bloco b, podemos acessar imediatamente o bloco b + /'. Portanto, tanto o acesso sequencial quanto o direto podem ser suportados pela alocao contgua. Uma dificuldade com a alocao contgua encontrar espao para um novo arquivo. A implementao do sistema de gerncia de espao livre, discutida na Seo 11.7, determina como essa tarefa realizada. Qualquer sistema de gerncia pode ser usado, mas alguns so mais lentos do que outros. O problema de alocao contgua de espao de disco pode ser considerado uma aplicao especfica do problema de alocao dinmica de memria genrica discutido na Seo 9.3, que consiste em como atender um pedido de tamanho n de uma lista de blocos de memria livres. As estratgias de first fit e best fit so as 268 Sistemas Operacionais
tamanho 2 3 6 4 2

Figura 11.15 Alocao contgua de espao em disco. mais comuns que podem ser usadas para selecionar um bloco de memria livre do conjunto de blocos de memria disponveis. As simulaes indicam que tanto uma quanto a outra so mais eficientes do que a estratgia de worst fit em termos de utilizao de tempo e memria. First fit e best fit tm desempenho semelhante em termos de utilizao de memria, mas first fit geralmente mais rpido. Esses algoritmos sofrem do problema de fragmentao externa. A medida que os arquivos so alocados e excludos, o espao livre em disco dividido em pequenas partes. A fragmentao externa existe sempre que o espao livre dividido em pedaos. Torna-se um problema quando o maior pedao contguo insuficiente para um pedido; o armazenamento fragmentado em uma srie de blocos livres, nenhum dos quais grande o suficiente para armazenar dados. Dependendo do tamanho total de armazenamento em disco e do tamanho mdio dos arquivos, a fragmentao externa pode ser um problema mais ou menos grave.

Alguns sistemas de microcomputador mais antigos usavam a alocao contgua em disquetes. Para evitar a perda de quantidades significativas de espao em disco devido fragmentao externa, o usurio tinha de executar uma rotina de recompactao que copiava todo o sistema de arquivos para outro disquete ou para uma fita. O disquete de origem era ento completamente liberado, criando um grande espao livre contguo. A rotina ento copiava os arquivos de volta para o disquete, alocando espao contguo desse grande bloco de armazenamento. Esse esquema efetivamente compacta todo o espao livre em um espao contguo, resolvendo o problema de fragmentao. O custo dessa compactao o tempo. O custo de tempo particularmente grave para grandes discos rgidos que utilizam alocao contgua, onde compactar todo o espao pode levar horas e talvez seja necessrio semanalmente. Durante esse tempo indisponvel, a operao normal do sistema normalmente no permitida, de modo que essa compactao evitada a todo custo em mquinas de produo. Existem outros problemas com a alocao contgua. Um problema importante determinar quanto espao necessrio para um arquivo. Quando o arquivo criado, o total de espao que ser necessrio precisar ser encontrado e alocado. Como o criador (programa ou pessoa) sabe o tamanho do arquivo a ser criado? Em alguns casos, essa determinao pode ser razoavelmente simples (copiar um arquivo existente, por exemplo); em geral, no entanto, o tamanho de um arquivo de sada pode ser difcil de estimar. Se alocarmos pouco espao para um arquivo, talvez esse arquivo no possa ser estendido. Especialmente com a estratgia de alocao best-fit, o espao nos dois lados do arquivo pode estar em uso. Portanto, no possvel tornar o arquivo maior. Existem ento duas possibilidades. Primeiro, o programa de usurio pode ser encerrado, com uma mensagem de erro apropriada. O usurio dever ento alocar mais espao e executar o programa novamente. Essas execues repetidas podem ser caras. Para evit-las, o usurio normalmente superestimar a quantidade de espao necessria, resultando em considervel espao desperdiado.
count

I 2Q 3Q
f 4D

5Q 6Q 7Q

tr arquivo count tr mail list f diretrio incio 0 14 19 28 6

Sistemas de Arquivos 269 A outra possibilidade encontrar um bloco livre maior, para copiar o contedo do arquivo para o novo espao e liberar o espao anterior. Essa srie de aes pode ser repetida enquanto houver espao, embora tambm seja muito demorada. Observe, no entanto, que nesse caso, o usurio no precisa ser informado explicitamente sobre o que est acontecendo; o sistema continua apesar do problema, embora cada vez mais lento. Mesmo que a quantidade de espao total necessria para um arquivo seja conhecida de antemo, a pr-alocao pode ser ineficiente. Um arquivo que cresce lentamente em um longo perodo (meses ou anos) deve receber espao suficiente para seu tamanho final, embora boa parte desse espao fique sem uso durante um longo perodo. O arquivo, portanto, tem uma grande quantidade de fragmentao interna. Para evitar vrias dessas desvantagens, alguns sistemas operacionais utilizam um esquema de alocao contgua modificado, no qual um pedao de espao contguo alocado inicialmente e, em seguida, quando essa quantidade no grande o suficiente, outro pedao de espao contguo, uma extenso, adicionada alocao inicial. A posio dos blocos de um arquivo registrada como uma posio e um contador de blocos, mais uma ligao ao primeiro bloco da prxima extenso. Em alguns sistemas, o proprietrio do arquivo pode definir o tamanho da zona de extenso, mas essa definio resultar em ineficincias caso o proprietrio esteja incorreto. A fragmentao interna ainda poder ser um problema se as extenses forem muito grandes, e a

fragmentao externa poder ser um problema medida que as extenses de tamanho varivel so alocadas e desalocadas.

11.6.2 Alocao encadeada


A alocao encadeada resolve todos os problemas de alocao contgua. Com a alocao encadeada, cada arquivo uma lista encadeada de blocos de disco; os blocos de disco podem estar dispersos em qualquer parte do disco. O diretrio contm um ponteiro ao primeiro e ltimo blocos do arquivo. Por exemplo, um arquivo de cinco blocos pode comear no bloco 9, continuar no bloco 16, depois bloco 1, bloco 10 e finalmente bloco 25 (Figura 11.16). Cada bloco contm um ponteiro ao prximo bloco. Esses ponteiros no so disponibilizados para o usurio. Assim, se cada bloco tiver 512 bytes, e um endereo de disco (o ponteiro) requer 4 bytes, ento o usurio ver blocos de 508 bytes. Para criar um novo arquivo, simplesmente criamos uma nova entrada no diretrio. Com a alocao encadeada, cada entrada de diretrio tem um ponteiro ao primeiro bloco de disco do arquivo. Esse ponteiro inicializado para nil (o valor de fim de lista) para significar um arquivo vazio. O campo de tamanho tambm ajustado para 0. Uma escrita no arquivo faz com que um bloco livre seja encontrado atravs do sistema de gerncia de espao livre, e esse novo bloco ento gravado e encadeado no final do arquivo. Para ler um arquivo, simplesmente fazemos a leitura dos blocos seguindo os ponteiros de bloco a bloco. 28n29D30D3lD Figura 11.16 Alocao encadeada de espao em disco. 270 Sistemas Operacionais No existe fragmentao externa com alocao encadeada, e podemos usar qualquer bloco livre na lista de espao livre para atender a um pedido. Observe tambm que no h necessidade de declarar o tamanho de um arquivo quando esse arquivo criado. Um arquivo pode continuar a crescer desde que hajam blocos livres. Consequentemente, nunca ser necessrio compactar espao em disco. Entretanto, a alocao encadeada possui desvantagens tambm. O principal problema que ela pode ser usada efetivamente apenas para arquivos de acesso sequencial. Para encontrar o bloco / de um arquivo, preciso comear no incio desse arquivo e seguir os ponteiros at chegar ao bloco i. Cada acesso a um ponteiro requer uma leitura de disco e, s vezes, uma busca no disco. Consequentemente, ineficiente suportar uma capacidade de acesso direto para arquivos com alocao encadeada. Outra desvantagem da alocao encadeada o espao necessrio para os ponteiros. Se um ponteiro precisar de 4 bytes de um bloco de 512 bytes, ento 0,78% do disco estar sendo usado para ponteiros em vez de para informaes. Cada arquivo requer um pouco mais de espao do que seria necessrio de outro modo. A soluo normal para esse problema seria agrupar blocos em mltiplos, chamados clusters, e alocar clusters em vez de blocos. Por exemplo, o sistema de arquivos pode definir um cluster como 4 blocos, e operar no disco apenas em unidades de cluster. Os ponteiros ento utilizam uma percentagem bem menor do espao em disco do arquivo. Esse mtodo permite que o mapeamento de bloco lgico em fsico permanea simples, mas melhora o throughput de disco (menos buscas da cabea do disco) e diminui o espao necessrio para a alocao de blocos e a gerncia da lista de espao livre. O custo dessa abordagem um aumento na fragmentao interna, porque mais espao ser desperdiado se um cluster estiver parcialmente cheio do que quando um bloco estiver parcialmente cheio. Os clusters podem melhorar o tempo de acesso ao disco para muitos outros algoritmos, por isso so usados na maioria dos sistemas operacionais. Outro problema a confiabilidade. Como os arquivos so mantidos encadeados por ponteiros dispersos em todo o disco, considere o que aconteceria se um ponteiro fosse perdido ou danificado. Um bug no software do sistema operacional ou uma falha no hardware de disco poderia resultar na escolha do ponteiro errado. Esse erro resultaria em um encadeamento na lista de espao livre ou em outro arquivo. As solues parciais so listas de encadeamento duplo ou armazenar o nome de arquivo e o nmero de bloco relativo em cada bloco; no entanto, esses esquemas requerem ainda mais custo para cada arquivo. Uma variao importante no mtodo de alocao encadeada o uso de uma tabela de alocao de arquivos (File Allocation Table - FAT). Esse mtodo simples mas eficiente de alocao de espao em disco usado

pelos sistemas operacionais MS-DOS e OS/2. Uma seo de disco no incio de cada partio reservada para conter a tabela. A tabela tem uma entrada para cada bloco de disco, e indexada pelo nmero de bloco. A FAT usada como uma lista encadeada. A entrada de diretrio contm o nmero de bloco do primeiro bloco do arquivo. A entrada da tabela indexada pelo nmero de bloco contm o nmero do prximo bloco no arquivo. Essa cadeia continua at o ltimo bloco, que tem um valor especial "fim-de-arquivo" como entrada na tabela. Blocos no usados so indicados por um valor 0. Alocar um novo bloco a um arquivo uma simples questo de encontrar a primeira entrada na tabela com valor 0, e substituir o valor fim-de-arquivo anterior pelo endereo do novo bloco. O 0 ento substitudo pelo valor fim-de-arquivo. Um exemplo ilustrativo a estrutura FAT da Figura 11.17 para um arquivo que consiste nos blocos de disco 217, 618 e 339. Observe que o esquema de alocao FAT pode resultar em um nmero significativo de buscas da cabea de disco, a menos que haja cache da FAT. A cabea do disco deve mover-se para o incio da partio para ler a FAT e encontrar o local do bloco em questo, depois mover-se para a posio do bloco propriamente dito. Na pior das hipteses, as duas movimentaes ocorrem para cada um dos blocos. Uma vantagem que o tempo de acesso aleatrio melhorado, porque a cabea do disco pode encontrar a posio de qualquer bloco lendo as informaes na FAT.

11.6.3 Alocao indexada


A alocao encadeada resolve os problemas de fragmentao externa e de declarao de tamanho da alocao contgua. No entanto, na ausncia de FAT, a alocao encadeada no pode suportar acesso direto eficiente, j que os ponteiros aos blocos esto dispersos nos prprios blocos em todo o disco e precisam ser recuperados em ordem. A alocao indexada resolve esse problema reunindo todos os ponteiros em um s local: o bloco de ndice. Sistemas de Arquivos 271
entrada de diretrio test 217 bloco de incio ne de blocos de disco -1 0 217 618 -1 618 fim de arquivo 339 FAT

Figura 11.17 Tabela de alocao de arquivos. Cada arquivo tem seu prprio bloco de ndice, que um vetor de endereos de bloco de disco. A entrada / no bloco de ndice aponta para o bloco i do arquivo. O diretrio contm o endereo do bloco de ndice (Figura 11.18). Para ler o bloco i, usamos o ponteiro na entrada / do bloco de ndice para encontrar e ler o bloco desejado. Esse esquema semelhante ao esquema de paginao descrito no Captulo 9.
diretrio

Figura 11.18 Alocao indexada de espao de disco. Quando o arquivo criado, todos os ponteiros no bloco de ndice so definidos como nil. Quando o bloco i gravado pela primeira vez, um bloco obtido do gerenciador de espao livre e o seu endereo colocado na entrada i do bloco de ndice. A alocao indexada suporta o acesso direto, sem sofrer de fragmentao externa, porque qualquer bloco livre no disco pode satisfazer um pedido por mais espao. A alocao indexada sofre de desperdcio de espao. O custo dos ponteiros do bloco de ndice geralmente maior do que o custo dos ponteiros da alocao encadeada. Considere um caso comum no qual temos um arquivo com apenas um ou dois blocos. Com a alocao encadeada, perdemos o espao de apenas um ponteiro por bloco (um ou dois ponteiros). Com a alocao indexada, um bloco de ndice inteiro dever ser alocado, mesmo se apenas um ou dois ponteiros sero no-nil. 272 Sistemas Operacionais Este ponto levanta a questo de qual deve ser o tamanho de um bloco de ndice. Todo arquivo deve ter um bloco de ndice, por isso esse bloco deve ser o menor possvel. Entretanto, se o bloco de ndice for

pequeno demais, ele no poder conter ponteiros suficientes para um arquivo grande, e um mecanismo dever estar disponvel para tratar essa questo: Esquema encadeado: Um bloco de ndice geralmente ocupa um bloco de disco. Assim, ele pode ser lido e gravado diretamente por si s. Para permitir a existncia de arquivos grandes, vrios blocos de ndice podem ser ligados entre si. Por exemplo, um bloco de ndice pode conter um pequeno cabealho com o nome do arquivo e um conjunto dos primeiros 100 endereos de bloco de disco. O prximo endereo (a ltima palavra no bloco de ndice) nil (para um arquivo pequeno) ou um ponteiro para outro bloco de ndice (para um arquivo grande). ndice de multinvel: Uma variante da representao encadeada usar um bloco de ndice de primeiro nvel para apontar para um conjunto de blocos de ndice de segundo nvel, que, por sua vez, aponta para os blocos de arquivo. Para acessar um bloco, o sistema operacional utiliza o ndice de primeiro nvel para localizar um bloco de ndice de segundo nvel, e esse bloco para localizar o bloco de dados desejado. Essa abordagem pode ainda ser estendida a um terceiro ou quarto nveis, dependendo do tamanho mximo de arquivo desejado. Com blocos de 4.096 bytes, podemos armazenar 1.024 ponteiros de 4 bytes em um bloco de ndice. Dois nveis de ndice permitem 1.048.576 blocos de dados, possibilitando um arquivo de at 4 gigabytes. Esquema combinado: Outra alternativa, usada no sistema UNIX BSD, manter os primeiros 15 ponteiros, por exemplo, do bloco de ndice no bloco de ndice do arquivo (ou inode). (A entrada de diretrio aponta para o inode, como discutido na Seo 20.7.) Os primeiros 12 ponteiros apontam para blocos diretos; ou seja, contm endereos de blocos que contm dados do arquivo. Assim, os dados para arquivos pequenos (no mais do que 12 blocos) no precisam de um bloco de ndice separado. Se o tamanho do bloco for 4K, at 48K de dados podem ser acessados diretamente. Os trs ponteiros seguintes apontam para blocos indiretos. O primeiro ponteiro de bloco indireto o endereo de um bloco indireto simples. O bloco indireto simples um bloco de ndice que no contm dados, mas endereos dos blocos que contm dados. Em seguida, existe um ponteiro de bloco indireto duplo, que contm o endereo de um bloco que contm os endereos dos blocos que contm ponteiros aos blocos de dados reais. O ltimo ponteiro conteria o endereo de um bloco indireto triplo. Usando esse mtodo, o nmero de blocos que podem ser alocados a um arquivo excede a quantidade de espao enderevel pelos ponteiros de arquivo de 4 bytes usados por muitos sistemas operacionais. Um ponteiro de arquivo de 32 bits atinge apenas 232 bytes, ou 4 gigabytes. Um inode aparece na Figura 11.19.
modo proprietrios (2) datas (3) bloco de tamanho contagem blocos diretos indireto simples indireto duplo indireto triplo

-Mdados dados i
* I dados

dados

-* H dados 1

Figura 11.19 O inode UNIX. Sistemas de Arquivos 273 Observe que a alocao indexada sofre de alguns dos mesmos problemas de desempenho existentes na alocao encadeada. Especificamente, os blocos de ndice podem ser armazenados em cache na memria, mas os blocos de dados podem estar dispersos em toda a partio.

11.6.4 Desempenho
Os mtodos de alocao que discutimos variam em termos de eficincia de armazenamento e tempos de acesso aos blocos de dados. Ambos so critrios importantes na Seleo do(s) mtodo(s) adequado(s) para implementao por um sistema operacional. Uma dificuldade na comparao do desempenho dos vrios sistemas determinar como os sistemas sero usados. Um sistema onde prevalece o acesso sequencial deve usar um mtodo diferente de um sistema com acesso basicamente aleatrio. Para qualquer tipo de acesso, a alocao contgua requer apenas um acesso para obter um bloco de disco. Como podemos facilmente manter o endereo inicial do arquivo na memria,

podemos calcular imediatamente o endereo de disco do bloco / (ou o bloco seguinte) e l-lo diretamente. Para a alocao encadeada, tambm podemos manter o endereo do prximo bloco na memria e fazer a leitura diretamente. Esse mtodo funciona para acesso sequencial, para o acesso direto, no entanto, um acesso ao bloco i pode exigir i leituras de disco. Esse problema indica porque a alocao encadeada no deve ser usada para uma aplicao que exija acesso direto. Como resultado, alguns sistemas suportam arquivos de acesso direto usando alocao contgua e acesso sequencial por alocao encadeada. Para esses sistemas, o tipo de acesso a ser feito deve ser declarado quando o arquivo criado. Um arquivo criado para acesso sequencial ser encadeado e no poder ser usado para acesso direto. Um arquivo criado para acesso direto ser contguo e poder suportar acesso direto e sequencial, mas seu tamanho mximo dever ser declarado quando ele for criado. Observe que, nesse caso, o sistema operacional deve ter estruturas de dados e algoritmos apropriados para suportar os dois mtodos de alocao. Os arquivos podem ser convertidos de um tipo para outro pela criao de um novo arquivo do tipo desejado, no qual o contedo do arquivo antigo copiado. O arquivo anterior pode ento ser excludo, e o novo arquivo renomeado. A alocao indexada mais complexa. Se o bloco de ndice j estiver na memria, o acesso poder ser feito diretamente. No entanto, manter o bloco de ndice na memria requer espao considervel. Se no houver espao disponvel na memria, talvez seja necessrio ler primeiro o bloco de ndice e, em seguida, o bloco de dados desejado. Para um ndice de dois nveis, duas leituras de bloco de ndice podem ser necessrias. Para um arquivo extremamente grande, acessar um bloco prximo ao fim do arquivo exigiria ler todos os blocos de ndice para seguir a cadeia de ponteiros antes que o bloco de dados finalmente pudesse ser lido. Assim, o desempenho da alocao indexada depende da estrutura do ndice, do tamanho do arquivo e da posio do bloco desejado. Alguns sistemas combinam a alocao contgua com a indexada usando a alocao contgua para arquivos pequenos (at trs ou quatro blocos), e alternando automaticamente para a alocao indexada se o arquivo ficar grande. Como a maioria dos arquivos pequena, e a alocao contgua eficiente para arquivos pequenos, o desempenho mdio pode ser bom. Por exemplo, em 1991, a Sun Microsystems mudou sua verso do sistema operacional UNIX para melhorar o desempenho do algoritmo de alocao do sistema de arquivos. As medidas de desempenho indicaram que o throughput mximo de disco em uma estao de trabalho tpica (SparcStation 1 com 12 MIPS) ocupava 50% da CPU e produzia uma largura de banda de disco de apenas 1,5 megabytes por segundo. Para melhorar o desempenho, a Sun implementou mudanas para alocar espao em clusters de 56K de tamanho, sempre que possvel. Essa alocao reduziu a fragmentao externa e os tempos de busca e latncia. Alm disso, as rotinas de leitura de disco foram otimizadas para fazer a leitura nesses grandes clusters. A estrutura de inode ficou inalterada. Essas mudanas, juntamente com o uso das tcnicas de read-abead e free-bebind (discutidas na Seo 11.9.2), resultaram em 25% menos uso de CPU para um throughput substancialmente maior. Muitas outras otimizaes esto em uso. Considerando a disparidade entre a velocidade da CPU e do disco, no absurdo adicionar milhares de instrues extras ao sistema operacional apenas para economizar alguns movimentos da cabea do disco. Alm disso, essa disparidade est aumentando com o tempo, a um ponto em que centenas de milhares de instrues poderiam ser usadas razoavelmente para otimizar os movimentos da cabea de leitura. 274 Sistemas Operacionais

11.7 Gerncia de espao livre


Como s existe uma quantidade limitada de espao em disco, necessrio reutilizar o espao de arquivos excludos para novos arquivos, se possvel. (Os discos ticos somente de leitura permitem apenas a escrita em determinado setor, sendo fisicamente impossvel a sua reutilizao.) Para controlar a quantidade de espao livre em disco, o sistema mantm uma lista de espao livre. Essa lista registra todos os blocos de disco que

esto livres, ou seja, os que no esto alocados a algum arquivo ou diretrio. Para criar um arquivo, pesquisamos a lista de espao livre para encontrar a quantidade de espao desejado, e alocamos esse espao ao novo arquivo. Esse espao ento removido da lista de espao livre. Quando um arquivo excludo, seu espao em disco adicionado lista de espao livre. A lista, apesar do nome, talvez no seja implementada como uma lista, conforme veremos em nossa discusso a seguir.

11.7.1 Vetor de bits


Frequentemente, a lista de espao livre implementada como um mapa de bits ou um vetor de bits. Cada bloco representado por 1 bit. Se o bloco estiver livre, o bit ser 1; se o bloco estiver alocado, o bit ser 0. Por exemplo, considere um disco no qual os blocos 2,3,4,5,8,9,10,11,12,13,17,18,25,26 e 27 esto livres, e o resto dos blocos est alocado. O mapa de bits do espao livre seria: 001111001111110001100000011100000... A principal vantagem dessa abordagem que relativamente simples e eficiente encontrar o primeiro bloco livre, ou n blocos livres consecutivos no disco. Na verdade, muitos computadores fornecem instrues de manipulao de bits que podem ser usadas com eficcia para esse propsito. Por exemplo, a famlia Intel a partir do 80386 e a famlia Motorola a partir do 68020 (processadores dos PCs e Macintosh, respectivamente) tm instrues que retornam o deslocamento do primeiro bit com o valor 1 em uma palavra. Na verdade, o Sistema Operacional do Apple Macintosh utiliza o mtodo de vetor de bits para alocar espao em disco. Para encontrar o primeiro bloco livre, o Sistema Operacional do Macintosh verifica cada palavra sequencialmente no mapa de bits para ver se esse valor ou no zero, j que uma palavra de valor zero tem todos os bits 0 e representa um conjunto de blocos alocados. A primeira palavra no-zero analisada para encontrar o primeiro bit 1, que a posio do primeiro bloco livre. O clculo do nmero do bloco (nmero de bits por palavra) x (nmero de palavras em zero) + deslocamento do primeiro bit 1 Mais uma vez, vemos os recursos de hardware orientando a funcionalidade do software. Infelizmente, os vetores de bits so ineficientes, a menos que todo vetor seja mantido na memria principal (e seja gravado no disco ocasionalmente para fins de recuperao). Mant-lo na memria principal possvel para discos menores, tais como em microcomputadores, mas no para os maiores. Um disco de 1.3 gigabytes com blocos de 512 bytes precisaria de um mapa de bits de mais de 332K para rastrear seus blocos livres. O clustering dos blocos em grupos de quatro reduz esse nmero para 83K por disco.

11.7.2 Lista encadeada


Outra abordagem encadear todos os blocos de disco livres, mantendo um ponteiro ao primeiro bloco livre em uma posio especial no disco e armazenando-o em cache na memria. Esse primeiro bloco contm um ponteiro ao prximo bloco livre de disco, e assim por diante. Em nosso exemplo (Seo 11.7.1), manteramos um ponteiro ao bloco 2, como o primeiro bloco livre. O bloco 2 conteria um ponteiro para o bloco 3, que apontaria para o bloco 4, que apontaria para o bloco 5, que apontaria para o bloco 8, e assim por diante (Figura 11.20). No entanto, esse esquema no eficiente; para percorrer a lista, precisamos ler cada bloco, o que requer tempo substancial de I/O. Felizmente, percorrer a lista livre no uma ao frequente. Geralmente, o sistema operacional simplesmente precisa de um bloco livre para que possa alocar esse bloco a um arquivo, assim o primeiro bloco na lista usado. Observe que o mtodo FAT incorpora a contabilizao de blocos livres na estrutura de dados de alocao. Nenhum mtodo separado necessrio. Sistemas de Arquivos 275 S[]29P30n3in Figura 11.20 Lista encadeada de espao livre no disco.

11.7.3 Agrupamento
Uma modificao da abordagem de lista livre armazenar os endereos de n blocos livres no primeiro bloco

livre. Os primeiros n - 1 desses blocos esto realmente livres. O bloco final contm os endereos de outros n blocos livres, e assim por diante. A importncia dessa implementao que os endereos de um grande nmero de blocos livres podem ser rapidamente encontrados, diferentemente da abordagem da lista encadeada padro.

11.7.4 Contadores
Outra abordagem aproveitar o fato de que, em geral, vrios blocos contguos podem ser alocados ou liberados simultaneamente, sobretudo quando o espao alocado com o algoritmo de alocao contgua ou atravs do clustering. Portanto, em vez de manter uma lista de n endereos de disco livres, podemos manter o endereo do primeiro bloco livre e o nmero n de blocos contguos livres que seguem esse primeiro bloco. Cada entrada na lista de espao livre consiste ento em um endereo de disco e um contador. Embora cada entrada exija mais espao do que um endereo de disco simples precisaria, a lista global seria mais curta, desde que o contador fosse geralmente maior do que 1.

11.8 Implementao de diretrios


A Seleo dos algoritmos de alocao e gerncia de diretrios tem um grande efeito na eficincia, desempenho e confiabilidade do sistema de arquivos. Portanto, importante entender o que est envolvido nesses algoritmos.

11.8.1 Lista linear


O mtodo mais simples de implementar um diretrio usar uma lista linear de nomes de arquivos com ponteiros aos blocos de dados. Uma lista linear de entradas de diretrio requer uma pesquisa linear para encontrar uma determinada entrada. Esse mtodo simples de programar, mas demorado de executar. Para criar um novo arquivo, devemos primeiro pesquisar o diretrio para ter certeza de que nenhum arquivo existente tem o mesmo nome. Em seguida, adicionamos uma nova entrada ao fim do diretrio. Para excluir um arquivo, pesquisamos o diretrio procurando o arquivo em questo, em seguida, liberamos o espao alocado a ele. Para reutilizar a entrada de diretrio, existem vrias opes. Podemos marcar a entrada como no-usada (atribuindo a ela um nome especial, como um nome em branco ou um bit usado/no-usado em cada entrada), 276 Sistemas Operacionais ou podemos anex-la a uma lista de entradas de diretrio livres. Uma terceira alternativa copiar a entrada final para a posio liberada no diretrio e diminuir o tamanho do diretrio. Alm disso, podemos usar uma lista encadeada para diminuir o tempo de excluso de um arquivo. A verdadeira desvantagem de uma lista linear de entradas de diretrio a pesquisa linear para encontrar um arquivo. As informaes de diretrio so usadas frequentemente, e uma implementao lenta de acesso a elas seria percebida pelos usurios. Na verdade, muitos sistemas operacionais implementam um cache de software para armazenar as informaes de diretrio usadas mais recentemente. A busca no cache evita ter de ler constantemente as informaes do disco. Uma lista ordenada permite a pesquisa binria e diminui o tempo mdio de pesquisa. No entanto, a exigncia de que a lista seja mantida ordenada pode complicar a criao e excluso de arquivos, j que talvez seja necessrio mover grandes quantidades de informaes do diretrio para mant-lo ordenado. Uma estrutura de dados em rvore mais sofisticada, como uma rvore B (B-tree), pode ajudar aqui. Uma vantagem da lista ordenada que uma listagem de diretrio ordenada pode ser gerada sem uma etapa de ordenao separada.

11.8.2 Tabelas de hash


Outra estrutura de dados que tem sido utilizada para diretrios de arquivos uma tabela de hash. Nesse mtodo, uma lista linear armazena as entradas de diretrio, mas uma estrutura de dados com hash tambm usada. A tabela de hash pega um valor calculado a partir do nome do arquivo e retorna um ponteiro ao nome de arquivo na lista linear. Portanto, pode diminuir em muito o tempo de pesquisa no diretrio. A insero e a excluso tambm so relativamente fceis, embora seja preciso prever as colises - situaes em que dois nomes de arquivo so mapeados na mesma posio. As principais dificuldades com uma tabela de hash so o tamanho fixo da tabela e a dependncia da funo de hash do tamanho da tabela.

Por exemplo, vamos supor que tenhamos criado uma tabela de hash de busca linear com 64 entradas. A funo de hash converte os nomes de arquivos em inteiros de 0 a 63, por exemplo, usando o resto da diviso por 64. Se mais tarde tentarmos criar o arquivo nmero 65, devemos aumentar a tabela de hash do diretrio, digamos, para 128 entradas. Como resultado, precisamos de uma nova funo de hash, que dever mapear os nomes de arquivo na faixa de 0 a 127, e devemos reorganizar as entradas de diretrio existentes para refletir seus novos valores de hash. Como alternativa, uma tabela de hash com encadeamento pode ser usada. Cada entrada de hash pode ser uma lista encadeada em vez de um valor individual, e podemos resolver as colises adicionando uma nova entrada lista encadeada. As pesquisas podem ficar mais lentas, porque a pesquisa por um nome pode exigir percorrer uma lista encadeada de entradas de tabela em coliso, mas essa operao provavelmente muito mais rpida do que uma pesquisa linear em todo o diretrio.

11.9 Eficincia e desempenho


Agora que j discutimos as opes de alocao de bloco e gerncia de diretrio, podemos considerar o seu efeito no desempenho e uso eficiente do disco. Os discos tendem a ser um importante gargalo no desempenho do sistema, j que so o componente principal mais lento do computador. Nesta seo, discutimos tcnicas que melhoram a eficincia e o desempenho do armazenamento secundrio.

11.9.1 Eficincia
O uso eficiente do espao em disco depende muito dos algoritmos de alocao de disco e diretrio em uso. Por exemplo, os inodes do UNIX so pr-alocados em uma partio. Mesmo um disco "vazio" tem uma percentagem do seu espao perdida para os inodes. No entanto, ao pr-alocar os inodes e dispers-los em toda a partio, ns melhoramos o desempenho do sistema de arquivos. Esse desempenho melhorado resultado dos algoritmos de espao livre e alocao do UNIX, que tentam manter os blocos de dados de um arquivo prximos ao bloco de inode do arquivo, para reduzir o tempo de busca. Como outro exemplo, vamos reconsiderar o esquema de clustering discutido na Seo 11.6, que ajuda o desempenho de busca de arquivo e transferncia de arquivos ao custo da fragmentao interna. Para reduzir essa fragmentao, o UNIX BSD varia o tamanho do cluster medida que o arquivo cresce. Clusters grandes Sistemas de Arquivos 277 so usados onde podem ser preenchidos, e clusters pequenos so usados para arquivos pequenos e o ltimo cluster de um arquivo. Esse sistema ser descrito no Captulo 20. Tambm exigem considerao os tipos de dados normalmente mantidos em uma entrada de diretrio (ou inode) de arquivo. Geralmente, a "data de ltima escrita" registrada para fornecer informaes ao usurio e determinar se o arquivo precisa de backup. Alguns sistemas tambm mantm um registro da "data de ltimo acesso", para que o usurio possa determinar quando o arquivo foi lido pela ltima vez. O resultado de manter essas informaes que, sempre que um arquivo lido, um campo na estrutura de diretrio precisa ser gravado. Essa alterao requer que o bloco seja lido na memria, que uma seo seja alterada e que o bloco seja gravado de volta para o disco, porque as operaes nos discos ocorrem apenas em partes do bloco (ou clusters). Portanto, sempre que um arquivo aberto para leitura, sua entrada de diretrio deve ser lida e gravada tambm. Essa exigncia causa a operao ineficiente para arquivos acessados com frequncia, por isso devemos pesar seus benefcios em relao ao custo de desempenho quando estivermos projetando um sistema de arquivos. Em geral, todo item de dados associado a um arquivo precisa ser considerado para avaliar seu efeito na eficincia e desempenho. Como exemplo, considere como a eficincia afetada pelo tamanho dos ponteiros usados para acessar dados. A maioria dos sistemas utiliza ponteiros de 16 ou 32 bits em todo o sistema operacional. Esses tamanhos de ponteiro limitam o tamanho de um arquivo para 216 (64K) ou 232 bytes (4 gigabytes). Alguns sistemas implementam ponteiros de 64 bits para aumentar esse limite para 264 bytes, o que um nmero muito grande. No entanto, os ponteiros de 64 bits ocupam mais espao de armazenamento e, por sua vez, fazem com que os mtodos de alocao e gerncia de espao livre (listas encadeadas, ndices, e assim por diante) utilizem mais espao em disco.

Uma das dificuldades de escolher um tamanho de ponteiro, ou na verdade qualquer tamanho de alocao fixo em um sistema operacional, planejar os efeitos de mudanas na tecnologia. Considere que o IBM PC XT tinha um disco rgido de 10 megabytes, e um sistema de arquivos do MS-DOS que podia suportar apenas 32 megabytes. (Cada entrada na FAT tinha 12 bits, apontando para um cluster de 8K.) A medida que as capacidades de disco aumentaram, discos maiores tiveram de ser divididos em parties de 32 megabytes, porque o sistema de arquivos no poderia controlar blocos alm de 32 megabytes. Assim que os discos rgidos de mais de 100 megabytes de capacidade passaram a ser comuns, as estruturas de dados de disco e os algoritmos no MS-DOS tiveram de ser modificados para permitir sistemas de arquivos maiores. (Cada entrada na FAT foi expandida para 16 bits, e mais tarde para 32 bits.) As decises iniciais relativas aos sistemas de arquivos foram tomadas para fins de eficincia; no entanto, com o advento do MS-DOS Verso 4, milhes de usurios de computador ficaram incomodados quando tiveram de mudar para o novo e maior sistema de arquivos. Como outro exemplo, considere a evoluo do sistema operacional Solaris da Sun. Originalmente, muitas estruturas de dados tinham tamanho fixo, alocado na inicializao do sistema. Essas estruturas incluam a tabela de processos e a tabela de arquivos abertos. Quando a tabela de processos ficava cheia, mais nenhum processo poderia ser criado. Quando a tabela de arquivos ficava cheia, mais nenhum arquivo podia ser aberto. O sistema no conseguia fornecer servio aos usurios. Esses tamanhos de tabela poderiam ser aumentados somente pela recompilao do kernel e nova inicializao do sistema. Desde o lanamento do Solaris 2, quase todas as estruturas do kernel so alocadas dinamicamente, eliminando esses limites artificiais no desempenho do sistema. claro que os algoritmos que manipulam essas tabelas so mais complicados, e o sistema operacional um pouco mais lento porque ele deve alocar e desalocar dinamicamente as entradas nas tabelas, mas esse preo comum para obter mais generalidade funcional.

11.9.2 Desempenho
Assim que os mtodos de disco bsicos forem selecionados, ainda existem vrias formas de melhorar o desempenho. Como observado no Captulo 2, a maioria das controladoras de disco incluem memria local para formar um cache embutido suficientemente grande para armazenar trilhas inteiras de uma vez. Assim que uma busca executada, a trilha lida no cache de disco comeando no setor sob a cabea de disco (aliviando o tempo de latncia). A controladora de disco transfere ento qualquer pedido de setor para o sistema operacional. Assim que os blocos passarem da controladora de disco para a memria principal, o sistema operacional poder armazen-los em cache. Alguns sistemas mantm uma seo separada de memria principal 278 Sistemas Operacionais para um cache de disco, no qual os blocos so mantidos considerando que sero usados novamente em breve. O LRU um algoritmo de uso geral razovel para a substituio de bloco. Outros sistemas (como a verso do UNIX da Sun) tratam toda memria fsica no-utilizada como um pool de buffers que compartilhado pelo sistema de paginao e o sistema de cache de blocos de disco. Um sistema que realiza muitas operaes de I/O usar boa parte da sua memria como um cache de blocos, enquanto um sistema que executa muitos programas usar mais memria como espao de paginao. Alguns sistemas otimizam seu cache de disco usando diferentes algoritmos de substituio, dependendo do tipo de acesso do arquivo. Um arquivo sendo lido ou gravado sequencialmente no deve ter seus blocos substitudos na ordem LRU, porque o bloco usado mais recentemente ser usado por ltimo, ou talvez nunca mais. Em vez disso, o acesso sequencial pode ser otimizado por tcnicas conhecidas como free-behind e read-ahead. A tcnica free bebind remove um bloco do buffer assim que o prximo bloco solicitado. Os blocos anteriores provavelmente no sero usados novamente e desperdiam espao de buffer. Com a tcnica read ahead, um bloco solicitado e vrios blocos subsequentes so lidos e armazenados em cache. provvel

que esses blocos sejam solicitados depois que o bloco atual for processado. Recuperar esses blocos do disco em uma transferncia e armazen-los em cache economiza muito tempo. Um cache de trilha na controladora no elimina a necessidade da tcnica read-ahead em um sistema multiprogramado, por causa da alta latncia e custo de muitas transferncias pequenas do cache de trilha para a memria principal. Outro mtodo de usar a memria principal para melhorar o desempenho comum em computadores pessoais. Uma seo de memria reservada e tratada como um disco virtual, ou disco de RAM. Nesse caso, um driver de dispositivo de disco de RAM aceita todas as operaes de disco padro, mas realiza essas operaes naquela seo da memria, em vez de no disco. Todas as operaes de disco podem ser executadas nesse disco de RAM e, exceto pela altssima velocidade, os usurios no percebero a diferena. Infelizmente, os discos de RAM so teis apenas para armazenamento temporrio, j que uma falha de energia ou reinicializao do sistema geralmente os apagaro. Em geral, arquivos temporrios, como arquivos intermedirios de compilao, so armazenados nesses discos. A diferena entre um disco de RAM e um cache de disco que o contedo do disco de RAM totalmente controlado pelo usurio, enquanto o contedo do cache de disco est sob controle do sistema operacional. Por exemplo, um disco de RAM ficar vazio at que o usurio (ou programas sob a direo do usurio) crie arquivos ali. A Figura 11.21 mostra os possveis locais de cache em um sistema.
<

CPU memria principal

Figura 11.21 Vrias posies de cache de disco.

11.10 Recuperao
Como os arquivos e diretrios so mantidos na memria principal e no disco, devemos cuidar para garantir que uma falha no sistema no resulte em perda ou inconsistncia de dados.

11.10.1 Verificao de consistncia


Como discutido na Seo 11.8, parte das informaes do diretrio so mantidas na memria principal (no cache) para acelerar o acesso. As informaes do diretrio na memria principal so geralmente mais atualizadas do que as informaes correspondentes no disco, porque a escrita de informaes de diretrio em cache para o disco no ocorre necessariamente assim que ocorre a atualizao.
disco de RAM tabela de arquivos abertos de trilha! controladora disco

Sistemas de Arquivos 279 Considere o possvel efeito de uma falha do computador. A tabela de arquivos abertos geralmente se perde e, com ela, quaisquer alteraes nos diretrios dos arquivos abertos. Esse evento pode deixar o sistema de arquivos em estado inconsistente. O estado real de alguns arquivos no o que aparece na estrutura de diretrio. Com frequncia, um programa especial executado no momento da reinicializao para verificar e corrigir inconsistncias de disco. A verificao de consistncia compara os dados na estrutura de diretrio com os blocos de dados no disco e tenta corrigir quaisquer inconsistncias encontradas. Os algoritmos de alocao e gerncia de espao livre determinam os tipos de problemas que o verificador poder encontrar e qual ser a taxa de sucesso na correo desses problemas. Por exemplo, se a alocao encadeada for usada e houver uma ligao de cada bloco para seu prximo bloco, ento o arquivo inteiro pode ser reconstrudo a partir dos blocos de dados e a estrutura de diretrio pode ser recriada. A perda de uma entrada de diretrio no sistema de alocao indexada pode ser desastrosa, porque os blocos de dados no tm conhecimento uns dos outros. Por esse motivo, o UNIX armazena em cache as entradas de diretrio para as operaes de leitura, mas qualquer escrita de dados que resulte em alocao de espao geralmente faz com que o bloco de inode seja gravado para disco antes que os blocos de dados correspondentes o sejam.

11.10,2 Backup e restaurao


Como os discos magnticos s vezes falham, devemos ter certeza que no haja perda de dados. Para isso,

podemos usar os programas do sistema para fazer backup dos dados do disco para outro dispositivo de armazenamento, como um disquete, fita magntica ou disco tico. A recuperao da perda de um arquivo individual, ou de um disco inteiro, pode ento ser uma questo de restaurar os dados do backup. Para minimizar a quantidade de cpia necessria, podemos usar informaes da entrada de diretrio de cada arquivo. Por exemplo, se o programa de backup souber quando o ltimo backup de um arquivo foi feito, e a data da ltima escrita no diretrio indicar que o arquivo no sofreu alteraes desde ento, o arquivo no precisar ser copiado novamente. Um escalonamento de backup tpico pode ser: Dia 1: Copiar para uma mdia de backup todos os arquivos do disco - chamado backup completo. Dia 2: Copiar para outra mdia todos os arquivos alterados desde o dia 1 - um backup incremental. Dia 3: Copiar para outra mdia todos os arquivos alterados desde o dia 2. Dia N: Copiar para outra mdia todos os arquivos alterados desde o dia N - 1 . Em seguida, voltar para o dia 1. O novo ciclo pode ter o seu backup gravado sobre o conjunto anterior ou em um novo conjunto de mdias de backup. Desse modo, podemos restaurar um disco inteiro comeando com restauraes a partir do backup completo, e continuando atravs de cada backup incremental. Evidentemente, quanto maior N, mais fitas ou discos precisam ser lidos para uma restaurao completa. Uma vantagem adicional desse ciclo de backup que possvel restaurar qualquer arquivo excludo por acidente durante o ciclo recuperando o arquivo excludo do backup do dia anterior. O tamanho do ciclo determinado pelo compromisso entre a quantidade de mdia fsica de backup necessria e o nmero de dias para trs a partir do qual a restaurao pode ser feita. Pode acontecer que determinado usurio observe que um arquivo est faltando ou corrompido muito depois que ocorreu o problema. Para proteger contra essa situao, comum fazer um backup completo de tempos em tempos que ser mantido "para sempre", em vez da mdia de backup ser reutilizada. Tambm uma boa ideia armazenar esses backups permanentes em um local longe dos backups regulares, para proteger contra perigos como incndios que destroem o computador e todos os seus backups tambm. Se o ciclo de backup reutilizar mdias fsicas, devemos ter cuidado para no fazer isso muitas vezes - se houver desgaste das mdias, talvez no seja possvel restaurar dados. 280 Sistemas Operacionais

11.11 Resumo
Um arquivo um tipo abstrato de dados definido e implementado pelo sistema operacional. uma sequncia de registros lgicos. Um registro lgico pode ser um byte, uma linha (de tamanho fixo ou varivel) ou um item de dados mais complexo. O sistema operacional pode suportar especificamente vrios tipos de registro ou pode deixar o suporte ao programa aplicativo. A principal tarefa do sistema operacional mapear o conceito de arquivo lgico em dispositivos de armazenamento fsico tais como fita ou disco magntico. Como o tamanho do registro fsico do dispositivo talvez no seja igual ao tamanho do registro lgico, pode ser necessrio encaixar registros lgicos em registros fsicos. Mais uma vez, essa tarefa pode ser suportada pelo sistema operacional ou deixada para o programa aplicativo. Os sistemas de arquivos baseados em fita so limitados; a maioria dos sistemas de arquivos so baseados em disco. As fitas so comumente usadas para transporte de dados entre mquinas, ou para armazenamento de backup ou arquivamento. Cada dispositivo em um sistema de arquivos mantm um ndice de volume ou diretrio de dispositivo listando a posio dos arquivos no dispositivo. Alm disso, til criar diretrios para permitir a organizao dos arquivos. Um diretrio de nvel nico em um sistema multiusurio causa problemas de nomeao, j que cada arquivo deve ter um nome exclusivo. Um diretrio de dois nveis resolve esse problema criando um diretrio separado para cada usurio. Cada usurio tem seu prprio diretrio, que contm seus prprios arquivos. O diretrio lista os arquivos por nome, e inclui informaes como a posio do arquivo no disco, seu tamanho, tipo, proprietrio, hora da criao, hora da ltima utilizao etc. A generalizao natural de um diretrio de dois nveis um diretrio estruturado em rvore. Um diretrio em rvore permite que o usurio crie subdiretrios para organizar seus arquivos. Estruturas de diretrios de grafos acclicos permitem o compartilhamento de arquivos e diretrios, mas complicam a pesquisa e

excluso. Uma estrutura de grafo genrico permite flexibilidade total no compartilhamento de arquivos e diretrios, mas s vezes requer o uso da coleta de lixo para recuperar espao em disco no utilizado. Como os arquivos so o principal mecanismo de armazenamento de informaes na maioria dos sistemas de computao, a proteo de arquivo necessria. O acesso aos arquivos pode ser controlado de forma separada para cada tipo de acesso: ler, gravar, executar, anexar, listar diretrio e assim por diante. A proteo de arquivo pode ser fornecida por senhas, listas de acesso, ou por tcnicas especiais ad hoc. O sistema de arquivos reside permanentemente no armazenamento secundrio, que tem como exigncia principal o fato de poder armazenar grandes quantidades de dados de forma permanente. O meio de armazenamento secundrio mais comum o disco. Os sistemas de arquivos so muitas vezes implementados em uma estrutura em camadas ou modular. Os nveis inferiores tratam das propriedades fsicas dos dispositivos de armazenamento. Os nveis superiores lidam com nomes de arquivo simblicos e as propriedades lgicas dos arquivos. Os nveis intermedirios mapeiam os conceitos de arquivo lgico em propriedades de dispositivos fsicos. Os vrios arquivos podem ser alocados no disco de trs formas: atravs de alocao contgua, encadeada ou indexada. A alocao contgua pode sofrer de fragmentao externa. O acesso direto muito ineficiente com a alocao encadeada. A alocao indexada pode exigir custo substancial para seu bloco de ndice. Existem muitas formas nas quais esses algoritmos podem ser otimizados. O espao contguo pode ser ampliado por meio de extenses para aumentar a flexibilidade e diminuir a fragmentao externa. A alocao indexada pode ser feita em clusters de mltiplos blocos para aumentar o throughput e reduzir o nmero de entradas de ndice necessrias. A indexao em clusters grandes semelhante alocao contgua com extenses. Os mtodos de alocao de espao livre tambm influenciam a eficincia de uso do espao em disco, o desempenho do sistema de arquivos, e a confiabilidade do armazenamento secundrio. Os mtodos usados incluem vetores de bits e listas encadeadas. As otimizaes incluem agrupamento, contadores e a FAT, que coloca a lista encadeada em uma rea contgua. As rotinas de gerncia de diretrios devem considerar os aspectos de eficincia, desempenho e confiabilidade. Uma tabela de hash o mtodo mais frequentemente usado; rpido e eficiente. Infelizmente, danos tabela ou uma falha no sistema podem fazer com que as informaes do diretrio no correspondam ao contedo do disco. Um verificador de consistncia - um programa de sistema como f sck no UNIX, ou chkdsk no MS-DOS - pode ser usado para reparar o dano. Sistemas de Arquivos 281

Exerccios
11.1 Considere um sistema de arquivos no qual um arquivo possa ser excludo e seu espao de disco reutilizado enquanto ainda houver links para aquele arquivo. Que problemas podero ocorrer se um novo arquivo for criado na mesma rea de armazenamento ou com o mesmo nome de caminho absoluto? Como esses problemas podem ser evitados? 11.2 Alguns sistemas excluem automaticamente todos os arquivos de usurio quando um usurio efetua logoff ou um job termina, a menos que o usurio solicite explicitamente que os arquivos sejam mantidos; outros sistemas mantm todos os arquivos a menos que o usurio explicitamente os exclua. Discuta os mritos relativos de cada abordagem. 11.3 Por que alguns sistemas controlam o tipo de um arquivo, enquanto outros deixam isso nas mos do usurio ou simplesmente no implementam mltiplos tipos de arquivo? Que sistema "melhor"? Justifique a sua resposta. 11.4 Da mesma forma, alguns sistemas suportam muitos tipos de estruturas para os dados de um arquivo, enquanto outros simplesmente suportam um fluxo de bytes. Quais so as vantagens e desvantagens de cada um? 11.5 Quais as vantagens e desvantagens de registrar o nome do programa criador com os atributos do arquivo (como feito no sistema operacional do Macintosh)? 11.6 Voc poderia simular uma estrutura de diretrio de multinvel com uma estrutura de diretrio de nvel

nico na qual nomes arbitrariamente longos podem ser usados? Se a sua resposta for afirmativa, explique como voc faria isso, e compare esse esquema com um esquema de diretrio de multinvel. Se a sua resposta for negativa, explique o que impede o sucesso dessa simulao. A sua resposta mudaria se os nomes de arquivo fossem limitados a sete caracteres? Explique sua resposta. 11.7 Explique o objetivo das operaes de open e close. 11.8 Alguns sistemas abrem automaticamente um arquivo quando ele referenciado pela primeira vez, e o fecham quando o job termina. Discuta as vantagens e desvantagens desse esquema. Compare-o com o mais tradicional, no qual o usurio tem de abrir e fechar o arquivo explicitamente. 11.9 D um exemplo de uma aplicao na qual os dados em um arquivo devem ser acessados na seguinte ordem: a. Sequencialmente b. Aleatoriamente 11.10 Alguns sistemas fornecem compartilhamento mantendo uma nica cpia de um arquivo; outros sistemas mantm vrias cpias, uma para cada um dos usurios compartilhando o arquivo. Discuta os mritos relativos de cada abordagem. 11.11 Em alguns sistemas, um subdiretrio pode ser lido e gravado por um usurio autorizado, da mesma forma como os arquivos comuns. a. Descreva dois problemas de proteo que poderiam surgir. b. Sugira um esquema para tratar cada um dos problemas de proteo indicados no item a. 11.12 Considere um sistema que suporte 5.000 usurios. Vamos supor que voc deseja permitir que 4.990 desses usurios sejam capazes de acessar um arquivo. a. Como voc especificaria esse esquema de proteo no UNIX? b. Sugira um esquema de proteo que seja mais eficiente do que o esquema fornecido pelo UNIX. 11.13 Pesquisadores sugeriram que, em vez de ter uma lista de acesso associada a cada arquivo (especificando que usurios podem acessar o arquivo e como), devemos ter uma lista de controle de usurio associada a cada usurio (especificando que arquivos um usurio pode acessar e como). Discuta os mritos relativos desses dois esquemas. 11.14 Considere um arquivo que no momento consiste em 100 blocos. Considere que o bloco de controle do arquivo (e o bloco de ndice, no caso de alocao indexada) j est na memria. Calcule quantas operaes de I/O de disco so necessrias para as estratgias de alocao contgua, encadeada e inde282 Sistemas Operacionais xada (de nvel nico) se, para um bloco, as seguintes condies forem verdadeiras. No caso da alocao contgua, suponha que no h espao para crescer no incio, mas sim no final do arquivo. Considere que as informaes do bloco a ser adicionado esto armazenadas na memria. a. O bloco adicionado no incio. b. O bloco adicionado no meio. c. O bloco adicionado no fim. d. O bloco removido do incio. e. O bloco removido do meio. f. O bloco removido do fim. 11.15 Considere um sistema no qual o espao livre mantido em uma lista de espao livre. a. Suponha que o ponteiro para a lista de espao livre tenha sido perdido. O sistema pode reconstruir a lista de espao livre? Explique sua resposta. b. Sugira um esquema para garantir que o ponteiro nunca seja perdido devido a uma falha de memria. 11.16 Que problemas poderiam ocorrer se um sistema permitisse que um sistema de arquivos fosse montado simultaneamente em mais de um local? 11.17 Por que o mapa de bits para a alocao de arquivos deve ser mantido no armazenamento de massa, em vez de na memria principal? 11.18 Considere um sistema que suporta as estratgias de alocao contgua, encadeada e indexada. Que critrios devem ser utilizados para decidir qual a melhor estratgia a ser utilizada para um arquivo em particular? 11.19 Considere um sistema de arquivos em um disco que tem tamanhos de bloco fsico e lgico de 512 bytes. Suponha que a informao sobre cada arquivo j est na memria. Para cada uma das trs estratgias de alocao (contgua, encadeada e indexada), responda as seguintes questes: a. Como o mapeamento de endereo lgico para fsico obtido nesse sistema? (Para a alocao indexada,

suponha que um arquivo sempre menor que 512 blocos.) b. Se voc estiver no bloco lgico 10 (o ltimo bloco acessado foi o bloco 10) e quiser acessar o bloco lgico 4, quantos blocos fsicos devem ser lidos do disco? 11.20 Um problema com a alocao contgua que o usurio deve pr-alocar espao suficiente para cada arquivo. Se o arquivo ficar maior do que o espao alocado para ele, aes especiais devem ser tomadas. Uma soluo para esse problema definir uma estrutura de arquivos consistindo em uma rea contgua inicial (de um tamanho especificado). Se essa rea for preenchida, o sistema operacional definir automaticamente uma rea de overflow que ligada rea contgua inicial. Se a rea de overflow ficar cheia, outra rea ser alocada. Compare essa implementao de um arquivo com as implementaes contguas e encadeadas padro. 11.21 A fragmentao em um dispositivo de armazenamento pode ser eliminada pela recompactao das informaes. Dispositivos de disco tpicos no tm registradores de base ou de relocao (tais como aqueles utilizados quando a memria compactada), ento como possvel relocar arquivos? Apresente trs motivos pelos quais a recompactao e a relocao de arquivos so em geral evitadas. 11.22 Como os caches ajudam a melhorar o desempenho? Por que os sistemas no usam mais caches ou caches maiores? 11.23 Em que situaes usar uma memria como disco de RAM seria mais til do que us-la como um cache de disco? 11.24 Por que vantajoso para o usurio que o sistema operacional aloque suas tabelas internas dinamicamente? Quais so as penalidades para o sistema operacional por faz-lo? 11.25 Considere os seguinte esquema de backup: Sistemas de Arquivos 283 Dia 1: Copiar para uma mdia de backup todos os arquivos do disco. Dia 2: Copiar para outra mdia todos os arquivos alterados desde o dia 1. Dia 3: Copiar para outra mdia todos os arquivos alterados desde o dia 1. Esse programa difere daquele na Seo 11.10.2, pois todos os backups subsequentes copiam todos os arquivos modificados desde o primeiro backup completo. Quais os benefcios desse sistema em relao ao apresentado na Seo 11.10.2? Quais as desvantagens? As operaes de restaurao ficam mais fceis ou mais difceis? Explique sua resposta.

Notas bibliogrficas
Discusses gerais relativas aos sistemas de arquivos foram apresentadas por Grosshans [1986]. Os sistemas