Next: Preparando uma imagem de
Up: Detalhes na utilização do
Previous: Detalhes da versão simples
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
|
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:
- Apenas o primeiro grupo do disco é tratado, ignorando-se a existência
dos demais grupos.
- Não há gerenciamento completo de diretórios. Usuários podem criar
arquivos apenas no diretório raiz do sistema.
- Tamanho do arquivo é limitado aos primeiros 12 blocos de dados apontados
pelo iNode . Blocos indiretos (que aumentam o tamanho máximo
de um arquivo) são ignorados pelo BananaKernel .
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: Preparando uma imagem de
Up: Detalhes na utilização do
Previous: Detalhes da versão simples
rafael@safecore.net