Sistema de Ficheiros
Composto por um conjunto de entidades fundamentais:
um sistema de organizao de nomes para identificao dos ficheiros; uma interface programtica para comunicao entre os processos; sistema de ficheiros
Ficheiro:
coleco de dados persistentes, geralmente relacionados, identificados por um nome.
A designao directrio apropriada porque estabelece a associao entre o nome e o descritor do ficheiro Um directrio pode conter:
toda a meta-informao relativa a um ficheiro ou apenas uma parte dela, sendo a restante distribuda por outras estruturas auxiliares que sero descritas mais frente.
ficheiro
conjunto de dados persistentes, geralmente relacionados, identificado por um nome composto por:
nome: identifica o ficheiro perante o utilizador descritor de ficheiro: estrutura de dados em memria secundria com informao sobre o ficheiro (dimenso, datas de criao, modificao e acesso, dono, autorizaes de acesso) informao: dados guardados em memria secundria
portanto, para alm do nome, um ficheiro possui ainda outro tipo de informao que facilita a sua localizao e gesto:
dimenso, datas de criao, modificao e acesso, direitos de acesso, e localizao da informao em memria secundria. O conjunto destes dados usualmente designado por meta-informao.
Portanto, mantida uma Tabela de Ficheiros Abertos Existem funes sistema para iniciar a utilizao do ficheiro e para termin-la, sendo o acesso efectuado em trs etapas:
Abertura do ficheiro, dado o nome.
O sistema pesquisa o directrio, copia a meta-informao para memria e devolve ao utilizador um identificador que usado como referncia para essa posio de memria.
Fecho do ficheiro.
Esta operao necessria para libertar a memria que continha a meta-informao do ficheiro e actualizar essa informao no sistema de memria secundria.
O Multics foi o primeiro sistema a propor a organizao hierrquica dos nomes dos ficheiros, na forma de uma rvore:
soluo que hoje praticamente todos os sistemas usam
Organizao Hierrquica
/ etc src
usr bin
unix tty00
dev tty01
pjpf
passwd
Hierarquia de Nomes
Organizao hierrquica (rvore):
soluo proposta no Multics os directrios contm caminhos de acesso para ns descendentes a partir de um directrio raiz ficheiros e directorias vazias so ns terminais (folhas) caminho de acesso (pathname): cadeia de caracteres que localiza um ficheiro ou directoria na rvore nomes absolutos ou relativos:
absoluto: caminho de acesso desde a raiz relativo: caminho de acesso a partir do directrio corrente
directrio corrente mantido para cada processo como parte do seu contexto
Nomes relativos:
ter de fornecer sempre o nome completo do ficheiro fastidioso e pouco flexvel. E.g., a especificao dos ficheiros a serem includos num programa tinha de ser alterada se o programa fosse transportado para outro directrio
Problema:
quando se pretende apagar o ficheiro com o nome /a/b/c. apagar o contedo do ficheiro ou apenas o nome?
Espao de Nomes
Quer o Windows quer o Unix tm um espao de nomes uniforme.
ficheiros, directrios, dispositivos so referenciados usando exactamente a mesma sintaxe.
b c x d y /dev/hd1 z f e /dev/hd0 /
Mount:
esta operao consiste em ligar a raiz do novo sistema de ficheiro a um directrio do sistema de ficheiros raiz.
Nomes e Extenses
usual, os nomes dos ficheiros terem uma extenso que d alguma informao sobre o seu contedo:
Descrio Cdigo fonte em C. Cdigo objecto resultante de uma compilao. Cdigo executvel. Hipertexto para ser visualizado por navegador de rede Ficheiro de dados. Representao comprimida de som digital
Tipos de Ficheiros
O tipo de um ficheiro est relacionado com o seu contedo e forma de acesso Genericamente:
um ficheiro composto por um conjunto de registos (de dimenso fixa ou varivel) de um determinado tipo, apesar de em muitos casos ser meramente estruturados como uma sequncia de bytes. o mtodo de acesso pode ser sequencial, directo ou por chave.
Atributos de um Ficheiro
O tipo de um ficheiro um dos vrios atributos que cada ficheiro possui. Estes atributos podem variar de sistema de ficheiros para sistema de ficheiros Esto tipicamente armazenados na meta-informao do ficheiro. Para alm do tipo, a meta-informao do ficheiro possui usualmente os seguintes atributos:
Proteco quem pode aceder ao ficheiro e quais as operaes que pode realizar. Identificao do dono do ficheiro geralmente quem o criou. Dimenso do ficheiro por vezes automaticamente actualizada quando o ficheiro cresce ou diminui. Data de criao ltima leitura e ltima escrita.
FILE *file = fopen("filename", "a"); /* ... */ fwrite(buffer0, sizeof(char), BUFFER_SIZE, file); /* Escreve dados num tampo da libc */ fwrite(buffer0, sizeof(char), BUFFER_SIZE, file); fflush(file); /* ... */ fclose(file);
10
Sistemas de Ficheiros
Estrutura Interna dos Sistemas de Armazenamento
Existem situaes em que til utilizar um sistema de ficheiros para gerir informao em memria voltil:
E.g., o sistema operativo Linux utiliza uma soluo deste tipo (vulgo RAM Disk) durante o seu processo de instalao. neste caso, a utilidade do sistema de ficheiros no resulta da sua capacidade de gerir grandes volumes de dados de forma eficiente, mas sim da interface uniforme e da organizao da informao que estes proporcionam.
11
Cada disco possui um ou mais pratos de um material magntico Em cada face de cada prato a informao escrita em pistas concntricas, e cada pista composta por um conjunto de sectores O conjunto das pistas com o mesmo raio forma um cilindro Cada prato est dividido em blocos de dimenso fixa, denominados sectores. Os sectores so a unidade mnima de leitura e escrita em disco.
a sua dimenso habitual de 512 ou 1024 byte. a leitura ou escrita de um sector faz-se quando a cabea do respectivo prato est sobre o sector respectivo.
Tempos tpicos para um disco de 7200 RPM com 272 a 472 sectores por pista (o nmero de sectores maior nas pistas exteriores):
Nome Tempo transferncia Tempo de posicionamento Tempo latncia mdio Forma de clculo Tempo de revoluo / sectores por pista Tempo de posicionamento da cabea na pista Tempo de revoluo / 2 Valor tpico 17s 4-8ms 4ms
12
13
Organizao Lgica
Cada dispositivo pode armazenar em simultneo vrios sistemas de ficheiros:
necessrio manter informao sobre o espao ocupado por cada um dos sistemas de ficheiros de forma persistente esta informao est organizada em estruturas guardadas de forma sequencial no disco.
Constituio de um disco, com as vrias componentes que suportam a existncia de vrios sistemas de ficheiros independentes em cada disco:
14
necessrio um outro sistema de armazenamento alternativo que permita a leitura e execuo do SO:
independente do tipo de sistema de ficheiros e do tipo de SO, mas pode variar com o tipo de arquitectura do computador, (frequentemente a soluo utilizada semelhante s arquitecturas do tipo IBM-PC).
15
Organizao em Lista
Forma mais simples de organizar um sistema de ficheiros: cada ficheiro constitudo por um registo de dimenso varivel com quatro campos
o nome dos ficheiros tm dimenso fixa ( possvel considerar variantes em que a dimenso do nome varivel) No caso dos sistemas de ficheiros em CD que s podem ser escritos uma vez: todos os ficheiros ficam compactados uns a seguir aos outros No caso de sistemas onde possvel apagar ficheiros, para alm da lista antes indicada, necessrio manter uma outra lista: com todos os espaos no ocupados para que seja possvel localizar um espao onde colocar um novo ficheiro.
16
Directrio
Dados
os nomes dos ficheiros ficam perto uns dos outros no disco aumenta a eficncia da procura de um ficheiro dado o seu nome.
17
O sistema de ficheiros do CP/M (um dos primeiros para computadores pessoais, 1977):
utilizava uma estrutura deste tipo cada entrada do directrio composta por 32 bytes
Neste sistema:
cada bloco possua 1 Kbyte cda um dos 16 bytes do mapa de blocos continha um ndice de bloco logo, a dimenso mxima de um ficheiro era 16 KBytes valores claramente insuficientes o maior problema que para os aumentar necessrio aumentar o mapa de blocos de todas as entradas do directrio (penalizando assim os ficheiros de reduzida dimenso) i.e. os ficheiros mais pequenos continuariam a utilizar um mapa de blocos grande ainda que dele no necessitassem, desperdiando assim memria.
18
19
Desvantagens do FAT
Elevada dimenso da tabela de alocao quando os discos tm dimenses muito grandes:
e.g., com disco de 500 GBytes, blocos de 4 KBytes e ponteiros de 32 bit, a tabela de Alocao pode ocupar 500 MBytes (500G/4K 4 bytes).
20
Ao contrrio dos sistemas do tipo FAT, em que a entrada de um directrio aponta directamente para o primeiro bloco ocupado pelo ficheiro:
nos sistemas de ficheiros com descritores, as entradas dos directrios apontam para os descritores de ficheiros e estes, por sua vez, para os blocos.
Vantagem 2:
podem existir vrias entradas de directrio a apontar para o mesmo ficheiro a coerncia dos seus atributos (por exemplo, dimenso, datas, controlo de acesso, etc.) est sempre garantida, pois o descritor apenas um.
Bloco de boot
Descritor do volume
Tabela de alocao
Descritores de ficheiros
Blocos
Ficheiro
Directrio
O nmero mximo de ficheiros numa partio dado pelo nmero mximo de descritores nessa tabela.
21
Os directrios s tm que:
efectuar a ligao entre um nome do ficheiro e o nmero do seu descritor
0 12 24 40
54 79
1 1 1 1
2 2 6 6
1 2 6 7
2 2 1 1
. . c m
\0 . a a
\0 \0 r r
\0 \0 l q o u s e \0 s \0 \0
23 256
22
23
Quando existe uma operao sobre um ficheiro j aberto, o identificador do ficheiro permite identificar na estrutura de descritores de ficheiros abertos do processo o ponteiro para o objecto que descreve o ficheiro na estrutura de ficheiros abertos global (passo ). De seguida perguntado ao gestor de cache se o pedido pode ser satisfeito pela cache (passo Se no puder ento invocada a funo correspondente operao desejada do sistema de ficheiros, dando-lhe como parmetro o descritor de ficheiro correspondente (passo ). Finalmente, os blocos de dados do ficheiro so lidos ou escritos a partir da informao de localizao dos blocos residente no descritor de ficheiro (passo ). ).
Note-se que:
os identificadores para a tabela global esto na tabela privada que est em memria protegida, pelo que no podem ser alterados
24
Sistema de Ficheiros
Linux
Ficheiros em memria
MapearFicheiro(Fd,pos,endereo,dim) DesMapearFicheiro(endereo,dim) ListaDir (Nome, Tampo) MudaDir (Nome) CriaDir (Nome, Proteco) RemoveDir(Nome) Montar (Directrio, Dispositivo) Desmontar (Directrio)
Directrios
Sistemas de Ficheiros
25
Inode:
descritor de cada ficheiro designa-se por index-node ou inode h inodes que no esto associados a ficheiros (ver I/O)
Campo i_mode i_uid i_size i_atime i_ctime i_mtime i_dtime i_gid i_links_count i_blocks i_flags i_block[15] Descrio Tipo de ficheiro e direitos de acesso Identificador do utilizador Dimenso do ficheiro Tempo do ltimo acesso Tempo da ltima alterao do inode Tempo da ltima alterao do ficheiro Tempo da remoo do ficheiro Identificador do grupo do utilizador Contador de hard links Nmero de blocos ocupado pelo ficheiro Flags vrias do ficheiro Vector de 15 unidades para blocos de dados Outros campos ainda no utilizados
26
Inode
ndice dos blocos constituintes do ficheiro mantido:
num vector denominado i_block com 15 posies 12 dessas 15 posies identificam os primeiros blocos do ficheiro (um bloco varia entre 1 Kbyte e 4 Kbyte). caso um ficheiro tenha uma dimenso superior 12 blocos, ento as 3 ltimas posies do vector contm uma referncia para um bloco com ndices para outros blocos
Inodes
Proteco Datas Etc. Blocos de dados
inode
B bytes
27
Aceder a um Ficheiro
necessrio:
copiar o bloco para memria, modific-lo e voltar a escrever no ficheiro.
Para tal preciso traduzir um tuplo <inode, cursor> para um endereo de memria (3 passos):
Localizar o bloco de disco onde est a informao a aceder Mapear o referido bloco numa posio de memria Calcular o endereo de memria do referido bloco mapeado em memria que possui a informao a aceder
Directrios
So a entidade responsvel por efectuar a traduo entre o nome de um ficheiro e o inode que o representa. Tm uma estrutura especfica para que o sistema de ficheiros os possa ler e interpretar, e assim localizar os ficheiros a partir do seu nome. Para localizar o inode de um ficheiro o sistema de ficheiros tem, no caso geral, que resolver o caminho de acesso, lendo e interpretando todos os directrios que compem o nome do ficheiro. Este processo designa-se usualmente por path walk. Directrio:
est dividido em registos de dimenso varivel. cada um desses registos contm a informao necessria traduo de um nome para um inode. um nome de ficheiro continua a possuir uma dimenso mxima, definida pela dimenso do campo Dimenso do registo que s possui um byte. por razes de eficincia cada registo comea num nmero mltiplo de bytes. o campo tipo indica qual o tipo de ficheiro (ex. 1 um ficheiro, 2 um directrio).
Nmero do Inode Dimenso do Registo Dimens o do nome Tipo Nome
0 12 24 40
54 79
1 1 1 1
2 2 6 6
1 2 6 7
2 2 1 1
. . c m
\0 . a a
\0 \0 r r
\0 \0 l q o u s e \0 s \0 \0
23 256
28
Grupos e Blocos
A arquitectura x86 impe que:
um disco possua um MBR no incio do disco, e um bloco de boot no incio de cada partio.
Deste modo, os meta-dados que descrevem a estrutura da partio encontram-se replicados pelos vrios grupos de blocos e os meta-dados de cada grupo de blocos so guardados perto da informao a que se referem.
Disco MBR Partio 0 Partio 1 Partio n x86
Grupo de blocos N
Ext2
Bitmap Tabela de Superbloco Descritores Bitmap dos grupos dos blocos dos inodes inodes Metadata
Blocos de dados
Ext2
O agrupamento dos meta-dados e dos dados em posies do disco no muito distantes optimiza a pesquisa de informao no disco:
comum aceder-se alternadamente aos meta-dados de um ficheiro e ao seu contedo se esta informao estiver muito longe uma da outra, o tempo de latncia no acesso informao no disco muito maior
Uma das faltas tpicas dos discos a falha de alguns dos seus sectores, sem que o disco deixe de funcionar completamente:
frequente os sectores inutilizados serem consecutivos, i.e. quando falha um sector a probabilidade do seu vizinho tambm falhar maior que as dos restantes sectores com o BFS, a falha de um sector que contm os meta-dados de um grupo de blocos s afecta aquele grupo de blocos numa situao sem diviso em grupos uma falha nos meta-dados inutilizaria a partio.
29
Superbloco
A informao global sobre todos os grupos de blocos de uma partio est guardada no que designado por super bloco. O super bloco :
um bloco que contm informao fundamental para a interpretao do contedo da partio
ex. nmero de sectores, dimenso dos sectores, nmero de inodes, etc.
est replicado em todos os grupos de blocos garantido assim que a falha de um s bloco no impede o disco de funcionar.
Para alm da tabela de inodes existem em cada partio ainda duas outras tabelas:
o bitmap de inodes - quais as posies livres o bitmap de blocos, - quais as posies ocupadas
30
programa
stdio
FILE* iobuf flush open/read/write/close Tabela de descritores do processo
A FILE mantida pela biblioteca stdio e contm um buffer e o file descriptor do ficheiro aberto. O buffer serve para optimizar as escritas e leituras. O fd identifica o ficheiro na tabela de descritores. possvel utilizar o fd directamente. A tabela de descritores contm uma entrada por cada ficheiro ou dispositivo aberto. A entrada 0 representa o dispositivo de entrada, a entrada 1 o dispositivo de sada e a 2 o dispositivo de sada para erros. Cada uma das entradas aponta para uma tabela global no ncleo
Ncleo
Tabela de Ficheiros abertos
Tabela de i-nodes
A tabela de ficheiros abertos com os apontadores os apontadores de escrita e leitura nos ficheiros, a indicao do tipo de acesso (leitura/escrita) e o nmero do primeiro bloco de ndice do ficheiro A tabela de i-nodes uma cache para os blocos de ndices dos ficheiros acedidos. Cada bloco de ndices referencia os blocos do disco que compem um ficheiro.
CACHE DISCO
31
Tabelas de Ficheiros
user file descriptor table file table inode table 2 | file A read write 1 | file B fd1 = open (fileA, O_RDONLY); fd2 = open (fileB, O_WRONLY); fd3 = open (fileA, O_RDWR);
r/w
file table contem: Cursor que indica a posio actual de leitura/escrita modo como o ficheiro foi aberto processos pai e filho: partilham file table
Neste modelo:
cada ficheiro manipulado por um conjunto de operaes (leitura, escrita, abertura, etc.) diferente, dependendo do sistema de ficheiros nativo em que esto armazenados
32
programa
stdio
FILE*
iobuf flush
open/read/write/close
Tabela de i-nodes
CACHE
Tabela de i-nodes
CACHE
Cada entrada da Tabela de ficheiros abertos e cada entrada da tabela de inodes contm um apontador para o vector de funes que sabe manipular o sistema de ficheiros onde este se encontra.
33
programa
stdio
FILE*
iobuf flush
open/read/write/close
Alguns sistemas de ficheiros no tm suporte fsico. A informao mantida Tabela de Cdigo de noutros locais e.g. descritores manipulao de sistemas Ncleo, rede das estruturas
de ficheiros
Tabela de i-nodes
CACHE
Ncleo Rede
34