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
make
para a criação do executávelhello
e 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.mount
f) 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 tmp
g) 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.txt
i) Para desmontar o sistema de ficheiros hello, execute o comando:
- Confirme a desmontagem com o comandofusermount -u tmp
mount
e 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
make
na directoria sthreads+sofs+logrw+cache-student-pkg-v3 para a criação do executávelsofs
na 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
mount
para 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).