Programação de Sistemas Sistemas de ficheiros ext e iso9660 Programação de Sistemas Sistema de ficheiros : 1/21 Sistema de ficheiros ext (1) As estruturas de dados usadas nas partições do Unix muito diversificadas - tabelas, listas e árvores. O FS na versão inicial do Linux era ext1, semelhante ao Unix V7. Actualmente o Linux usa ext2 ou ext3 (ext2 + registo / journaling ). 1. Partição: no sistema de ficheiros ext2, semelhante ao Berkeley Fast File do Unix BSD (também designado UFS-Unix File System), a partição é dividida em duas partes a) Boot block : programa de carregamento do sistema operativo (vazio nas partições que não sejam de sistema). b) Vários grupos de blocos. Programação de Sistemas Sistema de ficheiros : 2/21
Sistema de ficheiros ext (2) Os grupos de blocos permitem que: dados fiquem próximo dos seus inodes inodes fiquem próximos dos seus inodes de directórios. Figura 10-35, Modern Operating Systems Programação de Sistemas Sistema de ficheiros : 3/21 Sistema de ficheiros ext (3) Um grupo de blocos é dividido em: a) Superblock : contém informação administrativa, nomeadamente Identificador do tipo de ficheiros ( magic number ) e versão. Número total de grupos de blocos. Número total de blocos por grupo. Dimensão dos blocos. Número total de blocos livres e de i-nodes livres. c) Descritores Localização dos mapas de blocos livres e de i-node livres. Localização da tabela de i-node. d) Informação sobre blocos livres, que pode ser implementado por mapas de bits, ou lista ligada e) Tabela de i-nodes. f) Dados dos restantes ficheiros e directórios. Programação de Sistemas Sistema de ficheiros : 4/21
Sistema de ficheiros ext (4) 2. Tabela de i-nodes: armazena informação sobre todos os ficheiro de directorias e de dados existentes. 1: reservado para os bad blocks. 2: reservado para o directório de raíz. Cada entrada da tabela de i-nodes ocupa 128B, contendo Modos de acesso. Localizações do ficheiro. Datas (criação, último acesso, última modificação). Dimensões. Nota1: Unix armazena no directório o identificador e o i-node do ficheiro Nota2: número i-node de ficheiro identificado pelo comandols i asterix.ist.utl.pt> ls -i /home/ec-ps/public_html/index.html 1835499 /home/ec-ps/public_html/index.html Programação de Sistemas Sistema de ficheiros : 5/21 Sistema de ficheiros ext (5) 3. Estrutura i-node do ext2 <linux/ext2_fs.h> struct ext2_inode { le16 i_mode; /* File mode */ le16 i_uid; /* Low 16 bits of Owner Uid */ le32 i_size; /* Size in bytes */ le32 i_atime; /* Access time */ le32 i_ctime; /* Creation time */ le32 i_mtime; /* Modification time */ le32 i_dtime; /* Deletion Time */ le16 i_gid; /* Low 16 bits of Group Id */ le16 i_links_count; /* Links count */ le32 i_blocks; /* Blocks count */ le32 i_flags; /* File flags */ union { } osd1; /* OS dependent 1 */ le32 i_block[ext2_n_blocks];/* Pointers to blocks */ le32 i_generation; /* File version (for NFS) */ le32 i_file_acl; /* File ACL */ le32 i_dir_acl; /* Directory ACL */ le32 i_faddr; /* Fragment address */ union { } osd2; /* OS dependent 2 */ le16 i_extra_isize; le16 i_pad1; }; Programação de Sistemas Sistema de ficheiros : 6/21
Sistema de ficheiros ext (6) A informação do sistema de ficheiro pode ser recolhida pelo comando /sbin/debugfs dispositivo A informação do i-node pode ser recolhida pelo comando stat fich charlie.ist.utl.pt> stat test.txt File: 'test.txt' Size: 4 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 1409040 Links: 1 Access: (0644/-rw-r--r--) Uid:(7012/rgc) Gid:(700/docentes) Access: 2007-07-27 22:33:23.000000000 +0100 Modify: 2007-07-27 22:21:43.000000000 +0100 Change: 2007-07-27 22:23:25.000000000 +0100 Programação de Sistemas Sistema de ficheiros : 7/21 Sistema de ficheiros ext (7) Bloco identificado por um número individual de 32 bits. As localizações dos blocos de dados são determinados por vários multiníveis de indirecção: A. Na estrutura i-node existe uma tabela de 12 posições para os primeiros blocos em disco. Exemplo: se um bloco ocupar 4KB, a estrutura i-node guarda directamente as localizações de um espaço de dados igual a 12*4KB = 48 KB. B. Para ficheiros maiores, o 13º índice passa a ser ponteiro Single indirect para um bloco contendo as localizações seguintes. Exemplo: para bloco de 4KB (1KB), o Single indirect referencia 4KB/4B = 1K (1KB/4B=256) localizações de blocos. A dimensão máxima do ficheiro aumenta 1K*4KB = 4 MB (256*4KB=1MB). C. Para além de 48KB+4MB é necessário o Double indirect Exemplo: para bloco de 4KB, a dimensão máxima do ficheiro aumenta 1M*4KB = 4 GB. Programação de Sistemas Sistema de ficheiros : 8/21
Sistema de ficheiros ext (8) D. Para ficheiros gigantescos, as versões recentes do Unix usam o Triple indirect. Exemplo: para blocos de 4KB, as localizações de blocos aumentam 1K*1K*1K = 1G e a dimensão máximo do ficheiro aumenta 1G*4KB = 4TB. Nota: para blocos de 4KB, o ext2 permite que ficheiros possam ter um tamanho até 4TB+4GB+4MB+48KB 4TB. A dimensão máxima do sistema de ficheiros, ou seja da partição, é dada pelo número de endereços i-node vezes o espaço do bloco. Exemplo: Com blocos de 4KB, a dimensão máxima do sistema de ficheiros é 2 32 *4KB = 16 TB. Tamanho de bloco 1K 2K 4K 8K Dimensão máxima ficheiro 16 GB 256 GB 4 TB 64 TB Dimensão máxima sistema de ficheiros 4 TB 8 TB 16 TB 32 TB Programação de Sistemas Usado pelo Linux Sistema de ficheiros : 9/21 Sistema de ficheiros ext (9) Vantagens dos multiníveis de indirecção: simples, os ficheiros podem ser facilmente expandidos, ficheiros pequenos rapidamente acedidos. Inconvenientes: ficheiros longos exigem muitos seeks. 12 blocos iniciais (largura de 10 na versão inicial do BFS) Figura 10-33, Modern Operating Systems Programação de Sistemas Sistema de ficheiros : 10/21
Sistema de ficheiros ext (10) Estratégia de alocação de novos blocos alvo, na posição seguinte ao último bloco alocado, visa evitar fragmentação Alocação orientada ao alvo: Se o bloco alvo se encontrar livre, ocupá- lo. Senão, procurar até uma distância de 25 blocos. Se não encontrar um bloco livre, procurar dentro do grupo. Se o grupo estiver cheio, procurar noutro grupo. Pré-alocação: Se for encontrado um bloco livre, reservar até 8 blocos livres seguintes. Quando o ficheiro for fechado, libertar os blocos reservados livres. Programação de Sistemas Sistema de ficheiros : 11/21 Sistema de ficheiros ext (11) Exercício: Considere o sistema de ficheiros ext do Linux, com blocos de 2KB e endereços de bloco de dimensão 4 B. Um processo vai aceder um ficheiro de 20 MB e o seu i-node já reside na memória central. Apresentando todos os cálculos, determine quantos blocos o processo tem de ler para recolher os dados entre os endereços 295000 e 297000 (decimal). 1. Determinar os blocos de residência dos dados. 295000 2048 297000 2048 2048 144 2048 145 9020 9220 8192 8192 Dados espalhados pelos 8280 10280 blocos 144 e 145 (2 blocos). 8192 10240 88 38 Programação de Sistemas Sistema de ficheiros : 12/21
Sistema de ficheiros ext (12) 2. O i-node contém apenas os endereços dos blocos de dados entre 1 e 12, pelo que é necessário ler o bloco de indirecção única ( single indirect ). Precisamos de determinar quantos blocos de dados são cobertos pelo SI. 2048 4 SI contém endereços de 512 2048 512 blocos de dados (entre 13 e 524). 0 O SI é suficiente para obter os endereços dos blocos 144 e 145. Logo, o processo tem de ler 1(SI)+2(blocos de dados) = 3 blocos. Programação de Sistemas Sistema de ficheiros : 13/21 Sistema de ficheiros ext (13) 4. Entrada do directório: Directórios organizados como ficheiros regulares contendo tuplos <inode#,nome> Número de i-node: 2B (logo directório limitado a 64K ficheiros) Nome no ext1 limitado a 14 caracteres - quaisquer, excepto / e NULL no ext2,3 estendido a 255 caracteres Figura 6-37, Modern Operating Systems Programação de Sistemas Sistema de ficheiros : 14/21
Sistema de ficheiros ext (14) Exemplo: localização de um ficheiro, por exemplo /usr/ast/mbox, parte da raíz 1. Recolher i-node 2 (directório raíz) 2. Varrer a listagem dos ficheiros até emparelhar o identificador usr. Recolher localização do i-node de /usr (por exemplo, 6). 3. No i-node 6 recolher localização do bloco de dados, que contém a listagem dos ficheiros do directório /usr (por exemplo, 132). 4. Varrer a listagem dos ficheiros até emparelhar o identificador ast. Recolher localização do i-node de /usr/ast (por exemplo, 26). 5. No i-node 26 recolher localização do bloco de dados, que contém a listagem dos ficheiros do directório /usr/ast (por exemplo, 406). 6. Varrer a listagem dos ficheiros até emparelhar o identificador mbox. Recolher localização do i-node de /usr/ast/mbox (por exemplo, 60). Programação de Sistemas Sistema de ficheiros : 15/21 Sistema de ficheiros ext (15) Figura 6-39, Modern Operating Systems Para apressar acesso aos ficheiros do directório, o Linux possui directório corrente (CWD). O bloco é mantido em cache, usado de partida quando o ficheiro é dado relativamente ao CWD. Programação de Sistemas Sistema de ficheiros : 16/21
Sistema de ficheiros ext (16) A ocupação de um bloco, por exemplo na escrita de um ficheiro, é efectuada nos seguintes passos 1. bit[i]=1 em disco 2. Alocar bloco[i] 3. bit[i]=1 em memória 4. Actualizar i-node Se o sistema for abaixo, os mapas de bits dos blocos e dos i-nodes deixam de ser coerentes. A recuperação da coerência é executada pelo comando /sbin/fsck. Programação de Sistemas Sistema de ficheiros : 17/21 Sistema de ficheiros iso9660 (1) Norma publicada em 1988 pelo ISO - International Organization for Standardization para acesso de CDs em todos os sistemas operativos, incluindo MSDOS. Os blocos em CDs ocupam 2352B, com 2KB para dados e o resto do espaço usado para correcção de erros. 1. Os primeiros 16 blocos são livres para o fabricante, por exemplo para boot do sistema operativo. 2. O bloco seguinte, primary volume descriptor, com informação sobre o CD: Programação de Sistemas Sistema de ficheiros : 18/21
Sistema de ficheiros iso9660 (2) Identificadores de sistema e de volume (32B cada). Identificador do fabricante e preparação de dados (128B cada). Identificador de 3 ficheiros: Resumo ( abstract ) Informação direitos de autor ( copyright ) Informação bibliográfica Dimensão dos blocos (usualmente 2KB). Número total de blocos no CD. Datas de criação e validade. Número de bloco onde se encontra instalado o directório raíz. 3. Pode existir um descritor secundário de volume. Programação de Sistemas Sistema de ficheiros : 19/21 Sistema de ficheiros iso9660 (3) 4. As entradas possuem número variável de campos (10 a 12). Campos de texto (por exemplo, nome de ficheiro) em ASCII Campos numéricos (por exemplo, dimensão de ficheiro) em ambas representações: Little-endien e Big-endien. Primeiro Byte indica comprimento das entradas. Ficheiros alocados continuamente por ordem alfabética, excepto dois primeiros (directório e directório pai). Ficheiros regulares e directórios discriminados por flag. Figura 6-29, Modern Operating Systems Programação de Sistemas Sistema de ficheiros : 20/21
Sistema de ficheiros iso9660 (4) Não há limite do número de ficheiros, mas a profundidade dos directórios limitada a 8. Implementados 3 níveis 1. (O mais restritivo) Nomes de ficheiros limitados a 8+3 caracteres, nomes de directórios limitados a 8 caracteres sem extensão, ficheiros contíguos no CD. 2. Nomes de ficheiros e directórios podem ter até 31 caracteres. 3. Os ficheiros podem ser distribuídos por secções espalhadas no CD, cada uma contígua. Programação de Sistemas Sistema de ficheiros : 21/21