RTOS – Sistema Operacional de Tempo Real

Introdução

A maior confiança na tecnologia para executar tarefas cruciais levou ao desenvolvimento de sistemas operacionais determinísticos e de alto desempenho, incluindo sistemas operacionais em tempo real (RTOS). Estes sistemas são utilizados em situações onde a exatidão temporal é tão importante quanto a exatidão lógica de um programa. Por exemplo, suponhamos que você esteja executando um programa que consiste em quatro tarefas. Cada tarefa deve ser concluída em um milissegundo. Se executarmos o programa e essas quatro tarefas produzirem uma saída lógica correta, sem levar em consideração seu tempo de conclusão, pode-se deduzir que esse programa não é um sistema de tempo real. Mas se houver condições estritas no tempo de execução dessas quatro tarefas, bem como na correção lógica, então esse sistema é chamado de sistema de tempo real. Portanto, neste post, abordaremos as principais características de um sistema RTOS, bem como suas principais aplicações e vantagens em sua utilização.

Primeiramente, o que é um Sistema Operacional?

Sucintamente, um sistema operacional é o software principal que gerencia todo o hardware e outros softwares em um computador. O sistema operacional, também conhecido como “OS” (sigla em inglês para Operating System), faz interface com o hardware do computador e fornece serviços que os aplicativos podem usar.

Este sistema é o conjunto principal de softwares em um dispositivo, o qual mantém comunicação com o hardware. Eles lidam com tudo, desde seu teclado e mouse até o rádio Wi-Fi, dispositivos de armazenamento e tela. Em outras palavras, um sistema operacional lida com dispositivos de entrada e saída. Os sistemas operacionais usam drivers de dispositivo escritos por criadores de hardware para se comunicar com seus dispositivos.

Os sistemas operacionais também incluem muitos softwares – coisas como serviços de sistema comuns, bibliotecas e interfaces de programação de aplicativos (APIs) que os desenvolvedores podem usar para escrever programas que rodam no sistema operacional.

O sistema operacional fica entre os aplicativos que você executa e o hardware, usando os drivers de hardware como a interface entre os dois. Por exemplo, quando um aplicativo deseja imprimir algo, ele transfere essa tarefa para o sistema operacional. O sistema operacional envia as instruções para a impressora, usando os drivers da impressora para enviar os sinais corretos. O aplicativo que está imprimindo não precisa se preocupar com a impressora que você possui ou entender como ela funciona. O sistema operacional lida com os detalhes.

Fonte: Tutorialspoint.

O sistema operacional também lida com multitarefas, alocando recursos de hardware entre vários programas em execução. Caso você tenha um computador com várias CPUs ou núcleos, o sistema operacional controla quais processos são executados e os aloca entre os diferentes CPUs, permitindo que vários processos sejam executados em paralelo. Ele também gerencia a memória interna do sistema, alocando memória entre os aplicativos em execução.

Outras atividades importantes feitas pelo Sistema Operacional são:

Segurança – Por meio de senha e outras técnicas semelhantes, impede o acesso não autorizado a programas e dados.

Controle sobre o desempenho do sistema – Identifica atrasos de registro entre a solicitação de um serviço e a resposta do sistema.

Contabilização de trabalhos – Mantem o controle do tempo e dos recursos usados ​​por vários trabalhos e usuários.

Auxiliares de detecção de erros – Produção de rastreamentos, mensagens de erro e outros auxiliares de depuração e detecção de erros.

Coordenação entre outros softwares e usuários – Coordenação e atribuição de compiladores, intérpretes, montadores e outros softwares aos diversos usuários dos sistemas computacionais.

Definição de RTOS

O que é?

Um Sistema Operativo em Tempo Real (RTOS da sigla Real Time Operating System) é um sistema operacional/operativo destinado à execução de múltiplas tarefas onde o tempo de resposta a um evento (externo ou interno) é pré-definido; não importando, como é comum pensar-se, se a velocidade de resposta é elevada ou não. Esse tempo de resposta é chamado de prazo da tarefa e a perda de um prazo, isto é, o não cumprimento de uma tarefa dentro do prazo esperado, caracteriza uma falha do sistema. Outra característica dos sistemas de tempo real é a sua interação com o meio ao redor. Os STR (Sistemas de Tempo Real) tem que reagir, dentro de um prazo pré-definido, a um estímulo do meio. Por exemplo, em um hospital, o sistema que monitora os batimentos cardíacos de um paciente deve avisar os médicos caso haja alteração nos batimentos. Outro aspecto importante dos STR é a previsibilidade. O sistema é considerado previsível quando podemos antecipar seu comportamento independentemente de falhas, sobrecargas e variações de hardware.

Um RTOS facilita a concepção de um sistema em tempo real, mas não garante que o resultado final seja um sistema de tempo real, para tal é necessário que o programa nele implementado tenha sido corretamente desenvolvido. Um RTOS não tem que ter necessariamente um elevado débito nas saídas, ou um elevado número de saídas, no entanto, tem que garantir que certas tarefas sejam executadas em um determinado intervalo de tempo. Um RTOS é mais eficaz e é mais valorizado pela forma previsível e rápida na resposta a um evento, do que pela quantidade de dados que processa. Os fatores chave em um STR são, então, fornecer latências de interrupções e de alternância de tarefas mínimas.

Como funciona?

Existem diferentes tipos de funcionalidades básicas de um RTOS que seguem

  • Agendador baseado em prioridade;
  • Rotina de interrupção do relógio do sistema;
  • Comportamento determinístico;
  • Sincronização e Mensagens;
  • Serviço RTOS.

Agendador baseado em prioridade

No escalonador baseado em prioridade, a maior parte do RTOS está entre 32 e 256 prioridades possíveis para as tarefas ou processos individuais. Este planejador executará o processo com a prioridade mais alta. Se a tarefa estiver sendo executada na CPU, a próxima tarefa de maior prioridade será executada e os processos contínuos.

No sistema, o processo de maior prioridade terá a CPU

  • Roda para terminar;
  • Se a tarefa original for antecipada pela nova, um processo de alta prioridade é preparado.

Existem três estados de tarefas ou processos que estão prontos para serem executados e o outro está bloqueado. A descrição de cada estado é fornecida abaixo.

Pronto para rodar: O pronto para ser executado é quando o processo tem todos os recursos para executar, mas não deve estar no estado de execução.

Em execução: Se a tarefa estiver em execução, é dito que ela está em execução.

Bloqueado: Nesse estado, se não houver recursos suficientes para ser executado, ele será enviado para o estado bloqueado.

Três técnicas são modificadas para agendar a tarefa, a seguir com sua descrição.

Agendamento de cooperação: Neste tipo de agendamento, a tarefa será executada até que ela seja concluída.

Agendamento de Round Robin: Neste escalonamento, a cada processo é atribuído um slot de tempo fixo e o processo precisa completar sua execução ou então a tarefa perde seu fluxo e geração de dados.

Agendamento preventivo: O agendamento preventivo envolve a alocação de tempo dependente do tempo de prioridade. Em geral, são usados ​​256 níveis de prioridade e cada tarefa tem um nível de prioridade exclusivo. Existem alguns sistemas que suportam o nível de prioridade mais e as tarefas múltiplas têm algumas prioridades.

Rotina de interrupção do relógio do sistema

Para realizar a operação sensível ao tempo, o RTOS fornecerá algum tipo de relógio de sistema. Se houver um relógio de sistema de 1 ms, você terá que completar a tarefa em 50 ms. Normalmente, existe uma API que segue você para dizer “Em 50ms me acorde”. Portanto, a tarefa estaria na posição de dormir até que o RTOS fosse acordado. Temos dois avisos de que o acordado não garantirá a execução exatamente naquele momento, isso depende da prioridade e se a prioridade mais alta estiver em execução no momento, ela será atrasada.

Comportamento Determinístico

O RTOS se esforça ao máximo para proteger as tarefas, mesmo se você executou 100 tarefas ou apenas 10. Não faz nenhuma diferença na distância para alternar o contexto e determinar a próxima tarefa de maior prioridade. Na área principal determinística, o RTOS é o tratamento de interrupção, quando a linha de interrupção é sinalizada, o RTOS imediatamente executa a ação da rotina de serviço de interrupção correta e a interrupção é tratada sem qualquer atraso.

Temos que dizer que os desenvolvedores do projeto escreverão os ISRs (Interrupt Service Routines, ou rotina de serviço de interrupção é uma rotina de software que o hardware invoca em resposta a uma interrupção. O ISR examina uma interrupção e determina como tratá-la, executa o tratamento e retorna um valor de interrupção lógico. Se nenhuma manipulação adicional for necessária, o ISR notifica o kernel com um valor de retorno.) específicos do hardware. Antes, o RTOS fornece os ISRs para as portas seriais, relógios do sistema e pode ser um hardware de rede, mas se houver algo especializado como sinais de marca-passo, atuadores, etc., estes não farão parte do RTOS.

Isso é tudo sobre generalizações brutas. Há uma grande variedade de implementações no RTOS. Alguns dos RTOS são operados de maneira diferente e a descrição acima é compatível com a grande parte dos RTOS existentes.

Sincronização e Mensagens

A sincronização e as mensagens fornecem a comunicação entre a tarefa de um sistema para outro sistema e os serviços de mensagens estão seguindo. Para sincronizar as atividades internas é usado o flag de evento e para enviar as mensagens de texto que podemos usar na caixa de correio, canais e filas de mensagens. Nas áreas de dados comuns, os semáforos são usados.

  • Semáforos;
  • Bandeiras de eventos;
  • Caixas de correio;
  • Tubos;
  • Filas de mensagens.

Serviço RTOS

A parte mais importante do sistema operacional é o kernel. Para monitorar o hardware, a tarefa deve ser aliviada e as responsabilidades que o kernel gerencia e aloca os recursos. Se a tarefa não pode obter a atenção da CPU para todas as vezes, existem alguns outros serviços fornecidos pelo kernel. Os seguintes são

  • Serviços de tempo;
  • Serviços de manuseio de interrupção;
  • Serviços de gerenciamento de dispositivos;
  • Serviços de gerenciamento de memória;
  • Serviços de entrada-saída.

Componentes do RTOS

Aqui estão componentes importantes do RTOS:

O Scheduler: Este componente do RTOS informa em que ordem as tarefas podem ser executadas, o que geralmente é baseado na prioridade.

Multiprocessamento Simétrico (SMP): É uma série de várias tarefas diferentes que podem ser feitas pelo RTOS para que o processamento paralelo possa se realizado.

Biblioteca de funções: É um elemento importante do RTOS atuando como uma interface que ajuda a conectar o kernel e o código da aplicação. Esta aplicação permite enviar os pedidos ao kernel através de uma biblioteca de funções para que a aplicação dê os resultados desejados.

Gerenciamento de memória: Este elemento é necessário no sistema para alocar memória para cada programa, que é o elemento mais importante do RTOS.

Latência de despacho rápido: É o intervalo entre o término da tarefa que pode ser identificada pelo OS e o tempo real gasto pelo thread, que está na fila de pronto, a qual iniciou o processamento.

Objetos e classes de dados definidos pelo usuário: O sistema RTOS faz uso de linguagens de programação como C ou C ++, que devem ser organizadas de acordo com seu funcionamento.

Tipos de RTOS

Três tipos de sistemas RTOS são:

Hard Real Time:

No Hard RTOS, o prazo é tratado de forma muito estrita, o que significa que determinada tarefa deve começar a ser executada no horário programado especificado e deve ser concluída dentro do período de tempo atribuído.

Exemplo: sistema de cuidados médicos críticos, sistemas de aeronaves, etc.

Tempo real firme:

Este tipo de RTOS também precisa seguir os prazos. No entanto, perder um prazo pode não ter um grande impacto, mas pode causar efeitos indesejáveis, como uma grande redução na qualidade de um produto.

Exemplo: vários tipos de aplicativos multimídia.

Soft Real Time:

RTOS Soft Real time, aceita alguns atrasos pelo sistema operacional. Neste tipo de RTOS, há um prazo atribuído para um trabalho específico, mas um atraso de um pequeno período de tempo é aceitável. Portanto, os prazos são tratados com suavidade por este tipo de RTOS.

Exemplo: sistema de transações online e sistema de cotação de preços de gado.

Por que usar RTOS?

Existem diversas técnicas bem estabelecidas para escrever um bom software embarcado sem o uso de um RTOS. Em alguns casos, essas técnicas podem fornecer a solução mais apropriada; no entanto, à medida que a solução se torna mais complexa, os benefícios de um RTOS se tornam mais aparentes. Esses incluem:

Agendamento baseado em prioridade: A capacidade de separar o processamento crítico do não crítico é uma ferramenta poderosa.

Abstraindo informações de tempo: O RTOS é responsável pelo tempo e fornece funções API. Isso permite um código de aplicação mais limpo (e menor).

Capacidade de manutenção / extensibilidade: A abstração das dependências de tempo e do projeto baseado em tarefas resulta em menos interdependências entre os módulos. Isso facilita a manutenção.

Modularidade: A API baseada em tarefas incentiva naturalmente o desenvolvimento modular, pois uma tarefa normalmente terá uma função claramente definida.

Promove o Desenvolvimento da Equipe: O sistema baseado em tarefas permite que designers / equipes separados trabalhem independentemente em suas partes do projeto.

Teste mais fácil: O desenvolvimento baseado em tarefas modulares permite testes baseados em tarefas modulares.

Reutilização de código: Outro benefício da modularidade é que aplicações semelhantes em plataformas semelhantes levarão inevitavelmente ao desenvolvimento de uma biblioteca de tarefas padrão.

Eficiência aprimorada: Um RTOS pode ser totalmente orientado a eventos; nenhum tempo de processamento é desperdiçado na pesquisa de eventos que não ocorreram.

Processamento ocioso: O processamento em segundo plano ou ocioso é executado na tarefa ociosa. Isso garante que itens como medição de carga da CPU, verificação de CRC em segundo plano, etc., não afetem o processamento principal.

Projeto: FreeRTOS no Arduino

FreeRTOS é um kernel de sistema operacional em tempo real para dispositivos embarcados que foi portado para 35 plataformas de micro controladores. Ele é distribuído sob a licença do MIT.

O FreeRTOS foi projetado para ser pequeno e simples. O próprio kernel consiste em apenas três arquivos C. Para tornar o código legível, fácil de portar e manter, ele é escrito principalmente em C, mas existem algumas funções de montagem incluídas onde for necessário (principalmente em rotinas de agendamento específicas de arquitetura).

FreeRTOS fornece métodos para vários threads ou tarefas, mutexes, semáforos e temporizadores de software. Um modo sem tique é fornecido para aplicações de baixa energia. Prioridades de thread são suportadas. Os aplicativos FreeRTOS podem ser completamente alocados estaticamente. Alternativamente, os objetos RTOS podem ser alocados dinamicamente com cinco esquemas de alocação de memória fornecidos:

  • Alocar apenas;
  • Aloque e libere com um algoritmo muito simples e rápido;
  • Um algoritmo livre e de alocação mais complexo, porém rápido, com coalescência de memória;
  • Uma alternativa ao esquema mais complexo que inclui coalescência de memória que permite que um heap seja dividido em várias áreas de memória;
  • E a biblioteca C alocada e gratuita com alguma proteção de exclusão mútua.

O projeto desenvolvido aqui é extremamente simples e serve unicamente para o leitor compreender como esse sistema funciona. Ele consiste em um push button e um LED (usaremos o do próprio Arduino). Sua função será escrever no monitor serial ininterruptamente, e, enquanto isso, o LED estará aceso no Arduino, quando pressionarmos o botão e soltarmos, o LED deve piscar. Precisaremos inicialmente instalar a biblioteca do FreeRTOS. Primeiro, vá em Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas…

Digite freertos na barra de pesquisa e instale o FreeRTOS como indicado abaixo.

Diagrama

O diagrama de nosso projeto é bem simples.

Código

O primeiro código abaixo consiste no projeto que não utiliza RTOS, e o seguinte utiliza. Vejamos suas diferenças.

Sem RTOS:

O código abaixo é bastante simples. Dentro do loop, ele verifica se o botão está pressionado ou não. Se sim, ele espera o botão deixar de ser pressionado para piscar o LED, e se não, ele continua checando enquanto escreve no monitor serial.

Com RTOS:

Já o código abaixo contém a lógico do RTOS. Nele, a partir da biblioteca adicionada anteriormente, podemos alternar a execução do código entre escrever no monitor serial e piscar o LED. Para isso, foram criadas duas funções, uma para escrever, outra para piscar, e, dentro do void setup, foram declarados dois comandos para a alternância de tarefas.

Resultados

Abaixo, está o vídeo dos resultados, mostrando primeiro o código sem RTOS rodando e, logo em seguida, o código com RTOS.

É possível perceber que, na primeira abordagem, sem RTOS, o programa pausava enquanto o botão era pressionado, só voltando a escrever no monitor serial depois que o botão era liberado. Já na abordagem com a utilização do RTOS, o código permanecia imprimindo no monitor serial mesmo com o botão pressionado, devido a alternância de tarefas. Essa funcionalidade é extremamente importante dentro do mundo do Arduino e da programação e pode ser utilizada em diversos outros programas.

Considerações Finais

A partir do post acima, foi possível compreender um pouco mais o funcionamento de sistemas RTOS, bem como suas aplicações e as vantagens de sua utilização. Se o leitor se interessou pela implementação prática do projeto, acredito que gostará dos seguintes posts relacionados:

Curtiu o post? Avalie e deixe um comentário!

Siga-nos também no Instagram e nos marque quando fizer algum projeto nosso: @eletrogate.

Até mais!

Referências

Ainda sem votos.
Espere por favor...
Ricardo Lousada
Ricardo Lousada
Graduando em Engenharia de Controle e Automação pela UFMG. Ocupo meu tempo aprendendo cada vez mais sobre eletrônica e programação, áreas que mais gosto. Meus hobbies são cinema e livros.
Acesse nossa loja