next up previous contents index
Next: Preparando uma imagem de Up: Detalhes na utilização do Previous: Detalhes da versão simples

Detalhes da versão intermediária

A versão intermediária tem a intenção de apresentar ao aluno uma estrutura de arquivos mais elaborada. Para isto, foi implementada uma versão inicial do Second Extended Filesystem (EXT2FS ) [Card et al., 1994], o sistema de arquivos padrão do Linux . Esta implementação não é completa e contém algumas restrições (discutidas mais adiante).

O EXT2FS trata o disco como uma série de blocos. O tamanho padrão de cada bloco é de 1024 bytes . Este tamanho é definido na hora da formatação do disco e pode variar. Uma implementação completa do EXT2FS deve estar preparada para qualquer tamanho de bloco. Entretanto, por motivos de clareza de conceitos, o BananaKernel trabalha apenas com blocos de 1024 bytes .

Uma vez que são definido os blocos do disco, tudo que é gravado nele possui uma posição pré-determinada. Cada informação pertinente ao gerenciamento dos arquivos é gravada em um bloco separado. Isso facilita seu acesso, pois pode-se facilmente encontrar as estruturas do EXT2FS sabendo-se o índice do bloco onde a informação se encontra. A figura Estrutura do EXT2FS ajuda a entender menlhor a estrutura do EXT2FS .


 
Figura: Estrutura do EXT2FS  
\begin{figure}
\begin{center}
\includegraphics [width=1.0\textwidth]{Drawing-EXT2FS.eps}\end{center}\end{figure}

Devido a limitações no tamanho das estruturas de dados do EXT2FS , o disco é separado em vários grupos e cada grupo contém sua própria área de gerência de arquivos e de dados. A versão intermediária do BananaKernel trata apenas do primeiro grupo do disco, ignorando quaisquer outros grupos existentes. Isso simplifica o código fonte, dando mais clareza aos conceitos.

Como pode ser visto na figura [*], o primeiro bloco do disco é reservado ao setor de boot. Aqui estaria algum bootloader (como, por exemplo, o Grub ). Depois do primeiro bloco, inicia-se uma sequência de grupos. Cada grupo possui:

Superbloco:
Contém informações pertinentes ao sistema de arquivos de todo o disco, como a quantidade total de grupos, quantidade total de iNodes , quantidade total de blocos, quantidade de iNodes e blocos em cada grupo, etc . Pelo fato de ser uma estrutura crucial para o funcionamento do EXT2FS , ela é replicada em todos os grupos[*].
Descritor do grupo:
Contém informações pertinentes ao grupo onde se encontra, como a posição dos mapas de bits e da tabela de iNodes .
Bitmap  dos blocos:
Este é um bloco especial, onde cada bit representa um bloco de dados do grupo (área de dados dos arquivos). Se o bit for igual a 0, quer dizer que o bloco não está sendo utilizado. Se for igual a 1, quer dizer que o bloco correspondente está sendo utilizado e contém dados de algum arquivo, portanto, não pode ser sobrescrito. Esta mapa é usado para gerenciar os blocos de dados utilizados pelos arquivos. Antes de escrever os dados de um arquivo em disco, o EXT2FS verifica neste mapa, quais blocos estão livres e procura por um que possa ser utilizado.
Bitmap  dos iNodes :
Este mapa de bits controla quais iNodes estão sendo utilizados e quais estão livres. Seu funcionamento é parecido como mapa de bits dos blocos, mas ao invés de gerenciar blocos de dados, gerencia os iNodes na tabela de iNodes .
Tabela de iNodes :
Esta parte do disco contém os iNodes propriamente ditos. Toda vez que um arquivo é criado, um iNode desta tabela é selecionado e marcado como utilizado (com a ajuda do mapa de bits ). Um iNode contém informações sobre o arquivo, como data de criação, permissões de acesso, ponteiros para os blocos de dados (onde os dados do arquivo se encontram).
Esta versão do BananaKernel possui uma implementação parcial do EXT2FS . Seguem abaixo algumas das diferenças:

Apesar destas limitações, o código fonte do BananaKernel está muito bem comentado. A simplificação do código-fonte torna os conceitos mais claros, que nos leva de votla ao objetivo principal do BananaKernel .



 
next up previous contents index
Next: Preparando uma imagem de Up: Detalhes na utilização do Previous: Detalhes da versão simples
rafael@safecore.net