Real Time Application Interface

Documentos relacionados
Real Time Application Interface

RTAI - Uma implementação de Tempo Real Crítico em Linux

NetRPC. Walter Fetter Lages

POSIX Threads. Walter Fetter Lages.

Entrada e Saída. Walter Fetter Lages.

Processos Concorrentes

Mecanismos de Comunicação no RTAI

Real Time Linux. Walter Fetter Lages

Aula 3. Executivos (kernels) de tempo-real. Sistemas de Tempo-Real

Sistemas Operacionais

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 07: PROGRAMANDO COM THREADS EM LINGUAGEM C

DISCIPLINA: ELE213 Programação de Sistemas de Tempo Real. Créditos: 4. Caráter: Eletiva. Professor Regente: Prof. Walter Fetter Lages

Sistemas Operacionais Aula 07: Scheduling da CPU. Ezequiel R. Zorzal

Aspectos Construtivos dos Sistemas Operacionais de Tempo Real

Entrada e Saída. Walter Fetter Lages

Introdução aos Sistemas Operacionais. Threads

Sistemas de Tempo-Real

Chamadas de Sistema (SYSCALL)

Sistemas Operacionais

Estrutura do Sistema Operacional

Ferramentas para Programação em Processadores Multi-Core

Sistemas Operacionais de Tempo Real. Sérgio Campos

Unidade 2. Processos Threads Concorrência em Java

INE 5645 Programação Paralela e Distribuída

Na Aula Anterior... O Conceito de Threads

Sistemas Operacionais

Processos no Minix 3.1.7

Estruturas de Sistemas Operacionais

Aula 3. Executivos (kernels) de tempo-real. Sistemas de Tempo-Real

Sistemas Operacionais Aula 7

Sistemas Embebidos I , Tiago Miguel Dias ISEL, ADEETC - Secção de Eletrónica e Telecomunicações e de Computadores

Threads. Agenda. Threads. Processo. Processo. Processo. Processo. (c) Volnys B. Bernal Versão de 22/3/2012

Sistemas Operativos: Implementação de Processos

Retrofitting de Robôs. Walter Fetter Lages Universidade Federal do Rio Grande do Sul Departamento de Engenharia Elétrica

EEL770 Sistemas Operacionais

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Sistemas Operacionais

CONHECIMENTOS ESPECÍFICOS

Escalonamento de Processos Estratégias de Escalonamento de Processos

Estratégias de Escalonamento de Processos

Multiprocessamento. Escalonamento de Processos: Algoritmos. Escalonamento em POSIX. Escalonamento de Threads. Padrão de Execução dum Processo

Noções de Processos. Plano da aula. Serviços oferecidos. Definição & Objetivos. Definição & Objetivos. Sistemas Operacionais : introdução

Departamento de Engenharia Informática Computação Avançada

Sistemas Operacionais. Introdução a Sistemas Operacionais

Linguagem C Princípios Básicos (parte 1)

Métodos Sincronizados

Estrutura do SO. Prof. Paulo Cesar F. de Oliveira, BSc, PhD

Sistemas Operacionais II

Sistemas Operacionais. Estrutura do Sistema Operacional

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Arquitetura de Computadores Sistemas Operacionais II

Sincronização e Comunicação Baseada em Mensagens

Semáforos. Walter Fetter Lages.

Universidade Federal do ABC MCTA Sistemas Operacionais 2019.Q1

18/08/2015. Funções dos sistemas operacionais. Capítulo 3: Sistemas Operacionais

Sistemas Operativos: Escalonamento de Processos

Estrutura dos Sistemas Operacionais. Adão de Melo Neto

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Capítulo 5: Escalonamento da CPU. Operating System Concepts 8th Edition

Estrutura dos Sistemas Operacionais. Adão de Melo Neto

Real Time Clock MC146818A,DS12C887

Sistemas Operacionais. BSI / UAB 2013 Hélio Crestana Guardia

Sistemas Operacionais

Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ENG10032 Microcontroladores

Threads ou Processos Leves

exercício 1 Piscar o LED a cada 1 segundo Parar ao pressionar o botão, mantendo o LED aceso para sempre Programa interativo!

Sistemas Operacionais

Desenvolvimento para Sistemas Embarcados (CEA 513) Sistema de Arquivos Raiz & Componentes do Kernel

no Xenomai 2.5.x 1 Introdução ao desenvolvimento de aplicações de tempo real Aplicações Hardware Xenomai

Introdução. Introdução aos Sistemas Operacionais Volnys Bernal. Sumário. Introdução aos Sistemas Operacionais. Sobre esta apresentação

Sistemas Operacionais Concorrência. Carlos Ferraz Jorge Cavalcanti Fonsêca

Programação com Posix Threads

Threads. Pedro Cruz. EEL770 Sistemas Operacionais

Revisão Linguagem C Parte 1

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 2. Gerência de Processos

Sistemas Operacionais Aula 3

Exclusão Mútua (mutex)

Sistemas Operacionais de Tempo Real. Prof. Andre Luis Meneses Silva

TECNOLOGIA EM REDES DE COMPUTADORES. computadores. Aula 5

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Sistemas Operacionais Prof. Fabrício Sérgio de Paula

Disciplina de Algoritmos e Programação

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios

Fundamentos da Informática Aula 03 - Sistemas operacionais: Software em segundo plano Exercícios Professor: Danilo Giacobo

Arduino. Conectores, Fonte, USB, LEDs. Compilador, Bibliotecas, Editor, Burner

Sistemas Operacionais I

Programação Básica em Arduino Aula 2

UFRJ IM - DCC. Sistemas Operacionais I. Unidade IV Gerência de Recursos Entrada e Saída. 02/12/2014 Prof. Valeria M. Bastos

Sistemas Operacionais. Laboratório 1 (Ambiente de Aprendizado)

Breve introdução ao Real Time Application Interface (RTAI)

SSC0640 Sistemas Operacionais I

5 Implementação do Modelo

Métodos de Sincronização

Sistemas Operacionais I

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Técnicas Avançadas de Programação

Introdução aos Sistemas Operacionais

Processos. Estruturas de Controle

Transcrição:

Real Time Application Interface RTAI-3.x Walter Fetter Lages w.fetter@ieee.org Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Engenharia Elétrica ENG04008 Sistemas de Tempo Real Copyright (c) Walter Fetter Lages p.1

Introdução Desenvolvido por Paolo Mantegazza no Instituto Politécnico de Milão a partir do RT-Linux Utiliza o conceito de HAL e pipeline de interrupções Mais ênfase a aplicabilidade do sistema do que à índices de desempenhos teóricos Suporta programação em tempo real a nível de usuário (LXRT) e ponto flutuante desde as primeiras versões Copyright (c) Walter Fetter Lages p.2

RTAI Chaveamento entre RTAI e kernel padrão Se o RTAI não está montado o kernel normal do Linux é utilizado Suporta SMP Interface estilo POSIX threads Copyright (c) Walter Fetter Lages p.3

Módulos Básicos rtai_hal Serviços básicos, despacho de interrupções e timer. rtai_ksched Escalonamento de tarefas no kernel link para rtai_lxrt Escalonamento nos espaços do kernel e do usuário Copyright (c) Walter Fetter Lages p.4

IPC rtai_bits - sincronização composta rtai_fifos - fifos rtai_mbx - mailboxes rtai_mq - fila de mensagens POSIX rtai_msg - mensagens rtai_netrpc - RPC rtai_sem - semáforos rtai_shm - memória compartilhada rtai_tbx - typed mailboxes Copyright (c) Walter Fetter Lages p.5

Utilitários rtai_leds - bits de I/O rtai_math - funções matemáticas rtai_serial - comunicação serial rtai_tasklets - tarefas temporizadas rtai_usi - interrupções no espaço do usuário rtai_wd - watchdog rtai_rtdm - driver de tempo real rtai_16550a - driver para 16550A rtai_calibrate - calibração do timer rtai_signal - tratamento de sinais rtai_smi - SMI workaround Copyright (c) Walter Fetter Lages p.6

Escalonadores UP scheduler Máquinas monoprocessador Baseado no 8254 SMP scheduler Máquinas SMP Baseado no 8254 ou APIC timer MUP scheduler Máquinas SMP com apenas 1 processador Baseado no 8254 ou APIC timer LXRT scheduler Escalonamento uniforme nos espaços do kernel e do usuário Copyright (c) Walter Fetter Lages p.7

Modos do Timer One-shot Tarefas temporizadas arbitrariamente Timer programado para gerar interrupção no próximo instante Apropriado para processadores com TSC Periódico Tarefas temporizadas em múltiplos do período do timer Período definido na inicialização do timer Apropriado para processadores em TSC Copyright (c) Walter Fetter Lages p.8

APIs API nativa API definida pelo RTAI POSIX Threads API pthreads API comum API de compatibilidade entre o RTLinux e o RTAI LXRT Permite a implementação de tarefas de tempo real no espaço de usuário Copyright (c) Walter Fetter Lages p.9

Exemplo API Nativa Piscar um led no bit 0 da porta 0x378 a 0.5 Hz #include <linux/module.h> #include <asm/io.h> #include <asm/segment.h> #include <rtai_sched.h> #define DESIRED_TICK 1000000 /* 1ms */ static int lpt=0x378; module_param(lpt,int,0); MODULE_PARM_DESC(lpt,"Port for I/O"); static RT_TASK blink_task; Copyright (c) Walter Fetter Lages p.10

Inicialização int init_module(void) { RTIME tick; RTIME now; rt_task_init(&blink_task, blink_thread, lpt, /* data */ 2048, /* stack size */ 1, /* priority */ 0, /* FPU flag */ NULL /*sgnl hdlr */ ); Copyright (c) Walter Fetter Lages p.11

Inicialização rt_set_oneshot_mode(); } tick=start_rt_timer( nano2count(desired_tick)); now=rt_get_time(); rt_task_make_periodic( &blink_task, now+tick, 1000*tick); return 0; Copyright (c) Walter Fetter Lages p.12

Finalização void cleanup_module(void) { stop_rt_timer(); rt_busy_sleep(10000000); rt_task_delete(&blink_task); } outb(0,lpt); Copyright (c) Walter Fetter Lages p.13

Tarefa void blink_thread(int port) { char data=0; for(;;) { outb(data,port); data=~data; rt_task_wait_period(); } } Copyright (c) Walter Fetter Lages p.14

Exemplo POSIX #include <linux/module.h> #include <asm/io.h> #include <asm/segment.h> #include <rtai_sched.h> #include <rtai_posix.h> #define DESIRED_TICK 1000000 /* 1ms */ static int lpt=0x378; module_param(lpt,int,0); MODULE_PARM_DESC(lpt,"Port for I/O"); static RTIME rttick; volatile int end=0; Copyright (c) Walter Fetter Lages p.15

Inicialização POSIX int init_module(void) { pthread_t blink_id; rt_set_oneshot_mode(); rttick=start_rt_timer( nano2count(desired_tick)); pthread_create(&blink_id, NULL, blink_thread, (void *)&lpt); return 0; } Copyright (c) Walter Fetter Lages p.16

Finalização POSIX void cleanup_module(void) { end=1; stop_rt_timer(); rt_busy_sleep(10000000); } outb(0,lpt); Copyright (c) Walter Fetter Lages p.17

Tarefa POSIX void *blink_thread(void *port) { RTIME now; char data=0; now=rt_get_time(); rt_task_make_periodic(rt_whoami(), now+rttick,1000*rttick); while(!end) { outb(data,*((int *)port)); data=~data; rt_task_wait_period(); } pthread_exit(0); return NULL; Copyright (c) Walter Fetter Lages p.18 }

Exemplo LXRT #include <sys/io.h> #include <sys/mman.h> #include <rtai_lxrt.h> #define DESIRED_TICK 1000000 #define LPT 0x378 Copyright (c) Walter Fetter Lages p.19

Exemplo LXRT int main(void) { unsigned long maintsk_name = nam2num("main"); struct sched_param mainsched; RT_TASK *maintsk; int period; int i; char data=0; Copyright (c) Walter Fetter Lages p.20

Exemplo LXRT rt_allow_nonroot_hrt(); mainsched.sched_priority= sched_get_priority_max( SCHED_FIFO)-1; sched_setscheduler(0,sched_fifo, &mainsched); mlockall(mcl_current MCL_FUTURE); Copyright (c) Walter Fetter Lages p.21

Exemplo LXRT maintsk=rt_task_init(maintsk_name, 1,0,0); rt_set_oneshot_mode(); period=(int)nano2count( (RTIME)DESIRED_TICK); start_rt_timer(period); rt_make_hard_real_time(); rt_task_make_periodic(maintsk, rt_get_time()+period, period); Copyright (c) Walter Fetter Lages p.22

Exemplo LXRT ioperm(lpt,1,1); for(i=0; i < 1000; i++) { outb(data,lpt); data=~data; rt_task_wait_period(); } ioperm(lpt,1,0); } rt_make_soft_real_time(); stop_rt_timer(); rt_task_delete(maintsk); return 0; Copyright (c) Walter Fetter Lages p.23

Runinfo Para executar aplicações de tempo real pode-se utilizar o script /usr/realtime/bin/rtai-load Informação de como executar a aplicação é obtida do arquivo.runinfo Arquivo oculto no diretório corrente Descreve os módulos que devem ser carregados e os programas no espaço do usuário que devem ser executados Copyright (c) Walter Fetter Lages p.24

Formato do.runinfo Cada linha do.runinfo tem a forma target_name:module_dependencies:run_actions:init_comment target_name é um nome para o alvo O default é o primeiro alvo module_dependencies é a lista de módulos a ser carregada Os módulos são separados por + e sem o prefixo rtai_ O módulo rtai_hal é carregado sempre e não precisa ser listado run_actions é a lista dos comandos do shell a serem executados, separados por ponto-e-vírgula Copyright (c) Walter Fetter Lages p.25

Ações push <module> pop [<module-list>] popall flush klog exec Comandos precedidos por! são executados por sudo Copyright (c) Walter Fetter Lages p.26

init comment Mensagem a ser exibida antes da execução das ações control_c Mensagem para pressionar ˆC Copyright (c) Walter Fetter Lages p.27

Exemplo lxrtled:lxrt:./lxrtled;popall: Copyright (c) Walter Fetter Lages p.28