Criando uma System Call no Minix



Documentos relacionados
2 SYSCALLs: O que são

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

INTRODUÇÃO AO JAVA PARA PROGRAMADORES C

Linguagem e Técnicas de Programação I Programação estruturada e fundamentos da linguagem C

MINIX File System Visualização de i-nodes e blocos

Curso de Programação Computadores

MANUAL DO ANIMAIL Terti Software

Tutorial: Aprenda a criar seu próprio makefile. Darcamo (Forúns Ubuntu)

Tutorial: Programando no Linux

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Introdução. Nesta guia você aprenderá:

CODE IGNITER INSTALAÇÃO & BANCO DE DADOS

MANUAL DE UTILIZAÇÃO DO PLUGIN GERADOR DE PLUGINS DO TERRAVIEW

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - SLIM

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

UFSM Introdução ao Dev-C++ Profa. Patrícia Pitthan. Introdução ao Dev-C++

Eclipse com c++11 e boost Etapa 1- Download da IDE Eclipse c++ e configuração do MinGW

1) Utilize o link abaixo para iniciar automaticamente o processo para baixar o arquivo de instalação do Code::Blocks:

Programação de Computadores I. Conhecendo a IDE Code::Blocks

Introdução a Java. Hélder Nunes

Prova do Primeiro Bimestre Warm-Ups 1 a 7

LINGUAGEM C UMA INTRODUÇÃO

Tutoriais de apoio para a migração do Atualização: 30/04/2014

Professor: Macêdo Firmino Disciplina: Redes de Computadores II

Resumo da Matéria de Linguagem de Programação. Linguagem C

Manual Administrador - Mídia System

Orientações para o uso do Mozilla Thunderbird

O primeiro passo é habilitar acesso externo através de web service a configuração é bem simples e não exige maiores explicações.

Configurar o Furbot no Eclipse

TUTORIAL DE INSTALAÇÃO APACHE PHP POSTGRESQL 8.2

5 Apresentando a linguagem C

Associação Educacional Dom Bosco Curso de Engenharia 1º ano

Produção de tutoriais. Suellem Oliveira

SSE 3.0 Servidor de Notificação por . Cadastrando

cast poderia ser usado também para transformar um real (float) em inteiro. A sintaxe C (float)i pode ser substituída em C++ por float(i).

Tutorial: Webmail. Dicas de Uso e Funcionalidades 02/2015. Versão 01

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Realizado por: Fábio Rebeca Nº6. Iuri Santos Nº8. Telmo Santos Nº23

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - MILLENNIUM

2 Um Primeiro Programa em C

Programa ConsoleRPN. PUC-Rio CIV Sistemas Gráficos para Engenharia Luiz Fernando Martha & André Maués Brabo Pereira

Técnico em informática ti 54 Configuração de serviços de rede no Windows 2003 server Ser ver Enterprise

O Processo de Programação

Persistência de Dados

2 Orientação a objetos na prática

NESSE MANUAL VÃO SER SOLUCIONADAS AS SEGUINTES DÚVIDAS DE USO:

PCS LABORATÓRIO DE PROGRAMAÇÃO ORIENTADA A OBJETOS PARA A ENGENHARIA ELÉTRICA

ZS Rest. Manual Profissional. BackOffice Mapa de Mesas. v2011

APOSTILA DE EXCEL 2007

Implementando uma Classe e Criando Objetos a partir dela

Tutorial. Windows Live Mail

Sistema de Controle de Cheques GOLD

GERENCIADOR DE CORREIO ELETRÔNICO (V. 2 26/04/2010)

NÚCLEO DE TECNOLOGIA E EDUCAÇÃO CURSO: WINDOWS MOVIE MAKER TUTORIAL

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Python: Módulos. Claudio Esperança

Introdução a Linguagem C

Um Tutorial sobre Sockets Parte I

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS COTAS DE DISCO. Professor Carlos Muniz

Manual de Instalação e Configuração do SQL Express

Introdução à Programação

Nota de Aula: Utilização da IDE Code::Blocks

NOVIDADES DO JAVA PARA PROGRAMADORES C

Página de Login. Manual para gestão de conteúdo no Portal da Ouvidoria do Senado Federal

Instalando o plugin CDT 4.0

Comandos Sequenciais if else, e Switch

Roteiro do Programa e Entrada/Saída

ESTUDO DE CASO WINDOWS VISTA

Configurações de Templates no SolidWorks 2011

Instalando o WordPress em localhost

MSN-Proxy v0.7 no Debian 5 (Atualizado)

Tutorial. Sincronização e backup de arquivos na Internet (nuvem) Elaborado por: Miguel Marques (Professor de TIC)

Prototype, um Design Patterns de Criação

Enviando Arquivos para a Neoband

1. PROLOGO ==========

Questão Essência do Excel

Experimentos com a memória cache do CPU

Como usar Google Drive e Agenda

Curso de Informática Básica

Bem vindo! Esta é a tela inicial do Webmail da Universidade federal de Juiz de Fora. O link de acesso é:

LINX POSTOS AUTOSYSTEM

Manual UNICURITIBA VIRTUAL para Professores

Configurando um Grupo Doméstico e Compartilhando arquivos no Windows 7

Omega Tecnologia Manual Omega Hosting

MICROSOFT OFFICE EXCEL 2007

WORD. Professor: Leandro Crescencio Colégio Politécnico 1

Manual. Configuração do. Samba. Compartilhamento e Servidor Samba Linux. Produzido por: Sergio Graças Desenvolvedor do Projeto GNU/Linux VRlivre

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

INSTALAÇÃO OASIS + WAMP SERVER NO AMBIENTE WINDOWS

Aula 1 Tipo Abstrato de Dados

Apostila de. WordPress. Gustavo Teixeira da Cunha Coelho Henrique Gemignani Passos Lima. 11 de maio de Primeira Edição RC1

FAÇA OS PASSOS ABAIXO PARA CADASTRAS AS SUAS CONTAS DE NO MICROSOFT OUTLOOK

Transcrição:

Criando uma System Call no Minix Tarcísio E. M. Crocomo Universidade Federal de Santa Catarina 25 de Maio de 2011

Sumário Introdução ao sistema de mensagens. Criando nossa syscall Criando nossa função wrapper Testando nossa syscall

A função syscall No Minix, as chamadas de sistema, quando não estão sendo acessadas por funções wrapper de bibliotecas, são feitas por mensagens. Essas mensagens são passadas pela função /usr/include/lib.h syscall(int who, int syscallnr, message *messageptr)

Dissecando a função syscall int who: O destinatário da mensagem. Mais à frente veremos quais podem ser. int syscallnr: O código da chamada desejada. A chamada que implementaremos terá o seu código único. message *messageptr: Ponteiro para uma struct que será utilizada para passar informações para dentro da syscall, como se fossem parâmetros, já que não estamos usando uma função específica.

Quem é who? Os valores para who estão definidos em lib.h, e são os seguintes: /usr/include/lib.h #define MM PM PROC NR //servidor de processos #define FS FS PROC NR //servidor de filesystem

Definindo nosso syscallnr Os números das chamadas estão definidos em minix/callnr.h. Para definirmos o nosso, adicionamos uma linha em /usr/src/include/minix/callnr.h. No Minix 3.1.4 o número 64 está livre. /usr/src/include/minix/callnr.h #define MYCALL 64

Definindo o servidor Agora vamos ao nosso servidor. Utilizaremos o FS para atender nossa syscall. No arquivo /usr/src/servers/vfs/table.c definiremos a função interna (handler) que será executada quando nossa chamada for passada ao FS.

Definindo o servidor O arquivo contém um grande array de ponteiros para funções. Vamos colocar a nossa na posição correta. Guie-se pelos comentários. /usr/src/servers/vfs/table.c no sys, /* 64 = unused */ virará /usr/src/servers/vfs/table.c do mycall, /* 64 = minha syscall */ Observação: Documente bem o que está fazendo, nos padrões dos comentários que já estão no arquivo, para ter uma boa forma de saber o que já fez.

Definindo o servidor No arquivo /usr/src/servers/vfs/proto.h iremos colocar o protótipo de nossa função handler. /usr/src/servers/vfs/proto.h /* mycall.c */ PROTOTYPE( int do mycall, (void) );

Implementando o handler Para implementar nosso handler, temos duas opções: Utilizar um arquivo preexistente Criar nosso próprio arquivo Criaremos um novo arquivo. O que isso muda é que teremos depois que adicioná-lo no Makefile, mas ajudará na organização.

Implementando o handler Criaremos então o arquivo mycall.c, com o seguinte conteúdo /usr/src/servers/vfs/mycall.c #include "fs.h" #include <stdio.h> PUBLIC int do_mycall() { int nro = m_in.m1_i1; /* m_in é a mensagem de entrada para toda syscall */ printf("o numero e %d\n", nro); return(ok); }

Modificando o Makefile Por fim, modificaremos o Makefile adicionando mycall.o na variável OBJ: /usr/src/servers/vfs/makefile OBJ = (...) mycall.o

Compilando o sistema Podemos então recompilar o sistema. cd /usr/src/tools make hdboot E temos nossa syscall pronta, para usá-la basta reiniciar o sistema! Fim!

Ou será que não?

O que falta? Syscalls não são utilizadas por aplicações externas diretamente por chamadas à syscall(). Utiliza-se o que se chama de wrapper, ou seja, uma função de biblioteca que envolve a chamada à syscall().

Criando nosso wrapper Criar o wrapper é bem simples. Basicamente, iremos até /usr/src/lib/posix e criaremos o arquivo mycall.c com a nossa função: /usr/src/lib/posix/ mycall.c #include <lib.h> PUBLIC int mycall(int nro) { message m; m.m1_i1 = nro; return(_syscall(fs, MYCALL, &m)); }

Alterando o Makefile Agora abrimos o arquivo Makefile.in e adicionamos nosso arquivo a ele: /usr/src/lib/posix/makefile.in libc_files = " \ (...) \ _mycall.c \ (...) " E na mesma pasta, execute o comando make Makefile.

Recompilando as bibliotecas Por fim, vá até /usr/src/tools e execute make libraries.

Teste final Testar nossa syscall é simples. Façamos um arquivo teste.c: /root/teste.c int main (void) { mycall(15); } return 0; E por fim, cc -o teste teste.c dentro da pasta /root. Agora basta rodar (./teste) e se o resultado for O numero e 15 nossa syscall foi implementada com sucesso!

E-mail: tarcisio.crocomo@inf.ufsc.br