You are on page 1of 14

Sistemas de Operao

Ano lectivo 2011/2012

SISTEMA DE FICHEIROS sofs11

Nota prvia
sofs11 um sistema de ficheiros simples e limitado, baseado no sistema de ficheiros ext2 do Linux, que foi concebido com propsitos meramente didcticos e destinado a ser desenvolvido nas aulas prticas de Sistemas de Operao no ano lectivo de 2 !!"2 !2# O suporte f$sico preferencial um ficheiro re%ular do sistema de ficheiros da plataforma hard&are que vai ser usada no seu desenvolvimento#

O que um sistema de ficheiros ?


'uase todas os pro%ramas, durante a sua execuo, produ(em, consultam e"ou alteram quantidades variveis de informao que arma(enada de um modo mais ou menos permanente em dispositivos f$sicos a%rupados sob o nome %enrico de memria de massa# )m con*unto variado de requisitos so impostos a este tipo de funcionalidade ser no voltil a informao deve poder existir antes da criao do+s, processo+s, que a vai+o, usar, e sobreviver - sua terminao, mesmo quando o sistema computacional desli%ado. ter uma grande capacidade de arma enamento / a informao manipulada pelos processos pode ultrapassar em muito aquela que directamente arma(enada nos espaos de endereamento prprios. providenciar um acesso eficiente o acesso a informao espec$fica deve ser efectuado do modo mais simples e rpido poss$vel. manter a integridade da informao a informao arma(enada deve estar prote%ida contra a alterao e a corrupo acidentais. permitir a partil!a da informao / a informao deve ser acess$vel concorrentemente a m0ltiplos processos que fa(em uso dela# Os discos ma%nticos representam sem d0vida, ainda ho*e em dia, o tipo de dispositivos mais usados na materiali(ao do arma(enamento on"line de informao# 1s ra(2es da popularidade prendem3se com a %rande capacidade de arma(enamento, a fiabilidade associada - reali(ao de um n0mero extremamente elevado de opera2es de leitura e escrita e o seu baixo preo# 4struturalmente, verifica3se que

;loco

;loco !

;loco 2 ;9S@ b5tes

;loco <

;loco =

;loco >?;93!

o dispositivo pode ser encarado de um modo l%ico como um arra# formado por $%&' blocos, cada um deles contendo &'S( b5tes +tipicamente, &'S( varia entre 267 e 89,. o acesso a um bloco particular, para leitura ou escrita, feito na sua %lobalidade, fornecendo o seu n0mero identificador, e o tempo associado no depende do tipo de operao# 1 manipulao da informao contida directamente no dispositivo f$sico no pode, porm, ser deixada - responsabilidade do pro%ramador de aplica2es# 1 complexidade inerente - sua estrutura interna e a necessidade de %arantir critrios de qualidade, relacionados com a efici:ncia no acesso e a inte%ridade e a partilha, exi%em a criao de um modelo uniforme de interaco#
!

Sistemas de Operao

O conceito de fic!eiro sur%e, assim, como a unidade lgica de arma enamento em memria de massa e de acesso ) informao# 'uer com isto di(er3se que a leitura e a escrita de dados em memria de massa se fa( sempre no Ambito estrito de um ficheiro# )m fic!eiro apresenta como elementos bsicos o nome / a forma %enrica de referenciar uma informao particular. o conte*do informativo / a informao propriamente dita, or%ani(ada numa sequ:ncia de bits, b5tes, linhas ou re%istos, cu*o formato preciso definido pelo criador do ficheiro e que tem que ser conhecido por quem a ele acede# Sob o ponto de vista do pro%ramador de aplica2es, um ficheiro pode ser visto como um tipo de dados espec$fico, caracteri(ado por um con*unto de atri+utos e por um con*unto de opera,es# O papel do sistema de operao implementar este tipo de dados, fornecendo um leque alar%ado de c!amadas ao sistema que estabelecem um interface simples e se%uro de comunicao com a memria de massa# 1 parte do sistema de operao que se dedica a esta tarefa, desi%na3se de sistema de fic!eiros# Biferentes implementa2es condu(em a diferentes tipos de sistemas de ficheiros# Os sistemas de operao actuais suportam diferentes sistemas de ficheiros, associados, quer com dispositivos f$sicos distintos, quer com o mesmo dispositivo# 4ste 0ltimo aspecto facilita a chamada interoperacionalidade, estabelecendo um meio comum de partilha de informao entre sistemas ditos hetero%neos#

O ficheiro como um tipo de dados


Os atri+utos de um ficheiro so variados e dependem da implementao# Bestaca3se aqui um con*unto m$nimo que est habitualmente presente nome / o ficheiro passa a ter uma identidade prpria com a atribuio de um nome, tornando3se independente do processo e do utili(ador que o criaram, e mesmo do sistema de operao em que foi criado. identificador interno / o nome, enquanto elemento individuali(ador de um ficheiro, adequado para uma refer:ncia externa +tipicamente de ori%em humana,, mas pouco prtico em termos de or%ani(ao interna. o identificador interno constitui, por isso, o elemento de discriminao que vai permitir referenciar os outros atributos do ficheiro e, atravs deles, a informao propriamente dita. taman!o / o comprimento do conte0do informativo, normalmente em n0mero de b5tes. pertena / a indicao de quem criou o ficheiro e, portanto, a quem ele pertence. proteco / o controlo de acesso, especificando quem pode ler o seu conte0do, escrever nele ou reali(ar opera2es de execuo. monitori ao de acesso / datas e tempos dos instantes de criao, de 0ltima modificao e de 0ltimo acesso, por exemplo. locali ao / lista ordenada com a identificao dos blocos +tipicamente, os ind$ces dos elementos do arra# de blocos que constitui a viso l%ica do dispositivo, que cont:m o seu conte0do informativo. tipo / os sistemas de ficheiros admitem ficheiros de tipos diversos fic!eiros regulares / so os ficheiros convencionais, cont:m todo o tipo de informao que normalmente arma(enada em memria de massa. directrios / so ficheiros internos, com um formato pr3definido, que descrevem a estrutura hierrquica da or%ani(ao sub*acente. os dispositivos f$sicos de arma(enamento de massa contemporAneos podem conter em condi2es normais de(enas de milhar, ou milh2es, de ficheiros re%ulares, se todos eles estivessem colocados ao mesmo n$vel, a refer:ncia a um deles em particular, ou a atribuio de um nome a um novo ficheiro, tornar3se3iam pela sua complexidade opera2es quase imposs$veis de reali(ar na prtica. atal!os / so ficheiros internos, com formato pr3definido, que descrevem a locali(ao de um outro ficheiro atravs da especificao do seu encaminhamento na estrutura hierrquica pr3 existente fic!eiros especiais / al%uns sistemas operao fornecem uma viso inte%rada das opera2es de entrada e de sa$da de dados, usando o mesmo con*unto de opera2es, quer para acesso a ficheiros, quer para acesso aos dispositivos f$sicos. quando existem, os fic!eiros especiais modelam esses dispositivos# 1s opera,es que se podem reali(ar sobre um ficheiro so i%ualmente variadas e dependem do sistema de operao# C, porm, um n0cleo base que de al%um modo est sempre presente#

Sistemas de Operao

<

Opera2es reali(adas sobre fic!eiros regulares criao / criada no directrio actual uma entrada +refer:ncia, para o ficheiro. a entrada vai conter o nome e o identificador interno, os atributos restantes so iniciali(ados, nal%uns casos usam3se valores passados como parAmetros da operao. o taman!o do ficheiro, em particular, colocado a (ero, sinali(ando que est va(io. a+ertura / a operao alternativa - criao, sendo efectuada sempre que o ficheiro referenciado * existe. as entradas do directrio so pesquisadas para locali(ar a entrada respectiva, o identificador interno a se%uir usado para aceder aos restantes atributos. 1s opera2es de criao e de a+ertura efectuam3se sempre que se pretende aceder ao conte0do informativo de um ficheiro# O ob*ectivo construir em memria principal uma estrutura de dados que viabili(e uma comunicao eficiente durante as opera2es subsequentes efectuadas sobre o seu conte0do informativo# fec!o / a operao complementar das anteriores, tradu( a terminao da comunicao com o ficheiro. o bloco de dados relativo - parte do conte0do que estava a ser referenciado na altura, escrito no dispositivo, se tiver ocorrido alterao. os atributos relevantes so actuali(ados com a informao da estrutura de dados residente em memria principal e o espao ocupado por ela libertado. posicionamento / o conte0do do ficheiro entendido na perspectiva do pro%ramador de aplica2es como um continuum de dados. o local nesse continuum onde ir ocorrer a prxima transfer:ncia de informao, pode ser definido atravs da operao de posicionamento que fixa a chamada posio actual. 'uando um ficheiro criado ou a+erto, posio actual aponta para o in$cio desse continuum. a reali(ao subsequente de opera2es de escrita ou de leitura condu(em - actuali(ao do valor de posio actual, que passa a apontar para a posio imediatamente a se%uir - locali(ao de escrita ou de leitura do 0ltimo valor# escrita / a operao de transfer:ncia de informao para o ficheiro. os dados so escritos a partir da posio actual e retirados de uma re%io do espao de endereamento do processo atravs de uma varivel passada como parAmetro da operao. leitura / a operao de transfer:ncia de informao do ficheiro. os dados so lidos a partir da posio actual e arma(enados numa re%io do espao de endereamento do processo atravs de uma varivel passada como parAmetro da operao.
Nveis de abstraco associados com o contedo de um ficheiro continuum de dados

posio actual

sequ:ncia de blocos l%icos

L;E

L;E !

L;E 2

L;E <

L;E =

sequ:ncia de blocos f$sicos

F;E i

F;E i G!

F;E i G2

F;E i G<

F;E i G=

F;E i G6

F;E i G7

F;E i GH

F;E i G8

1 transposio da abstraco do continuum de dados para o arma(enamento efectivo desses dados em blocos do dispositivo f$sico imp2e a traduo da posio actual em dois valores distintosD um +loco espec-fico e um deslocamento dentro desse bloco# 1ssim, as opera2es de escrita e de leitura sup2em a monitori(ao constante do bloco onde so efectuadasD quando se iniciam, necessrio %arantir que uma cpia do bloco est acess$vel na estrutura de dados residente em memria principal. depois, durante a reali(ao das opera2es, se os limites do bloco forem ultrapassados, o bloco em causa escrito no dispositivo, caso tenha ocorrido uma alterao, e o bloco se%uinte lido para a estrutura de dados residente em memria principal#

Sistemas de Operao

apagamento o ficheiro retirado do sistema de ficheiros. os blocos de dados de arma(enamento do seu conte0do informativo so libertados e a entrada do directrio correspondente, bem como a re%io onde esto arma(enados os restantes atributos, so sinali(adas va(ias. note3se, porm, que no pode haver comunicao estabelecida com o ficheiro quando a operao efectuada# Opera2es reali(adas sobre directrios criao / criada no directrio actual uma entrada +refer:ncia, para o directrio. a entrada vai conter o nome e o identificador interno, os atributos restantes so iniciali(ados, nal%uns casos usam3se valores passados como parAmetros da operao. ao contrrio do que se passa com um fic!eiro regular, o taman!o do directrio no colocado a (ero, um directrio va(io contm sempre refer:ncias a si prprio e ao directrio hierarquicamente imediatamente acima para que a nave%ao na rvore de directrios possa ser implementada de um modo eficiente. apagamento o directrio retirado do sistema de ficheiros. tal como para um fic!eiro regular, os blocos de dados de arma(enamento do seu conte0do informativo so libertados e a entrada do directrio correspondente, bem como a re%io onde esto arma(enados os restantes atributos, so sinali(adas va(ias. o directrio tem que estar va(io para que a operao possa ter lu%ar# Opera2es reali(adas sobre atal!os criao / criada no directrio actual uma entrada +refer:ncia, para o atalho. a entrada vai conter o nome e o identificador interno, os atributos restantes so iniciali(ados, nal%uns casos usam3se valores passados como parAmetros da operao. o taman!o do atalho colocado num valor que corresponde ao tamanho do string que define o encaminhamento e o conte0do informativo contm esse encaminhamento. apagamento o atalho retirado do sistema de ficheiros. tal como para um fic!eiro regular, o bloco de dados de arma(enamento do seu conte0do informativo libertado e a entrada do directrio correspondente, bem como a re%io onde esto arma(enados os restantes atributos, so sinali(adas va(ias# Opera2es reali(adas sobre ficheiros %enricos +fic!eiros regulares, directrios e atal!os, consulta dos atri+utos / permite o acesso - %eneralidade dos atributos de um ficheiro. alterao dos atri+utos / permite a modificao de al%uns dos atributos de um ficheiro aps a sua criao, exemplos si%nificativos so a pertena e a proteco. alterao do nome o nome do ficheiro modificado. al%umas implementa2es permitem ainda o seu deslocamento dentro da estrutura hierrquica pr3existente, isto , a refer:ncia ao ficheiro pode ser deslocada de um directrio para outro. 4stas opera2es so tipicamente efectuadas apenas pelo processo lanado pelo utili(ador a quem o ficheiro actualmente pertence# 1 operao de alterao do nome, por outro lado, exi%e que no ha*a comunicao estabelecida com o ficheiro para poder ser reali(ada#

A infraestrutura FUS
4m termos %erais, a introduo de um novo sistema de ficheiros no sistema de operao implica a reali(ao de duas tarefas bem definidas# 1 primeira consiste na inte%rao do cdi%o associado implementao do tipo de dados fic!eiro no n0cleo, .ernel, do sistema de operao e, a se%unda, na sua instanciao sobre um ou mais dispositivos de memria de massa do sistema computacional# 4m situa2es de .ernel monol$tico, a inte%rao do cdi%o tradu(3se na criao de um novo .ernel atravs da compilao e linEa%em dos diferentes ficheiros fonte descritivos do sistema de operao# 4m situa2es de .ernel modular, o mdulo associado compilado e linEado separadamente, sendo acoplado a um .ernel pr3existente em run time# 'ualquer que se*a o caso, porm, trata3se de uma tarefa muito complexa e especiali(ada e que exi%e um conhecimento profundo das estruturas de dados internas e da funcionalidade apresentada pelo sistema de operao3alvo, estando, por isso, s esto ao alcance de pro%ramadores de sistemas experientes# F)S4 +/ile s#stem in 0ser Spac1, constitui uma soluo alternativa muito en%enhosa que visa a construo de sistemas de ficheiros no espao do utili(ador, como se se tratasse de meras aplica2es, impedindo que eventuais inconsist:ncias e erros que sur*am na sua implementao, se*am transmitidos directamente ao .ernel e condu(am - sua inoperacionalidade# 1 infraestrutura oferecida formada por duas partes principaisD mdulo de interface com o sistema de fic!eiros / funciona como um mediador de comunica2es entre o interface uniforme de opera2es sobre ficheiros fornecido pelo .ernel e a respectiva implementao em espao do utili(ador.

Sistemas de Operao

+i+lioteca de implementao / fornece as estruturas de dados de comunicao e o prottipo das opera2es que t:m que ser desenvolvidas para %arantir a compatibilidade operacional do tipo de dados definido pelo utili(ador com o modelo sub*acente. fornece, alm disso, um con*unto de funcionalidades destinadas a instanciar o tipo de dados sobre um dispositivo de memria de massa e - sua inte%rao no sistema de operao# O dia%rama abaixo ilustra o tipo de or%ani(ao que resulta quando o sistema de ficheiros sofs11, instanciado sobre o dispositivo m#2is. que representa aqui um ficheiro do sistema de ficheiros ext3 de Linux, inte%rado no sistema de operao usando o F)S4#

ls "la mnt

sofs11mount op,es my isk !home!...!mnt

espao do utili(ador

?ipo de dados sofs11

n0cleo +.ernel, do sistema de operao

interface uniforme de opera2es sobre o sistema de ficheiros

ext3

vfat

/0S1 canal de comunicao dedicado

m#2is.

I responsabilidade do pro%ramador de aplica2es estabelecer a compatibili(ao da semAntica de opera2es providenciada por F)S4 com a implementao do tipo de dados fic!eiro +neste caso, sofs11,# 1ssim, a estrutura de dados struct fuse_operations, definida em /include/fuse/fuse4!, preenchida com a especificao das opera2es correspondentes
static struct fuse_operations op = { .getattr = sofs_getattr, .readlink = sofs_readlink, .getdir = sofs_getdir, .mknod = sofs_mknod, .mkdir = sofs_mkdir, .unlink = sofs_unlink, .rmdir = sofs_rmdir, .symlink = sofs_symlink, .rename = sofs_rename, .link = sofs_link, .chmod = sofs_chmod, .chown = sofs_chown, .truncate = sofs_truncate, .utime = sofs_utime, .open = sofs_open, .read = sofs_read, .write = sofs_write, .statfs = sofs_statfs, .flush = sofs_flush, .release = sofs_release, .fsync = sofs_fsync, .setxattr = sofs_setxattr, .getxattr = sofs_getxattr, .listxattr = sofs_listxattr, .removexattr = sofs_removexattr, .opendir = sofs_opendir, .readdir = sofs_readdir, .releasedir = sofs_releasedir, .fsyncdir = sofs_fsyncdir, .init = sofs_init, .destroy = sofs_destroy };

Sistemas de Operao

e a aplicao sofs11mount, ao ser executada, invoca como 0ltima instruo a funo


int fuse_main #int, char $$, const struct fuse_operations $, void $%;

que procede - inte%rao do sistema de ficheiros no sistema de operao e vai actuar no se%uimento como %estor das opera2es que se reali(am sobre ele# 1 inte%rao sup2e duas fases estabelecimento de um canal de comunicao dedicado entre o mdulo F)S4 locali(ado no .ernel e a aplicao sofs11mount. associao do directrio /!ome/ 444 /mnt do sistema de ficheiros local ao descritor do canal de comunicao pela operao interna de monta%em de um sistema de tipo F)S4 sobre ele# 1 partir daqui, qualquer operao efectuada sobre a sub3rvore de directrios que tem como base o directrio /!ome/ 444 /mnt, entendida como referente a um sistema de tipo F)S4 pelo interface uniforme de acesso a ficheiros do sistema de operao e diri%ida, em consequ:ncia, ao mdulo respectivo do .ernel# 4ste mdulo mantm um re%isto actuali(ado das diferentes opera2es de monta%em que entretanto ocorreram e utili(a o canal de comunicao dedicado, que est associado - sub3rvore de directrios, para retransmitir a operao recebida - aplicao sofs11mount# )sando a tabela struct fuse_operations op, a aplicao converte a operao em uma ou mais opera2es do tipo de dados sofs11, executa3as sobre o dispositivo m#2is. e envia os resultados de volta, pelo canal de comunicao dedicado, ao mdulo F)S4 do .ernel que, por sua ve(, os fa( che%ar - aplicao onde a operao teve ori%em#

Arquitectura do sistema de ficheiros sofs!!


O ficheiro sofs5const4! especifica os valores de um con*unto de constantes bsicas que caracteri(am a abstraco do dispositivo de memria de massa como um arra# de blocos# 4m particular, o tamanho em b5tes de cada bloco do dispositivo de memria de massa, &6O7'5S8(1, colocado a 6!2 e imp2e3se que as opera2es de reserva e libertao de blocos para arma(enamento de dados se*am reali(adas sobre %rupos de = blocos cont$%uos, aquilo que se desi%na de cluster#

"irect#rios
Jara que a informao se*a mais rapidamente acess$vel e se possam isolar re%i2es de arma(enamento dentro da memria de massa, os sistemas de ficheiros so normalmente concebidos como uma hierarquia, ou rvore, de directrios# )m directrio constitui neste sentido um tipo particular de ficheiro cu*a funo materiali(ar a descrio da estrutura hierrquica sub*acente, contendo refer:ncias para os ficheiros que so vis$veis a um dado n$vel da hierarquia interna# O seu conte0do informativo pode ser entendido como uma tabela de refer:ncias onde cada entrada associa o nome do ficheiro com o seu identificador interno# O tipo de dados &' ir(ntry est na base desta concepo#
typedef struct so ir(ntry { unsigned char name)*+,_-+*(.1/; !$ the name of a file #whether a regular file, a directory or a sym0olic link%1 it must 0e a -23"terminated string $! uint32_t n4node; !$ the associated inode num0er $! } &' ir(ntry;

Beve notar3se, porm, que esta tabela tem um tamanho varivel# Knicialmente, quando o directrio criado, a tabela tem 297 entradas. depois, - medida que o conte0do informativo vai crescendo, o tamanho da tabela incrementado, introdu(indo3se de cada ve( 297 novas entradas# )m outro aspecto a ter em conta que, para que se*a poss$vel nave%ar na rvore de directrios, um directrio va(io no si%nifica que todas as suas entradas este*am livres# 1s duas primeiras entradas esto sempre ocupadasD a primeira, a que atribu$do o nome L .M, constitui uma auto3refer:ncia. a se%unda, de nome L..M, referencia o directrio imediatamente acima na hierarquia# )ma entrada considerada livre se pelo menos o primeiro caracter do campo name for o caracter N56N# Finalmente, a implementao de um mecanismo de recuperao de ficheiros anteriormente apa%ados, undelete, exi%e que as entradas livres possam estar em dois estados distintosD estado dito limpo, quando todos os caracteres do campo name so N56N e o campo n4node tem o valor -233_4-' (, e estado dito su:o, quando s o primeiro caracter do campo name i%ual a N56N#

Sistemas de Operao

4sta conveno permite que, se um ficheiro for apa%ado, o primeiro e o 0ltimo caracteres do campo
name so trocados, o que transforma a entrada de ocupada em livre, no estado su:o, e possibilita, se

necessrio, a sua recuperao posterior# Jor outro lado, se uma nova refer:ncia a um ficheiro for criada no directrio, deve ser sempre feita sobre uma entrada livre no estado limpo#

N#s$i
)m n"i, ou n identificador, a estrutura de dados onde esto alo*ados os restantes atributos de um ficheiro# Os ns3i esto or%ani(ados numa tabela interna de tamanho fixo# I importante notar que, como cada ficheiro do sistema de ficheiros tem os seus atributos arma(enados num n3i 0nico, a sua locali(ao na tabela +arra#, constitui o identificador interno do ficheiro e o n0mero mximo de ficheiros distintos residentes no sistema de ficheiros fixo e i%ual ao tamanho dessa tabela# O n3i descrito pelo tipo de dados &'4node#
typedef struct so4node { uint16_t mode; !$ it stores the file type #either a regular file, a directory or a sym0olic link% and its access permissions1 0its 7"6 rwx permissions for other 0its 8"9 rwx permissions for group 0its :"; rwx permissions for owner 0it < is set if it represents a sym0olic link 0it 16 is set if it represents a regular file 0it 11 is set if it represents a directory 0it 17 is set if it is free the other 0its are presently reserved $! uint16_t refcount; !$ num0er of hard links #directory entries% associated to the inode $! uint32_t owner; !$ user 4 of the file owner $! uint32_t group; !$ group 4 of the file owner $! $ 0yte has 0een written $! uint32_t si=e; !$ the farthest position from the 0eginning of the file information content . 1 where a 0yte has 0een written $! uint32_t clucount; !$ total num0er of data clusters attached to the file #this means 0oth the data clusters that hold the file information content and the ones that hold the auxiliary data structures for indirect referencing% $! union inode>irst v 1; !$ context dependent varia0le of type 1 $! union inode&econd v 7; !$ context dependent varia0le of type 7 $! uint32_t d)-_ 4?(@A/; !$ direct references to the data clusters that comprise the file information content $! uint32_t i1; !$ reference to the data cluster that holds the group of direct references to the data clusters that next comprise the file information content $! uint32_t i7; !$ reference to the data cluster that holds an array of indirect references holding in its groups of direct references to the data clusters that turn successive comprise the file information content $! } &'4node;

O campo mode serve simultaneamente para especificar o estado do n3i, ocupado ou livre, o tipo do ficheiro descrito, atal!o, directrio ou fic!eiro regular, e o controlo de acesso ao ficheiro, indicando, NrN, quem pode ler o seu conte0do +listar, se for um directrio,, N wN, alterar o seu conte0do +criar ou apa%ar ficheiros, se for um directrio,, ou, NxN, reali(ar sobre ele opera2es de execuo +aceder aos ficheiros referenciados, se for um directrio,# Os utili(adores esto divididos em tr:s classesD o utili(ador a que pertence o ficheiro, o;ner, os utili(adores inclu$dos no mesmo %rupo do o;ner, group, e os utili(adores restantes, ot!er# ?al como para as entradas de directrio, o mecanismo de recuperao de ficheiros anteriormente apa%ados imp2e que os ns3i livres este*am em dois estados distintosD estado dito limpo, quando o n3i no foi usado antes para descrever um ficheiro entretanto apa%ado, s o bit !2 est set, e estado dito su:o, em caso contrrio, o bit !2 e um dos bits O, ! ou !! esto set# 4m princ$pio, quando um novo ficheiro criado no sistema de ficheiros, deve ser usado um n3i no estado limpo para conter a sua descrio. porm, se todos os ns3i livres estiverem su:os, aquele que for usado tem que ser colocado em primeiro lu%ar no estado limpo, o que si%nifica que o ficheiro apa%ado, que era descrito por ele, no poder mais vir a ser recuperado#

Sistemas de Operao

?orna3se muitas ve(es conveniente manter refer:ncias para um dado ficheiro em diferentes re%i2es da rvore de directrios# )ma forma de se fa(er isso, de uma forma indirecta, criando um atal!o que descreva a locali(ao do ficheiro em causa na rvore de directrios atravs um camin!o a+soluto +iniciado na rai( do sistema de ficheiros, ou relativo +iniciado no directrio onde inclu$da a descrio,# 4sta soluo tem, no entanto, um problemaD quando o ficheiro referenciado apa%ado, deslocado de um directrio para outro, ou o seu nome modificado, os atalhos associados passam a referenciar coisa nenhuma e no fcil, nem eficiente, estabelecer um procedimento que resolva a questo# )m meio alternativo mais se%uro e efica( consiste no estabelecimento daquilo que se desi%na de ligao primitiva +ou !ard lin.,D a entrada de directrio que criada, em ve( de referenciar o identificador interno de um ficheiro de texto, o atal!o, que contm a descrio da locali(ao do ficheiro em causa, passa a referenciar directamente o identificador interno do prprio ficheiro# >estas condi2es, a alterao do nome ou a deslocali(ao de uma refer:ncia passam a ser problemas puramente locais da li%ao primitiva envolvida na operao e no afectam as restantes li%a2es eventualmente existentes# Bo mesmo modo, mantendo a conta%em do n0mero de li%a2es primitivas efectuadas, campo refcount, o apa%a3 mento de um ficheiro passa a ser uma operao que se desenvolve prioritariamente sobre a entrada de directrio / o ficheiro s realmente apa%ado quando o n0mero de li%a2es primitivas se torna (ero# Os campos owner e group definem a relao de pertena e so usados, con*untamente com os bits de controlo de acesso do campo mode, para estabelecer o tipo de opera2es que um utili(ador %enrico pode reali(ar sobre o ficheiro# 1o definir3se uma estrutura de dados, acontece frequentemente que existem campos que s t:m si%nificado quando as variveis desse tipo se encontram num estado bem definido# >estas cirscuntAncias, comum definir3se campos especiais, cu*o si%nificado depende do contexto da varivel e em que, por quest2es de poupana de espao, as diferentes interpreta2es ocupam o mesmo espao de arma(ena3 mento# 4ste mecanismo foi usado aqui na especificao dos campos v 1 e v 7 e descrito pelos tipos de dados union inode>irst e union inode&econd, respectivamente#
union inode>irst { uint32_t atime; uint32_t next;

!$ if inode is in use, time of last file access $! !$ if inode is free, reference to the next inode in the dou0le"linked list of free inodes $!

P.
union inode&econd { uint32_t mtime; uint32_t prev;

!$ if inode is in use, time of last file modification $! !$ if inode is free, reference to the previous inode in the dou0le"linked list of free inodes $!

P. Os campos v 1.atime e v 7.mtime constituem a monitori(ao de acesso ao ficheiro# >ote3se que eles s t:m este si%nificado em ns3i ocupados# 4m n3i livres, devem ser interpretados, respectivamente, como v 1.next e v 7.prev, ponteiros que vo permitir implementar a lista de ns"i livres como uma lista bili%ada# O acesso eficiente ao conte0do informativo de um ficheiro, como um continuum de dados, sup2e que se possa constituir uma lista ordenada de refer:ncias aos clusters f$sicos da unidade de memria de massa aonde a informao est arma(enada# ?udo se passa como se o continuum fosse dividido em pedaos com o tamanho de um cluster e a locali(ao de cada cluster, correspondente ao $ndice do primeiro bloco constituinte do cluster quando o dispositivo f$sico visto como um arra# de blocos, fosse arma(enada no elemento de um arra# d, desi%nado de arra# de refer<ncias directas, cu*o $ndice representa o seu n0mero de ordem# Qom efeito, se*am p a posio actual de um dado b5te de informao no continuum de dados e dRlS e off as variveis que permitem locali(ar o mesmo b5te no cluster correspondente da memria de massa# 1s rela2es entre estas variveis so expressas por p = &S697 l off l = p div &S697 off = p mod &S697 em que as opera2es div e mod representam, respectivamente, o =uociente e o resto da diviso inteira dos operandos e &S697 o tamanho em b5tes da re%io de arma(enamento de um cluster#

Sistemas de Operao

1ssim sendo, o n3i descritivo de um ficheiro ter que incluir de al%um modo o arra# d# Qontudo, se se pretender que o sistema de ficheiros possa conter ficheiros muito %randes, o tamanho desse arra# pode assumir um tamanho incomportvel# Be facto, no caso presente em que &S697 li%eiramente inferior a 29b5tes, a possibilidade de se ter um ficheiro com um conte0do informativo de 2Tb5tes implicaria que o n0mero de elementos do arra# d fosse um pouco mais de um milhoU O que se fa( habitualmente nestas condi2es estabelecer um compromisso entre o espao necessrio e a efici:ncia no acesso, prevendo mecanismos de referenciao indirecta de n$veis pro%ressivamente mais elevados#
%eferenciao directa

dR S dR!S

clusters de dados

dR>VBKW4Q? /!S

%eferenciao simp&esmente indirecta

dR>VBKW4Q? S dR>VBKW4Q?G!S i1 ou i1R S dR>VBKW4Q?GWJQ/!S

clusters de dados

%eferenciao dup&amente indirecta

i2

i1R!S i1R2S i1R.S i1RWJQS

dR>VBKW4Q?GWJQX.S dR>VBKW4Q?GWJQX.G!S

clusters de dados

dR>VBKW4Q?GWJQX+ .G!, /!S

>o caso presente, em que foram implementados mecanismos de referenciao directa, simplesmente indirecta e duplamente indirecta atravs do arra# dR>VBKW4Q?S e das variveis i1 e i2, o tamanho mximo em n0mero de b5tes de um ficheiro pass$vel de incluso no sistema de ficheiros sofs11 de si e5max = &S697 [ $528>17% >97 >97 ! ] , onde &S697 representa o n0mero de b5tes do conte0do informativo de um cluster e >97 o n0mero de refer:ncias a clusters que podem ser a$ arma(enadas#

Sistemas de Operao

Jor outro lado, a locali(ao em memria de massa de um b5te de informao, cu*a posio actual no continuum de dados p, calculada por referenciao directaD l $528>17% n#Y do cluster de dadosD dRlS / posio dentro do clusterD off referenciao simplesmente indirectaD $528>17% l $528>17% >97 n#Y do cluster onde est locali(ada a continuao do arra# de refer<ncias directasD i1 ou i1R S conte0do do cluster, entendido como um arra# parcelar de refer<ncias directasD d? posio relativa dentro do arra# parcelar de refer<ncias directasD l? Z +l $528>17%, mod >97 n#Y do cluster de dadosD d?Rl?S / posio dentro do clusterD off referenciao duplamente indirectaD $528>17% >97 l $528>17% >97 >97 ! n#Y do cluster onde est locali(ada a continuao do arra# de refer<ncias indirectasD i2 conte0do do cluster, entendido como um arra# parcelar de refer<ncias indirectasD i?1 posio relativa dentro do arra# parcelar de refer<ncias indirectasD l?? Z +l $528>17% >97, div >97 n#Y do cluster onde est locali(ada a continuao do arra# de refer<ncias directasD i?1Rl??S conte0do do cluster, entendido como um arra# parcelar de refer<ncias directasD d? posio relativa dentro do arra# parcelar de refer<ncias directasD l? Z +l $528>17% >97, mod >97 n#Y do cluster de dadosD d?Rl?S / posio dentro do clusterD off # Jor 0ltimo, o tamanho em n0mero de b5tes do ficheiro descrito vem expresso pelo campo si=e e o n0mero de clusters que o seu conte0do informativo ocupa, pelo campo clucount# >ote3se, porm, que o entendimento dado a estas variveis muito precisoD taman!o si%nifica o maior valor al%uma ve( assumido por posio actual aps a escrita de um b5te no continuum de dados. n*mero de clusters ocupados corresponde ao n0mero de clusters que esto efectivamente reservados para arma(enamento do conte0do informativo, incluindo portanto, se necessrio, os clusters de arma(enamento dos arra#s parcelares de refer<ncias directas e indirectas#

Or'ani(ao interna
O dispositivo de memria de massa, enquanto arra# de blocos, entendido como estando dividido em tr:s %randes re%i2es com si%nificado bem definido

superbloco

tabela de ns3i

(ona de dados

super+loco / ocupa o primeiro bloco e contm informao %lobal sobre o sistema de ficheiros, nomeadamente sobre o tamanho e a locali(ao das re%i2es restantes. ta+ela de ns"i / constitui um arra# cu*os elementos so ns3i. os ns3i livres formam uma lista que est or%ani(ada como um FKFO para possibilitar que, no acto de reserva de um n3i, se tenha prioritariamente acesso a um n3i no estado dito limpo. ona de dados / constitui um arra# cu*os elementos so clusters de dados. os clusters de dados livres esto enquadradas em diversas estruturas de que no seu con*unto formam tambm um FKFO para possibilitar que, no acto de reserva de um cluster de dados, se tenha prioritariamente acesso a um cluster de dados no estado dito limpo# 1 ocupao completa do arra# de blocos imp2e que a equao abaixo tenha solu2es inteiras $%&l. = ! $&l.8n% $%7lt &6O7'S591>5760S%1> , em que $%&l. representa o n0mero total de blocos do dispositivo de memria de massa, $&l.8n% o n0mero de blocos que a tabela de ns3i ocupa e $%7lt o n0mero total de clusters da (ona de dados# 1 estrutura de dados que define o super+loco pode considerar3se dividida em quatro %randes re%i2es de parametri(ao ca+eal!o / formado pelos campos magic, version, name, ntotal e mstat que cont:m o cdi%o de identificao e a verso do sistema de ficheiros, o nome e o tamanho +em n0mero de

Sistemas de Operao

!!

blocos, do dispositivo de memria de massa onde ele est instalado e uma flag de sinali(ao que indica se o dispositivo foi adequadamente desmontado +retirado de operao, a 0ltima ve( que foi montado +posto em operao,. caracteri ao da ta+ela de ns"i / descreve a locali(ao ita0le_start, e o tamanho +em n0mero de blocos ocupados, ita0le_si=e, e em n0mero de elementos, itotal,, da tabela de ns3i que suposta estar or%ani(ada num arra#. os ns3i livres, cu*o n0mero indicado em ifree, formam adicionalmente uma lista bili%ada cu*os $ndices da cabea, ihead, e da cauda, itail, correspondentes, respectivamente, aos pontos de retirada e de insero de elementos na lista, so tambm fornecidos +trata3se no fundo de uma memria de tipo FKFO dinAmica que interli%a todos os ns3i presentemente livres, usando os prprios ns3i como ns da lista,. caracteri ao da ona de dados / descreve a locali(ao d=one_start, o tamanho em n0mero de elementos, d=one_total, da (ona de dados que suposta estar or%ani(ada num arra5 de clusters. os clusters livres, cu*o n0mero indicado em d=one_free, esto or%ani(ados em tr:s componentes de refer:ncia principaisD as cac!es de retirada e de insero de refer:ncias, d=one_retriev e d=one_insert, que constituem re%i2es de arma(enamento temporrio de acesso fcil e eficiente +so estruturas de dados estticas residentes no superbloco, e a lista bili%ada que constitui o repositrio %eral de clusters livres, cu*as refer:ncias da cabea, dhead, e da cauda, dtail, correspondentes, respectivamente, aos pontos de retirada e de insero de elementos na lista, so tambm fornecidos +trata3se no fundo de uma memria de tipo FKFO dinAmica que interli%a todos os clusters livres no referenciados nas cac!es, usando os prprios clusters como ns da lista,. ona reservada espao excedente para %arantir que o tamanho em b5tes de &'&uperBlock exactamente i%ual a B3'@C_&4D(#
typedef struct so&uperBlock { !$ Eeader $! uint32_t magic; !$ magic num0er " file system id num0er uint32_t version; !$ version num0er unsigned char name)F+?A4A4'-_-+*(_&4D(/; !$ volume name uint32_t ntotal; !$ total num0er of 0locks in the device uint32_t mstat; !$ flag signaling if the file system was properly unmounted the last time it was mounted !$ Inode table metadata $! uint32_t ita0le_start; !$ physical num0er of the 0lock where the ta0le of inodes starts uint32_t ita0le_si=e; !$ num0er of 0locks that the ta0le of inodes comprises uint32_t itotal; !$ total num0er of inodes uint32_t ifree; !$ num0er of free inodes uint32_t ihead; !$ index of the array element that forms the head of the dou0le"linked list of free inodes #point of retrieval% uint32_t itail; !$ index of the array element that forms the tail of the dou0le"linked list of free inodes #point of insertion% !$ Data zone metadata $! uint32_t d=one_start; !$ physical num0er of the 0lock where the data =one starts #physical num0er of the first data cluster% uint32_t d=one_total; !$ total num0er of data clusters uint32_t d=one_free; !$ num0er of free data clusters struct f@-ode d=one_retriev; !$ retrieval cache of references to free data clusters struct f@-ode d=one_insert; !$ insertion cache of references to free data clusters uint32_t dhead; !$ logical num0er of the data cluster that forms the head of the dou0le"linked list of free data clusters #point of retrieval% uint32_t dtail; !$ logical num0er of the data cluster that forms the tail of the dou0le"linked list of free data clusters #point of insertion% !$ Padded area to ensure superblock structure is BLOCK_SIZE bytes lon $! unsigned char reserved)B3'@C_&4D( G F+?A4A4'-_-+*(_&4D( G 18 $ sizeof#uint97_t% " 7 $ sizeof#struct f@-ode%/; } &'&uperBlock;

$! $! $! $! $! $! $! $! $! $! $!

$! $! $! $! $! $! $!

!2

Sistemas de Operao

Aspectos operacionais
O esquema abaixo ilustra o modo como a ta+ela de ns"i est operacionalmente or%ani(ada#

n3i ocupado

ihead +ponto de retirada, lista de n!s"i li#res n3i livre

itail +ponto de insero, ta ela de n!s"i

Qomo foi referido atrs, a ona de dados est or%ani(ada primeiramente num arra# de clusters de dados# >este sentido, uma refer<ncia a um cluster constitui o $ndice ou o n*mero lgico do cluster no arra## O n*mero f-sico correspondente , no fundo, o $ndice do primeiro bloco que o forma na viso l%ica do dispositivo f$sico como um arra# de blocos# 1 relao entre ambos dada pela equao $/7lt = d(oneVstart $67lt &6O7'S591>5760S%1> , onde >FQlt representa o n0mero f$sico e >LQlt o n0mero l%ico do cluster# 1 estrutura de dados que define o cluster pode considerar3se dividida em duas %randes re%i2es ca+eal!o / contm os campos prev, next, e stat. os dois primeiros t:m a ver com o facto que os prprios clusters livres inclu$dos no repositrio %eral poderem formar ns de uma estrutura dinAmica, o terceiro especifica o estado do clusterD quando ocupado, ou livre no estado su*o, indica o n0mero do n3i a que pertence+u,, quando livre no estado limpo i%ual a >)LLVK>OB4. corpo / constitui a re%io de arma(enamento propriamente dita, estruturada de modo a poder conter parte do continuum de dados do ficheiro, um sub3arra# de refer:ncias a outros clusters ou um sub3arra# de entradas de directrio# O tipo de dados associado, &' ata@lust, definido por
typedef struct so ata@lust { !$ !eader $! uint32_t prev; !$ if the data cluster is free and resides in the general repository of free data clusters, reference to the logical num0er of the previous data cluster in the dou0le"linked list; when in use, reference to -233_@32&A(? uint32_t next; !$ if the data cluster is free and resides in the general repository of free data clusters, reference to the logical num0er of the next data cluster in the dou0le"linked list; when in use, reference to -233_@32&A(? uint32_t stat; !$ status of the data cluster !$ Body $! union info@ontent info; !$ cluster information content } &' ata@lust;

$!

$! $! $!

4m princ$pio, quando o tamanho de um ficheiro cresce, deve ser usado um cluster de dados no estado limpo para arma(enar a nova informao. porm, se todos os clusters de dados livres estiverem su:os, aquele que for usado tem que ser colocado em primeiro lu%ar no estado limpo, o que si%nifica que a parte do conte0do informativo do ficheiro apa%ado, nele contido, no poder mais vir a ser recuperado#

Sistemas de Operao

!<

1 re%io de arma(enamento de um cluster descrita pelo tipo de dados union info@ontent para permitir a versatilidade acima referida#
union info@ontent { unsigned char data)B&3F@/; !$ 0yte stream $! uint32_t ref)?F@/; !$ su0"array of data cluster references $! &' ir(ntry de) F@/; !$ su0"array of directory entries $! };

1s cac!es de retirada e de insero de refer:ncias a clusters de dados so baseadas no tipo de dados se%uinte
struct f@-ode { uint32_t cache_idx;

!$ index of the first filled!free array element $! uint32_t cache) D'-(_@+@E(_&4D(/; !$ storage area whose elements are the logical num0ers of free data clusters $!

};

O esquema abaixo ilustra o modo como a ta+ela de clusters de dados est operacionalmente or%ani(ada#
cache_idx cache_idx

entrada ocupada

cac%e de retirada de clusters li#res

cac%e de insero de clusters li#res

entrada livre

reposit!rio $eral de cluster de dados li#res cluster de dados ocupado

dhead +ponto de retirada, dtail +ponto de insero, ta ela de clusters de dados

cluster de dados livre

!=

Sistemas de Operao

)mp&ementao
Bada a sua complexidade, a implementao do sistema de ficheiros sofs11 est or%ani(ada numa estrutura hierrquica de funcionalidades que pressup2e diferentes n$veis de abstraco# 4ste tipo de decomposio de solu2es comummente conhecido como ar=uitectura em camadas# Qada camada, ou n$vel de abstraco, est or%ani(ada num ou mais mdulos e apresenta ao pro%ramador um A98 +Application 9rogramming 8nterface, que descreve sintctica e semanticamente as opera2es que podem ser efectuadas a este n$vel# Kdealmente, cada camada deve comunicar apenas com a camada imediatamente abaixo# Qontudo, como em muitos casos esta re%ra exi%iria a replicao de opera2es de camadas inferiores em camadas superiores, aceitvel que cada camada possa comunicar com todas aquelas que lhe so inferiores# 1presenta3se a se%uir a arquitectura de camadas da implementao de sofs11#

c!amadas ao sistema +s5scalls, manipulao das entradas de directrio +ifuncsV=, manipulao dos clusters de dados +ifuncsV<, manipulao dos ns"i +ifuncsV2, manipulao de listas +iligadas +ifuncsV!, gesto +ase das estruturas de dados internas +basicoper [, basicconsist [, acesso a +locos/clusters do dispositivo em modo +uffered/un+uffered +ra&KO!![, ferramenta de monitori ao +debu%%in% [,

suporte f-sico

1s camadas referenciadas com um N$N so fornecidas * implementadas# O ob*ectivo do trabalho ser, pois, a implementao das restantes camadas e de um pro%rama que permita a formatao de um dispositivo com o sistema de ficheiros sofs11# 1 validao da implementao ser feita atravs da inte%rao do sistema de ficheiros numa plataforma hard&are que execute o sistema de operao Linux# So ainda fornecidas al%umas ferramentas para apoio ao teste e validao do cdi%o das diferentes camadas - medida que este desenvolvido#