Prévia do material em texto
Sistemas Operacionais
Criando uma chamada de sistema no
MINIX
Prof. Sílvio Fernandes
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO
DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS
CURSO DE CIÊNCIA DA COMPUTAÇÃO
Introdução
Usaremos a versão 3.2.1 do MINIX
A chamada deverá imprimir uma mensagem
na saída padrão
Para isso será necessário
Criar a chamada de sistema propriamente dita
Criar um biblioteca para o usuário
2
Criando a chamada de sistema
Edite “/usr/src/include/minix/callnr.h” e
encontre um slot não usado (ex: 35)
Defina um nome da sua chamada
#define MYCALL 35
Vamos associar essa chamada ao servidor PM,
então vamos associar a chamada na tabela
dele
Edite “/usr/src/servers/pm/table.c”
Modifique o mesmo slot escolhido anteriormente (35):
do_mycall, /* 35 = mycall */
3
Criando a chamada de sistema
Agora é preciso incluir a assinatura da sua
função no arquivo dos protótipos de função do
PM
Abra “/usr/src/servers/pm/proto.h”
Procure a seção no arquivo /* misc.c */ e incllua:
int do_mycall(); /* Minha chamada */
Inclua em “/usr/src/servers/pm/misc.c”:
4
/*=================================================*
*do_mycall *
*================================================*/
int do_mycall(){
printf("Ola mundo! Esta é minha chamada de sistema!\n");
return(OK);
}
Criando a chamada de sistema
Sua função pode ser criada em um arquivo
separado, para isso é necessário salvá-lo no
mesmo diretório e incluir o nome do seu
arquivo no Makefile na seção “SRCS=”
No diretório “/usr/src/servers/pm/” compile e
veja se há algum erro
#make
5
Criando a biblioteca
No diretório “/usr/include” crie o arquivo
“mycalllib.h”
A definição dos tipos de mensagem e quais campos
elas possuem são encontradas em
/usr/src/include/minix/ipc.h
6
#include <lib.h>
#include <unistd.h>
int mycall(){
message m;
return ( _syscall(PM_PROC_NR, MYCALL, &m );
}
Recompilando o Kernel
Entre no diretório “/usr/src/releasetools”
Para ver as opções de compilação faça
make
Para compilar e instalar use
make hdboot
Reinicie o sistema
reboot
7
Criando o programa de teste
No diretório do usuário crie o código e salve como
teste.c
Compile-o
cc teste.c –o teste
Execute-o
./teste
A mensagem será impressa no terminal principal (tty 1) - em
um terminal remoto a mensagem não será vista
8
#include <mycalllib.h>
#include <stdio.h>
int main(int argc, char** args) {
mycall();
return 0;
}
Exercício
Baseado no tutorial anterior construa uma
chamada de sistema e uma biblioteca onde o
usuário envia um valor inteiro (pela função da
biblioteca) e chamada imprime o valor
recebido por meio da mensagem recebida do
syscall.
Crie a nova função em um arquivo separado e
o inclua no Makefile do servidor
9
Referências
TANENBAUM, Andrew S. Sistemas Operacionais
Modernos. 3ª Ed., Prentice Hall, 2009.
TANENBAUM, Andrew S.; WOODHULL, Albert S.
Sistemas Operacionais: Projeto e
Implementação. 3ª Ed., Prentice Hall, 2008.
MACHADO, Francis B.; MAIA, Luiz P. Arquitetura
de Sistemas Operacionais. 3a. Edição. LTC,
2004.
SILBERSCHATZ, Abraham; GALVIN, Peter;
GAGNE, Greg. Fundamentos de Sistemas
Operacionais. 6ª. Edição. LTC, 2004.
10