MC504/MC514 - Sistemas Operacionais
Virtual File System
Como implementar um novo sistema de arquivos no Linux
Slides auxiliares
Sistemas de arquivos de brinquedo
Texto didático, primeira versã escrita em 2002. Leia o
seguinte trecho retirado deste site:
Linus and numerous other kernel developers dislike the ioctl() system call, seeing it as an uncontrolled way of adding new system calls to the kernel. Putting new files into /proc is also discouraged, since that area is seen as being a bit of a mess. Developers who populate their code with ioctl() implementations or /proc files are often encouraged to create a standalone virtual filesystem instead. Filesystems make the interface explicit and visible in user space; they also make it easier to write scripts which perform administrative functions.
Você concorda com Linus e os outros desenvolvedores do kernel?
Código alterado para rodar com kernel 3.17.x:
Como incluir o lwnfs
- Criar um diretório fs/lwnfs
- Alterar o arquivo fs/Makefile incluindo o seguinte conteúdo:
obj-y += lwnfs/
- No diretório 3.17.x rodar:
- make -j 5 ARCH=i386
Como testar:
$ dd if=/dev/zero of=rep bs=1k count=4
$ mkdir -p mnt
$ mount -t lwnfs -o loop rep mnt
$ ls
$ cat counter0
$ echo 200 > counter1
Este é bem simples e foi baseado no lwnfs citado acima. Veja
o código atualizado para a
versão 3.17.x.
Como utilizar o gdb
Infelizmente, esta receita não está funcionando com as
versões utilizadas no laboratório. :-(
- Compilar o kernel com as opções de depuração ligadas.
- Rodar o qemu com os seguintes parâmetros:
$ qemu-system-i386 -s -S -hda mc504.img -kernel linux-3.17.2/arch/i386/boot/bzImage -nographic -append "console=ttyS0 rw root=/dev/hda"
A opção -S irá fazer a execução do kernel parar logo no início.
- Em outra janela rodar o gdb, definindo o target e eventuais breakpoints.
$ gdb vmlinux
(gdb) target remote :1234
Remote debugging using :1234
0x0000fff0 in ?? ()
(gdb) b lfs_read_file
(gdb) c
Tarefa
Tendo como exemplo o código do lwnfs, faça as
seguintes alterações no hellofs.
- Crie também o arquivo goodbye.txt que emite uma mensagem adequada.
- Implemente a função write que altera a
mensagem a ser enviada por um destes arquivos.
Entrega
Esta tarefa não é um dos projetos principais da
disciplina. Os grupos que entregarem o código
do hellofs alterado via Moodle ganhar até um ponto na
média das notas de projeto.
Data final: 3 de dezembro