Baixe o app para aproveitar ainda mais
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
Compartilhar