Neste projeto devemos inserir uma nova system call ao Kernel do Linux. Nossa syscall pega um processo, cria 1 filho através da call fork() e verifica se seu PID é ímpar ou par. Se for par, este processo é morto; se não for, apenas retorna 1 ao arquivo de teste.
Para implementação do trabalho, utilizamos o kernel em sua versão 3.17.2, e a imagem de sistema DC_SO.img fornecida em aula.
Para testar a implementação da systemcall, realizamos os seguintes passos:
-
Descompactar o arquivo Projeto_01.zip, que contem o kernel e a imagem do sistema e colocar os arquivos test-callkpar.c e callkpar.c na pasta gerada.
-
Modificar o arquivo linux-3.17.2/arch/x86/syscalls/syscall_32.tlb, adcionando a seguinte linha ao final do código:
357 i386 callkpar sys_callkpar -
Adcionar a declaração da função nome da nossa função no final do arquivo linux-3.17.2/include/linux/syscalls.h:
asmlinkage int sys_callkpar(void); -
Incluir o código callkpar.c na pasta linux-3.17.2/arch/x86/kernel/.
-
Modificar o Makefile da pasta linux-3.17.2/arch/x86/kernel/, para que o nosso arquivo callkpar.c seja compilado com o kernel, incluindo a linha:
obj-y += callkpar.o -
Acessar a pasta linux-3.17.2/ e compilar o kernel, com o comando:
$ make -j 5 ARCH=i386 -
Após isso, compilar o código de teste test-callkpar.c com o comando:
$ gcc -m32 -static test-callkpar.c -o test-callkpar -
Agora devemos executar nossa máquina virtual para testar a implementação de nossasystemcall no kernel, utilizando o comando:
$ qemu-system-i386 -hda DC_SO.img -kernel linux-3.17.2/arch/i386/boot/bzImage -append "ro root=/dev/hda" -hdb test-callkpar -
Após a maquina inciar, logar com as credênciais:
user:root
password:root -
Executar os seguintes comandos para teste da systemcall:
$ cat /dev/hdb > test-callkpar
$ chmod +x test-callkpar
$ ./test-callkpar
- Cassiano Maia - RA:726507
- Julia Milani - RA:726552
- Mariana Cavichioli Silva - RA:726568
Disciplina: Sistemas Operacionais 01 - Profª Kellen Vivaldini