VISIÓN DE CASO
Mestrando em Engenharia Elétrica e Informática Industrial na Universidade Tecnológica Federal do Paraná. Correo: maikomoroz@ gmail.com
Pesquisador do Laboratório de Microeletrõnica da UTFR e doutorando em Engenharia Elétrica e Informática Industrial na Universidade Tecnológica Federal do Paraná. Correo: jasinski@ solvis.com.br
Professor Associado da Universidade Tecnológica Federal do Paraná, doutor em Electrical Enginering pelo California Institute of Technlogy - Caltech. Correo: pedroni@ utfpr.edu.br
Embedded systems are part of numerous applications, most of which include real-time or specialized operating systems. The operating system must be chosen taking into account functional and technical characteristics of the embedded product. This paper presents a survey on the main requirements to help determine whether an operating system should be used in an embedded design, further we show how these requirements may be used for assessing the operating system selection.
Key WordsEmbedded Systems, Real-time Systems, RTOS, Operating System Selection.
Os sistemas embarcados compõem a grande maioria dos dispositivos eletrõnicos. A decisão de usar um sistema operacional é umas das mais importantes em um projeto embarcado. Para auxiliar nestas decisões, este artigo apresenta os principais requisitos que podem ser considerados em um projeto embarcado. Em seguida apresentamos os critérios para decisão sobre o uso ou não de um sistema operacional e os requisitos técnicos e comerciais utilizados na escolha de um sistema operacional embarcado.
Palavras chaveSistemas embarcados, Sistemas de tempo real, seleção de sistemas operacionais.
Sistemas embarcados estão presentes em, praticamente, todos os dispositivos eletrõnicos, sendo encontrados em eletrodomésticos, carros e aviões. Estes dispositivos desempenham funções de controle ou monitoramento no ambiente ou equipamento em que estão inseridos.
Os sistemas embarcados podem ser implementados com ou sem a utilização de um sistema operacional, porém a pesquisa re alizada pelo site EETimes em 2010 [1] revelou que em 70% dos projetos embarcados pesquisados foi utilizado um sistema operacional. Sendo este um dos principais componente em um projeto embarcado. Mas, apesar da sua importância para o projeto, não há uma abordagem consistente ou um método para auxiliar na decisão de adoção de um sistema operacional e em como selecionar um. Frequentemente a escolha por um sistema operacional é baseada apenas em critérios não técnicos como experiência prévia com determinado produto.
Este artigo aborda o assunto de sistemas embarcados com o objetivo de suprir a carência de material sobre adoção e seleção de sistemas operacionais. Apresentamos os requisitos dos sistemas embarcados que podem ser utilizados na decisão de utilização de um sistema operacional. Em seguida apresentamos como estes requisitos influenciam a escolha do sistema operacional, quando decidido pela utilização de um.
Um sistema embarcado é um sistema computacional projetado para um propósito específico e geralmente parte de uma aplicação maior [2]. Frequentemente, estes sistemas operam em tempo real e sem intervenção do usuário.
Sistemas embarcados são compostos por hardware (processador, memórias e periféricos) e software. Um esquema representando um sistema embarcado é mostrado na Figura 1. Dependendo da aplicação podem incluir interfaces de comunicação, sensores e atuadores.
Geralmente, sistemas embarcados não existem isolados, mas precisam se comunicar com outros dispositivos (I2C, SPI, USB, Ethernet, Bluetooth e ZigBee) e/ou usuários (botões, teclados, vídeo e som).
São exemplos de aplicações de sistemas embarcados os roteadores sem fio, câmeras fotográficas digitais, console de videogame, GPS automotivo e injeção eletrõnica.
O sistema operacional é uma camada de software que oculta os detalhes do hardware e disponibiliza aos desenvolvedores de software uma melhor interface de programação [3]. As principais funções dos sistemas operacionais são fornecer serviços aos programas, abstrair os detalhes do hardware e coordenar acesso ao mesmo.
Os sistemas operacionais de tempo real possuem relação intrínseca com o tempo e são construídos para permitirem o cumprimento de requisitos temporais específicos. Eles podem ser classificados em hard real-time e soft real-time. No primeiro, uma falha grave poderá acontecer se um deadline for perdido, enquanto no segundo a única penalidade é a degradação na performance. Hard real-time e soft real-time são dois pontos extremos no espectro de classificação dos sistemas operacionais quanto ao seu desempenho de tempo real. Na prática, os sistemas operacionais de tempo real estão entre estes dois pontos.
Para suportar múltiplas tarefas em aplicações de tempo real, o escalonador deve ser preemptivo baseado em prioridades [2]. Neste caso, o escalonador deve ser capaz de interromper qualquer tarefa para permitir a execução de outra com maior prioridade. Além disto, também deve possuir vários níveis de interrupção para permitir tratamento de interrupções com diferentes níveis de prioridade.
Para permitir que várias tarefas se comuniquem entre si em um tempo hábil, é necessário que a sincronização e a comunicação entre os processos sejam previsíveis. O tempo para iniciar uma tarefa, latência entre troca de tarefas e latência de interrupção devem ser bem definidos e consistentes mesmo com o aumento da carga do sistema [4].
Cada projeto possui uma série de requisitos que guiam a escolha de cada componente individual no sistema embarcado. Os requisitos fornecem descrições dos serviços fornecidos pelo sistema e suas restrições; podem ser classificados em funcionais e não funcionais [5].
Antes de se escolher um sistema operacional deve-se avaliar a sua necessidade no projeto. Não é clara a divisão entre projetos que necessitam ou não sistemas operacionais, sendo que muitos projetos aceitam ambas as soluções. A experiência dos desenvolvedores com determinada solução possui grande peso na escolha, mas algumas considerações podem ajudar neste processo.
De forma geral, sistemas modelados em uma ou poucas tarefas não necessitam de um sistema operacional. Estes podem ser implementados utilizando a arquitetura conhecida como Super Loop [7], que consiste em um laço infinito contendo todas as tarefas a serem executadas. Um exemplo do Super Loop é mostrado na Figura 2; a rotina Initialization é executada apenas uma vez, enquanto as demais rotinas são executadas infinitamente.
A execução de um sistema operacional consome recursos do sistema, como ciclos de CPU e memórias de programa e dados. Desta forma, sistemas operacionais não são adequados em projetos cujo hardware previamente definido é muito restritivo, embora existam sistemas operacionais projetados especificamente para microcontroladores com pouca disponibilidade de recursos. Por exemplo, o microcontrolador AT89S51 da Atmel cujas características relevantes estão reproduzidas na Tabela 1; devido aos poucos recursos oferecidos por este microcontrolador, não é recomendável a utilização de um sistema operacional.
A utilização de um sistema operacional pode encarecer um produto à medida que exige mais recursos de hardware. Em produtos onde o custo é um fator crucial na escolha dos componentes pode ser preferível optar pela não utilização de um sistema operacional, visto que além do custo do hardware há o custo de aquisição do sistema operacional e, em alguns casos, royalty por unidade produzida.
Apesar das exigências impostas pela utilização de um sistema operacional, estes oferecem muitas vantagens aos desenvolvedores e ao processo de desenvolvimento. Os benefícios mais evidentes são a modularização, reutilização de código fonte e facilidade de integração de partes de software.
Adicionalmente, a maioria dos sistemas operacionais oferece alguns dos serviços listados na Tabela 2. Quando algum destes serviços estiver presente nos requisitos do projeto é recomendável sua implementação utilizando um sistema operacional.
A escolha de um sistema operacional é uma das decisões mais importantes no projeto de um sistema embarcado. Se após as considerações da seção 5 foi decidido pela utilização de um sistema operacional, ainda é necessário escolher qual o mais adequado para o projeto. Os requisitos apresentados nas seções 4.1 e 4.2 a seguir são usados para este processo de seleção.
Os requisitos técnicos dizem respeito às propriedades e limitações dos sistemas operacionais. Os principais requisitos técnicos estão listados na Tabela 3.
Em projetos onde a migração entre diferentes processadores é uma possibilidade, o suporte a diferentes famílias de processadores é considerado um requisito de portabilidade. Nestes casos, é importante que o sistema operacional suporte diferentes processadores.
Os sistemas operacionais necessitam de memórias de código e de dados. A quantidade requerida destas memórias aumenta com o número de funcionalidades providas pelo sistema operacional. Caso as quantidades disponíveis de memória sejam uma limitação do projeto, estas podem impedir a adoção de um sistema operacional com mais funcionalidades. Porém a maioria dos sistemas operacionais é altamente configurável, o que permite a inclusão de apenas os componentes necessários para o sistema embarcado, originando uma imagem otimizada do sistema operacional.
O desempenho do sistema operacional está relacionado à sua capacidade de lidar com tarefas de tempo real, o tempo gasto para troca entre tarefas e a latência no atendimento de interrupções. Tudo isto influencia na capacidade do sistema atender aos requisitos temporais especificados no projeto.
O escalonamento de processos é uma das principais vantagens da utilização de um sistema operacional. Está relacionado a esta função o algoritmo de escalonamento, a quantidade de tarefas simultâneas suportadas, a quantidade de níveis de prioridade, a possibilidade de criação e remoção de tarefas dinamicamente e o mecanismo para prevenção da inversão de prioridades.
Além do escalonamento de tarefas, os sistemas operacionais também oferecem outros recursos e serviços. Como por exemplo, suporte a processadores com vários núcleos, gerenciamento de memória, mecanismos de comunicação e sincronização entre processos, sistemas de arquivos, protocolos de comunicação e interface gráfica com o usuário.
Os protocolos de comunicação são regras para permitir a troca de informações entre sistemas. Muitos protocolos de comunicação são suficientemente complexos para desencorajar o seu uso sem a presença de um sistema operacional. Nestes casos, a utilização de um sistema operacional que possua os requeridos protocolos embutidos é altamente recomendada.
As ferramentas de desenvolvimento são softwares e hardwares utilizados no processo de desenvolvimento. Apesar do grande impacto que estas ferramentas causam na produtividade, em muitos casos sua importância é negligenciada. As ferramentas de desenvolvimento mais comuns são ambiente integrado de desenvolvimento (IDE), compiladores, profilers, debuggers, simuladores e emuladores.
Os requisitos comerciais dizem respeito às regras de negócio, ao orçamento disponível e aos demais fatores não técnicos. Os principais fatores comerciais estão listados na Tabela 4.
A reputação do sistema operacional é importante em alguns projetos, especialmente aqueles projetos críticos ou de longa duração. Um fator geralmente considerado é o fabricante, ou seja, quem é responsável pelo desenvolvimento e manutenção do sistema operacional. Além disso, políticas corporativas podem exigir que os softwares utilizados sejam de empresas confiáveis. Finalmente, são considerados os prêmios e certificações recebidos pelo sistema operacional.
O sistema operacional pode ser distribuído sob uma licença comercial ou livre (free software ou open source). No caso de uma licença livre, restrições sobre o uso, modificação ou redistribuição podem ser impostas ao produto que a utilize. Por exemplo, a licença GNU General Public License (GPL) exige que modificações feitas ao código fonte sejam disponibilizadas para outros desenvolvedores. Em contrapartida, algumas licenças comerciais permitem acesso ao código fonte sem necessidade de redistribuição das modificações.
Os principais custos envolvidos na adoção de um sistema operacional comercial são o licenciamento inicial e em alguns casos royalties por unidade produzida. De forma geral, o fabricante fornece, juntamente com o sistema operacional adquirido, suporte técnico por um tempo limitado, o qual pode ser ampliado posteriormente. Por outro lado, no caso de sistemas operacionais livres, o suporte pode ser contratado de consultores, o que pode ser considerado um risco adicional para o projeto.
A fim de possibilitar melhor portabilidade do código fonte entre diferentes sistemas operacionais algumas interfaces padrão de programação (API) foram padronizadas, por exemplo, POSIX e ITRON. A compatibilidade com padrões pode obrigatória para algumas aplicações comerciais e contratos com o governo, devendo ser considerados nestes casos.
Neste artigo abordamos os requisitos dos sistemas embarcados e sistemas operacionais, os quais podem auxiliar no processo de decisão pela utilização ou não de um sistema operacional embarcado. No caso de um projeto baseado em um sistema operacional, mostramos como selecionar o sistema operacional mais adequado, baseando-se nos requisitos deste projeto.