Introdução

VxWorks é um sistema operacional de tempo real similar ao Unix produzido e vendido pela Wind River Systems de Alameda, Califórnia, EUA.

Foi criado no começo dos anos 80, quando os fundadores da Wind River resolveram usar seus conhecimentos adquiridos em sistemas de tempo real. Eles tomaram algumas decisões fundamentais sobre como um sistema de tempo real embarcado deveria ser e assim criaram o produto, que desde então já teve 6 versões principais.

Assim como outros sistemas operacionais de tempo-real, o VxWorks contém um kernel multitarefa com escalonamento preemptivo, rápida resposta às interrupções, meios de comunicação entre processos e meios para sincronização, e sistemas de arquivos.

As características do VxWorks são o gerenciamento de memória compatível com POSIX, facilidades para multiprocessadores, um shell para interface de usuário, depurador com capacidade simbólica/código fonte, e monitor de performance.

VxWorks geralmente é empregado em sistemas embarcados. Diferentemente dos sistemas Unix tradicionais, o desenvolvimento no VxWorks é feito numa máquina hospedeira rodando Unix ou Windows, compilando cruzado (cross-compiling) o software para máquina alvo. A tarefa de execução é feita no alvo, mas pode ser feita no hospedeiro, através de um simulador de alvo (VxSim).

Propósitos do SO VxWorks

Permitir multitarefa (Kernel).

Máquina virtual para E/S.

Gerenciamento de memória

Compartilhamento e controle de acesso a recursos.

Hardware Subjacente

O SO Vxworks foi escrito para um número grandede plataformas e hoje roda praticamente em qualquer CPU moderna. Isso inclui a familia x86, MIPS, PowerPC, SuperH, ARM, StrongARM e xScale.

Aplicações que o SO atende

Sistemas Operacionais em Tempo Real (RTOS – Real Time Operation System)

Os RTOS são sistemas operacionais destinados à execução de múltiplas tarefas onde o tempo de resposta a um evento (externo ou interno) é crítico e deve ser tão menos quanto o sistema exigir.

Num RTOS uma aplicação é divida em diversas tarefas independentes. Cada uma dessas tarefas tem uma prioridade conforme a importância da mesma. O tempo de processamento é divido de forma que cada tarefa é executada em uma fatia de tempo. Cabe ao SO controlar a comutação de tarefas, através de um agendador que decide qual será a próxima tarefa a ser executada.

Amplamente utilizado em:

Indústria aeroespacial e sistemas de defesa

Indústria automotiva

Produtos de consumo

Controle de processos industriais

Computação móvel

Equipamento de redes

Exemplos:

  • Os Rovers de exploração de Marte Spirit e Opportunity, além de diversas espaçonaves, como por exemplo, a missão Deep Impact.

  • A Boeing pretende usar como sistema operacional em sua nova aeronave 787.

  • O router wireless WRT54G da Linksys.

  • Câmeras digitais semi-profissionais (como Kodak, Casio).

  • Diversos cable-modems também utilizam VxWorks, como os Motorola SurfBoard.

  • Soluções médicas da Siemens.

  • E diversos outros...

Arquitetura do sistema

Arquitetura Microkernel

Microkernel é um termo usado para caracterizar o sistema cujas funcionalidades saíram do kernel e foram para servidores, que se comunicam com um núcleo mínimo, usando o mínimo possível do "espaço do sistema" (nesse local o programa tem acesso a todas as instruções e a todo o hardware) e deixando o máximo de recursos rodando no "espaço do usuário" (nesse espaço, o software sofre algumas restrições, não podendo acessar alguns hardwares, não tendo acesso a todas as instruções).

A filosofia da Wind River é de utilizar dois sistemas operacionais complementares e cooperativos, deixando que cada um faça o que tem de melhor. De um lado está a máquina host, que roda um sistema operacional comum, como por exemplo, o Windows, e é utilizada para desenvolvimento de aplicativos apenas. Do outro lado temos a máquina target que roda o VxWorks e lida com as tarefas de tempo real. Apenas um pequeno agente de debug esta residente na target, todo o resto de desenvolvimento do software roda na host. Desta maneira, a máquina host serve apenas como uma plataforma de desenvolvimento de software. É nela que deve ser rodado o TORNADO, que é o ambiente de desenvolvimento da Wind River, e acompanha o VxWorks. Mas é na máquina target que a aplicação em tempo real realmente funciona, rodando totalmente em sistema operacional VxWorks.

No coração do VxWorks roda um micro-kernel (que nada mais é que um kernel com o mínimo de funcionalidades possível) chamado de Wind. Este micro-kernel suporta toda uma faixa de funções de tempo real incluindo multitarefas, agendamento e comutação das tarefas, sincronização/comunicação entre tarefas e manuseio de memória. Todas as outras funcionalidades são implementadas como processos.

O VxWorks é bem expansível. Incluindo ou excluindo diversos módulos, ele pode ser configurado para ser usado em pequenos sistemas embarcados, com pesadas restrições de memória, até sistemas mais complexos, onde são necessárias mais funções. Além disso, módulos individuais também são expansíveis. Funções individuais podem ser removidas da biblioteca, ou objetos de sincronização do kernel podem ser omitidos se não forem necessários para uma aplicação.

suporte à Threads

Threads em português significa linha de execução, é uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas simultaneamente. O suporte à thread é fornecido pelo próprio sistema operacional (SO), no caso da Kernel-Level Thread (KLT), ou implementada através de uma biblioteca de uma determinada linguagem, no caso de uma User-Level Thread (ULT). Uma linha de execução permite que o usuário de programa, por exemplo, utilize uma funcionalidade do ambiente enquanto outras linhas de execução realizam outros cálculos e operações. Em hardwares equipados com uma única CPU, cada linha de execução (Thread) é processada de forma aparentemente simultânea, pois a mudança entre uma linha e outra é feita de forma tão rápida que para o usuário isso está acontecendo paralelamente. Em hardwares com multiplos CPUs ou multi-cores as linhas de execução (Threads) podem ser realizadas realmente de forma simultânea;

Os sistemas que suportam apenas uma única linha de execução são chamados de monothread e aqueles sistemas que suportam múltiplas linhas de execução são chamados de multithread.

Recursos básicos do sistema

Manuseio de tarefas

O kernel de tempo real do VxWorks (wind) um ambiente básico de multitarefa. Cada tarefa tem seu próprio contexto, que é o ambiente de CPU e os recursos do sistema que ela vê quando é agendada pelo kernel para execução. Em uma mudança de contexto, o contexto da tarefa é salvo em uma coisa chamada Bloco de controle de tarefa (Task Control Block, TCB).

O VxWorks oferece tanto um mecanismo de agendamento próprio (wind scheduling) como um agendamento POSIX.

Dois algoritmos de agendamento são disponibilizados:

- Agendamento prioritário preemptivo: este é o algoritmo default no wind. Ele garante que a CPU seja alocada para a thread com maior prioridade pronta para rodar. Quando uma thread com uma prioridade maior que a que esta rodando fica pronta para rodar, o kernel imediatamente muda o contexto para a de maior prioridade.

- Agendamento Round-Robin: este algoritmo é uma extensão do agendamento prioritário preemptivo. Ele tenta compartilhar a CPU mais igualmente entre todas as threads de prioridade igual. Para isso ele designa uma fatia de tempo para as threads, e estas não podem ser executadas por mais que este tempo determinado. Quando o tempo acaba, o kernel muda o contexto para outras threads de mesma prioridade, e essas são executadas pelo mesmo tempo designado.

As diferenças entre o agendamento POSIX e o wind são as seguintes:

  • O agendamento POSIX é baseado em processos, e o wind em tarefas.

  • No POSIX, quanto maior o número, maior a prioridade, já no wind é o contrário, quanto menor o número, maior a prioridade. Para toda thread pode ser designado um nível de prioridade de 0 a 255 (256 níveis de prioridade).

O número de threads é limitado apenas pelo espaço em memória.

O VxWorks tem ainda um grande conjunto de funções relacionadas às tarefas. Por exemplo, uma tarefa pode se proteger de ser deletada inesperadamente, pode desativar o agendamento para que a mesma não seja preemptada (manuseio de interrupções ainda irá funcionar), etc.

Manuseio de memória

No VxWorks todas as chamadas de sistema e tarefas compartilham o mesmo espaço de memória. Isso quer dizer que aplicações defeituosas podem acidentalmente acessar recursos do sistema e comprometer a estabilidade de todo o sistema.

Porém, a Wind River oferece um componente adicional (VxVMI), que deve ser comprado a parte, e permite que cada processo tenha sua própria memória virtual.

O VxWorks (sem o VxVMI) tem algum suporte para proteção de memória. Mas os detalhes de como esses mecanismos funcionam depende da plataforma que esta sendo utilizada. Para processadores x86, por exemplo, o usuário pode configurar endereços de memória como válidos ou inválidos. Se o processador tenta acessar um espaço inválido, ou áreas que não estão mapeadas da memória, um erro é gerado.

Quando tarefas compartilham o mesmo espaço, elas são na verdade threads. Para ser qualificada como um processo, uma tarefa deve ter seu próprio espaço na memória. De acordo com as normas POSIX, um processo é um espaço de memória com ao menos uma thread sendo executada e os recursos de sistema para aquela thread.

Comunicação entre tarefas

O VxWorks fornece um rico conjunto de mecanismos para comunicação entre tarefas, com destaque para alguns:

  • Memória compartilhada, para simples troca de dados.

  • Semáforos, para exclusão mútua e sincronização.

  • Filas de mensagens, para troca de informações entre as tarefas através da CPU.

Noções básicas de sincronização

Objetivo da sincronização: esperar pela ocorrência de um evento antes de executar uma tarefa.

Relações inter-tarefas de 3 tipos:

1. Relação de precedência (sincronização por ocorrência de evento)

  • Noção de ordem entre a execução de instâncias de diferentes tarefas.

2. Partilha de variáveis / recursos

  • Troca de informação ou de resultados entre tarefas;

  • Necessidade de proteção através da utilização de semáforos, para impedir que uma variável partilhada seja acedida simultaneamente em escrita por diferentes tarefas.

3. Comunicação (sincronização por envio de mensagem)

  • Precedência + transferência de informação: relação do tipo produtor/consumidor.

Mars PathFinder Mission

– Missão não tripulada à Marte (chegada à Marte em 04/07/1997) para recolher dados meteorológicos, imagens fotográficas, etc.;

– Incluiu a colocação na superfície de um robô móvel autônomo (“Sojourner Rover”), através de uma “aterragem” não convencional.

O problema

– Após alguns dias de missão, o sistema computacional começou a ser reinicializado freqüentemente, ficando incapaz de enviar para a Terra os dados meteorológicos entretanto adquiridos;

Descrição sumária do sistema computacional

– Sistema mono-processador com sistema operativo VxWorks (escal. preemptivo por prioridades), sobre barramento VME para ligação aos sistemas de rádio e de visão e a um barramento 1553.

– O segundo barramento (1553) efetua a ligação aos andares de “cruzeiro” (que inclui um sensor solar e um “scanner” de estrelas) e de “aterragem” (que inclui acelerômetros, um altímetro e um instrumento de aquisição de dados meteorológicos: ASI/MET) da sonda espacial.

Resolução do problema

– Foi utilizado um mecanismo de “trace/log” disponível no sistema operativo VxWorks para recolher informação sobre o sistema nos instantes adequados, tendo sido identificada a fonte da avaria;

– A resolução do problema passou pela ativação dos mecanismos de herança de prioridades(modificação de parâmetros do semáforo). Para tal foi utilizado um interpretador de linguagem C existente no sistema operativo, normalmente utilizado para efetuar a depuração de programas em modo de funcionamento.

Comentários