Prof. Filippo Valiante Filho - 2005.
Objetivo
O objetivo deste trabalho é apresentar os conceitos básicos de um Sistema Operacional de Tempo Real, conhecido pela sigla inglesa “RTOS”, de Real-Time Operating System. Um RTOS pode ser utilizado em sistemas computacionais de diversos tipos e portes. Neste trabalho será abordado especificamente o uso de RTOS em sistemas embarcados (embedded systems) baseados em microcontroladores.
Introdução
O conceito de tempo real em processamento de dados está relacionado a atender às necessidades e restrições de tempo impostas pelo processo controlado. Aplicando este conceito em sistemas operacionais, significa que em um RTOS é preciso haver um controle do tempo para que as restrições possam ser atendidas. Em outras palavras, é preciso haver um comportamento determinístico, o que significa que cada serviço do sistema operacional tomará um tempo conhecido e esperado. Esse determinismo é a principal diferença de um RTOS em relação a um sistema operacional convencional.
Esse determinismo vem à tona em diversas partes do sistema operacional como o escalonamento de tarefas, alocação dinâmica de memória e troca de mensagens entre as tarefas. Sistemas operacionais comuns não possuem um comportamento de tempo determinístico nessas áreas e portanto não atendem ao critério de tempo real.
O principal componente de um sistema operacional é seu núcleo (kernel) que compõe uma camada intermediária entre o hardware e a aplicação (programa do usuário).
O principal serviço oferecido pelo núcleo do sistema operacional é o gerenciamento das tarefas (task management). Uma tarefa é uma seqüência de instruções, ou pedaço de programa, responsável por uma determinada ação; por exemplo, a leitura de um teclado ou sensor. Cada tarefa pode ter uma necessidade e restrição de tempo diferente, por isso a necessidade de um RTOS. Mas não apenas isto, uma tarefa pode ser mais importante, ou mais urgente, que outra. Ou seja, cada tarefa tem sua prioridade.
Um RTOS pode gerenciar a comutação entre as tarefas através de dois modos de escalonamento: preemptivo e cooperativo. No modo preemptivo uma tarefa pode ser interrompida pelo sistema operacional para que outra passe a ser executada. No modo cooperativo é o programador quem define em cada tarefa o momento em que ela vai abandonar o controle do processador liberando-o para a execução de uma outra tarefa.
O gerenciamento da comunicação entre tarefas, feito através de sinalizadores e de troca de mensagens é outro serviço oferecido pelo núcleo dos sistema operacional.
Para atender às restrições de tempo, um RTOS também oferece serviços de temporização, como o controle do “estouro de tempo”(time-out). A base de tempo estabelecida pelo sistema recebe o nome de “tick rate”.
Outros serviços que podem estar presentes em alguns sistemas operacionais de tempo real são o supervisionamento de dispositivos de entradas e saídas; serviços de alocação dinâmica de memória que permitem às tarefas utilizar alguns pedaços da memória de dados para o programa e; serviços adicionais de alto-nível como gerenciamento de sistema de arquivos, banco de dados e interface gráfica de usuário.
Emprego de Sistemas Operacionais de Tempo Real em Sistemas Microcontrolados
Sistemas embarcados baseados em microcontroladores não costumam utilizar sistemas operacionais. O método de programação mais utilizado é conhecido como superloop e consiste em um único grande laço executado de maneira contínua e seqüencial. Eventos críticos são tratados através de interrupções. Deste modo, as interrupções são executadas em primeiro plano, pois são atendidas prontamente e o laço principal é executado em segundo plano, enquanto não houver nenhum evento que dispare uma interrupção. Por isto este método de programação também é conhecido como foreground / background.
É possível haver várias fontes de interrupção em uma mesma aplicação e ainda diferentes níveis de interrupção porém, conforme a aplicação cresce em complexidade e tamanho fica muito difícil gerenciar questões como interrupções disparadas quando tarefas estão sendo executadas, conflitos entre diversos níveis de interrupção, seqüência única de operações dentro do laço principal, interatividade entre o laço principal e as rotinas de interrupção e, principalmente, o atendimento à todas as restrições de tempo.
Desta forma, para as aplicações mais complexas e as de maior restritividade de tempo, são empregados sistemas operacionais de tempo real.
Um RTOS oferece uma plataforma adequada para a execução da aplicação ao transformar o conceito de um superloop em uma aplicação baseada em múltiplas tarefas adequadamente gerenciadas pelo núcleo do sistema.
Cada uma dessas tarefas têm seus requisitos de tempo e de prioridade individualmente ajustados. Assim, uma tarefa pode ter uma prioridade baixa, mas ser executada a intervalos de poucos milisegundos, enquanto outra tarefa pode ter a prioridade mais alta e ser executada apenas a cada segundo. O RTOS se encarrega de escalonar adequadamente cada tarefa.
Um resumo das diferenças nesta nova abordagem é que o código fonte da aplicação fica um pouco maior em virtude dos comandos relacionados ao sistema operacional, porém as prioridades de execução de cada tarefa são melhor definidas; cada tarefa tem sua estrutura simplificada e a interação com outras tarefas é feita através de sinalizadores e mensagens; o uso de variáveis globais é minimizado; não há a necessidade de laços de atraso; há uma modularidade da aplicação facilitando a inclusão, modificação ou exclusão de tarefas; a execução da aplicação depende das prioridades de cada tarefa e; a comutação e a troca de mensagens e sinalizações entre elas ficam a cargo do RTOS de modo transparente ao programador.
O termo RTOS-enabled application é utilizado para definir uma aplicação pronta utilizando um RTOS.
Descrição de RTOS: Salvo
O RTOS escolhido para ser descrito neste trabalho é o Salvo, da empresa americana Pumpkin, Inc. O Salvo é um sistema operacional de tempo real, multitarefa, baseado em prioridades e que utiliza eficientemente a memória. Projetado exclusivamente para sistemas embarcados de baixo custo, foi o primeiro a dedicar-se exclusivamente à este segmento que possui limitações de memórias RAM e ROM nos componentes utilizados. O Salvo é escrito em linguagem C e suporta microcontroladores PIC, sendo indicado pela própria Microchip, ARClite, ARM ARM7TDMI, Atmel AVR e MegaAVR, Motorola M68HC11, Texas Instruments MSP430 e TMS320C2000 (DSPs), além dos microcontroladores compatíveis com o 8051. Para sua utilização, além de instalar os arquivos apropriados em um PC, é necessário ter um compilador C para o microcontrolador escolhido.
O Salvo é compatível com as séries 12, 16, 17 e 18 dos microcontroladores PIC da Microchip. Também é compatível com os compiladores C da HI-TECH, IAR e Microchip. Os recursos oferecidos são: mais de 40 serviços de usuário na interface do programa de aplicação que podem ser ativados por comandos de chamada (calls); até 16 níveis de prioridade de tarefas; suporte a múltiplos tipos de evento; serviços baseados em temporizador; uso mínimo da pilha em chamadas e retornos; baixa latência de interrupção e rápida mudança de contexto.
Há duas regras de ouro para as aplicações utilizando o Salvo que são: toda tarefa deve possuir uma mudança de contexto e estas só podem ocorrer nas tarefas. O Salvo gerencia automaticamente as atividades mais complexas como a comutação de tarefas (em modo cooperativo) e a comunicação entre elas; atrasos de tempo real; controle de interrupções e seleção de bancos de RAM do microcontrolador.
Conclusão
O uso de um RTOS em um sistema embarcado de pequeno porte, baseado em microcontrolador, permite a elaboração e a execução de aplicações maiores e mais complexas e, sobretudo, que atendam às restrições de tempo de execução impostas pelos processos em que vão atuar para que possam ser consideradas como de tempo real.
Bibliografia
- KALINSKY, D. Basic Concepts of Real-Time Operating Systems. Disponível em http://www.kalinskyassociates.com/Wpaper1.html.
- VALENTI, C. e KALMAN, A. E. Multi-Tasking on the PIC16F877 with the Salvo™ RTOS. Nota de aplicação AN777. Microchip Technology Inc. 2001.
- PUMPKIN, Inc. Salvo User Manual version 3.2.2. 2003. p.11-50.