LEIC/LERC 2011-2012

Sistemas Operativos

Aula 6

Sistemas de Ficheiros

Objectivo


Introdução

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:

A abstração consiste em mapear os mencionados objectos em ficheiros. Isto é, esses objectos, independentemente da sua natureza, são tratados como vulgares ficheiros.

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:

 

Exemplo de montagem dum sistema de ficheiros simples

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ável hello 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:

             mount
e confirme se hello resulta na lista dos sistemas de ficheiros que se encontram actualmente montados.

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:

			ls -alt tmp
- Quais os ficheiros que se encontram aí armazenados? Indicar as respectivas dimensões.

g) No mesmo terminal, visualizar o conteúdo do ficheiro através do comando:

			cat tmp/(nome do ficheiro)
Qual o conteúdo do ficheiro?

h) Crie um ficheiro no sistema montado com o comando:

			ls -alt tmp > listdir.txt
O comando teve sucesso na criação do ficheiro listdir.txt ? Justifique a sua resposta.

i) Para desmontar o sistema de ficheiros hello, execute o comando:

			fusermount -u tmp
- Confirme a desmontagem com o comando mount e certifique-se que hello não consta na lista dos sistemas de ficheiros montados.

 


Material de Apoio


Exercícios

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 para a criação do executável sofs.

d) Monte o sistema de ficheiros sofs na subdirectoria my_dir, executado 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_dir
O 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 comando mount.

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-student-pkg-v2.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).