Os sistemas Unix/Linux empregam a abstração de ficheiro como modelo unificado na interação com os mais variados tipos de objectos, como por exemplo:
O FUSE permite criar e montar um sistema de ficheiros no nível utilizador sobre o qual são implementadas, pelo programador,
as operações de open(), read(), write(), etc., que podem ser invocadas por programas de utilizadores através de
normais chamadas de sistema (syscalls).
Uma das principais vantagens do FUSE é a de facilitar o desenvolvimento e montagem de sistemas de ficheiros no nível utilizador, sem que para tal seja necessário o conhecimento de detalhes de implementação do núcleo.
Funcionamento
Quando uma aplicação ao invocar uma chamada de sistema sobre um ficheiro, o núcleo verifica se esse ficheiro se encontra armazenado numa directoria montada sobre um sistema de ficheiros FUSE. Se for esse o caso, o módulo FUSE no núcleo encaminha o pedido de operação para um processo FUSE que corre em nível utilizador e está à escuta de novos pedidos. Ao receber novo pedido, esse processo encarrega-se de servir esse pedido. Finalmente, a resposta é enviada de volta ao módulo FUSE no núcleo. O processo FUSE suporta o tratamento de vários pedidos em paralelo, cada um servido por uma tarefa diferente, por forma a oferecer melhor desempenho.
A figura que segue exemplifica o funcionamento do FUSE quando é executado uma chamada à função de sistema write.
Operações
As principais operações a serem efectuadas sobre o FUSE são as mesmas que são efectuadas nos vulgares sistemas de ficheiros, mais especificamente:
mkdir, readdir, rmdir,...)
open, read, write,...)
chmod, chown) ...
a) Descomprima o pacote hello.tar.gz.
b) Na directoria fuse_exemplo/ encontrará o ficheiro hello.c. Estude e observe atentamente o conteúdo das funções que implementam os comandos disponíveis para a interacção com este sistema de ficheiros.
c) Abra um terminal e execute o comando
makepara a criação do executávelhelloe crie uma directoria denominada tmp.d) Monte o sistema de ficheiros hello na subdirectoria tmp através do comando:
./hello tmp(Para a montagem podem-se usar opções adicionais como, por exemplo, -d para a inclusão de informação de debugging:
./hello -d tmp)e) Verifique se a montagem teve sucesso, usando o comando:
e confirme se hello resulta na lista dos sistemas de ficheiros que se encontram actualmente montados.mountf) Abra um novo terminal (por exemplo, posicionar-se na directoria fuse_exemplo/) e interagir com o sistema de ficheiros recém-montado através do comando:
- Quais os ficheiros que se encontram aí armazenados? Indicar as respectivas dimensões.ls -alt tmpg) No mesmo terminal, visualizar o conteúdo do ficheiro através do comando:
Qual o conteúdo do ficheiro?cat tmp/(nome do ficheiro)h) Crie um ficheiro no sistema montado com o comando:
O comando teve sucesso na criação do ficheiro listdir.txt ? Justifique a sua resposta.ls -alt tmp > listdir.txti) Para desmontar o sistema de ficheiros hello, execute o comando:
- Confirme a desmontagem com o comandofusermount -u tmpmounte certifique-se que hello não consta na lista dos sistemas de ficheiros montados.
1. Montagem do sistema de ficheiros sofs
a) Obtenha e descomprima o pacote sthreads+sofs+logrw+cache-student-pkg-v3.zip.
b) Na directoria sofs encontrará o ficheiro sofs.c. Estude e observe o conteúdo das funções que implementam os comandos disponíveis para a interacção com este sistema de ficheiros. Enumere as funções que aí foram implementadas.
c) Abra um terminal e execute o comando
makena directoria sthreads+sofs+logrw+cache-student-pkg-v3 para a criação do executávelsofsna directoria sofs.d) Monte o sistema de ficheiros sofs na subdirectoria my_dir, executando na directoria sofs o comando:
./sofs -d my_dir.e) Abra outro terminal e execute o comando
mountpara verificar a ocorrência da montagem de sofs.f) Execute comandos que envolvam o sistema de ficheiros sofs montado na subdirectoria my_dir e que efectuem chamadas a funções implementadas em sofs.c, como por exemplo:
ls my_dir ls -alt > my_dir/dir.txt more my_dir/dir.txt ls -alt my_dirO retorno destes comandos é idêntico aos que se obteriam se fossem executados numa vulgar directoria do sistema de ficheiros? Justifique a sua resposta.g) Execute comandos sobre a directoria my_dir e que efectuam chamadas a funções não implementadas em sofs.c, como por exemplo, a criação de subdirectorias (comando mkdir). Descreva e justifique o resultado obtido.
h) Desmonte o sistema de ficheiros sofs com o comando
fusermount -u my_dir. Confirme a ocorrência da desmontagem com o comandomount.
2. Início de resolução do Problema II.A da 2ª Parte do Projecto
a) Obtenha o enunciado da 2ª parte do projecto.
b) Leia atentamente as secções "Introdução" e "Problema II.A: Cache de blocos/registos".
c) Inicie o desenho da implementação duma solução para o Problema II.A.
NOTA: Para a implementação da cache no pacote sthreads+sofs+logrw+cache-student-pkg-v3.zip é preciso incluir a opção de compilação -DUSE_CACHE no ficheiro Makefile da directoria sofs (mais precisamente, comente a linha correspondente ao primeiro DEFS e descomente a linha seguinte do ficheiro Makefile).