Sistemas Operativos de Tempo Real

Conteúdo

1. Introdução
2. Sistemas operativos
3. Kernel de tempo real

| 3.1 Multitarefas

| 3.2 Kernel

| 3.3 Interrupções

| 3.4 Escalonador

|  | 3.4.1 não-preemtivo

|  | 3.4.2 preemtivo

4. Serviços do kernel
5. Serviços operativos de TR comerciais
6. Fontes de informação

Sistemas Operativos de Tempo Real

Introdução

Sistemas de tempo real são sistemas cujas características dependem do cumprimento de requisitos temporais e lógicos e onde as consequências do não cumprimento desses mesmos requisitos podem causar prejuízos nefastos, como sejam a segurança de pessoas. Nesta perspectiva, um Sistema Operativo de Tempo Real (SOTR) é uma aplicação multitarefa na qual várias tarefas críticas devem ser processadas em simultâneo. O sistema deve assegurar que as tarefas críticas sejam tratadas em tempo útil.

O uso de SOTR simplifica o projecto de um sistema. De um modo geral, um sistema pode sempre ser decomposto num conjunto de processos. A função do SOTR é gerir esses processos atribuindo-lhes "espaço" para que cada um deles execute, sem que isso destrua a integridade temporal do sistema, isto é, prioridade para os processos críticos.

De alguma forma, as duas palavras sublinhadas anteriormente sugerem o âmbito no qual reside a essência de SOTR:

gerir prioridades, Escalonar!

Sistemas Operativos

Um Sistema Operativo (SO) é um programa que controla a execução dos programas de aplicação dos utilizadores do sistema de computação. O SO fornece uma plataforma virtual de alto nível ao programador que esconde os detalhes do hardware faciitando o desenvolvimento de programas que usam os recursos do sistema. Deste modo, podemos afirmar que o sistema de computação se encontra distribuído por camadas da seguinte forma:

Aplicações do programador
Sistema Operativo
Hardware do sistema

Figura 1

Os sistemas que não usam SOTR são geralmente esquematizados conforme se mostra na figura 1. A estes sistemas chamamos foreground/background. Uma aplicação consiste num loop infinito que pede a cada modulo de aplicação para realizar/executar as operações que se desejam. Os modulos são executados sequencialmente (background) com rotinas do serviço de interrupções (ISRs) que lidam com eventos asincronos (foreground). Operações críticas deverão ser executads pelo ISRs de modo a garantir que estas serão executadas o mais rápido possível (também conhecido por "best effort"). Devido a este facto, ISRs são tendencialmente mais demoradas do que deveriam ser.A informação para um módulo background que é acessível por uma ISR só será processada quando a rotina background estiver apta para a executar. Neste caso a latência depende de quanto tempo o loop em background demora a ser executado.

Kernel de Tempo Real

Multitarefas

Multitarefas é o processo que consiste em escalonar e distribuir o tempo do CPU entre várias/diferentes tarefas; um CPU único permite realizar diferentes tarefas sequenciais. O processo de multitarefas permite-nos estruturar uma aplicação num conjunto de tarefas mais pequenas e dedicadas que partilham o processador. Um dos aspectos mais importantes do processo de multitarefas é o facto de permitir ao programador da aplicação de lidar com situações mais complexas que são inerentes em aplicações de tempo real. Kernel’s de tempo real permitem que se torne mais fácil de realizar e de manter os programas de aplicação. Uma tarefa consiste num programa único que supõe estar a usar o CPU sozinho. A realização de uma aplicação de tempo real envolve a divisão do trabalho que será feito em tarefas que serão responsáveis por uma porção do problema.

Kernel

O kernel é a parte de um sistema de multitarefas que é responsável pela realização de tarefas e pela comunicação entre tarefas. Quando o Kernel decide correr uma tarefa diferente ele salvaguarda o contexto das tarefas correntes (ié, os registos do CPU) na stack destas tarefas; para cada uma das tarefas existe um espaço de memória dedicado à stack respectiva. Ao mudar de tarefa, é feito um update do conteúdo da actual e o conteúdo da stack da nova tarefa é resumido, assim como o código respectivo. O endereço da stack, em conjunto com outra informação é guardado numa estrutura de dados intitulada Task Control Block. O conjunto de todas as TCB’s é depois gerido pelo SOTR.

Interrupções

Um aspecto importante nos sistemas de tempo real é o tempo entre um pedido de interrupção e o instante em que o código para lidar com esse pedido começa a ser processado.Um SOTR desactiva todos os pedidos de interrupção quando está a tratar uma tarefa crítica. Isto impede que sejam identificados pedidos de interrupção enquanto não acabar a execução do código em questão. Para que a latência de interrupção seja o mais pequena possível é necessário que as rotinas de interrupção (ISR's) sejam também pequenas. Um valor típico para o tempo máximo durante o qual as interrupções estão inibidas é 50us.

Escalonador

Também conhecido por dispatcher , é a parte do Kernel responsável por decidir qual a tarefa que vai ser processada a seguir pelo CPU. Para a maior parte dos SOTR, o kernel é baseado numa estrutura de ordem de prioridade: cada tarefa tem uma prioridade associada de acordo com a sua importância. Deste modo, o controlo do CPU será atribuido à tarefa com prioridade mais elevada que está pronta a correr (runnable). Existem dois tipos:

| Escalonador não-preentivo Compete à tarefa que está a correr fazer algo para libertar o CPU. Quando uma tarefa com prioridade mais elevada está pronta a ser executada (ready to run), ainda que o ISR a faça pronta a correr, os recursos só lhe serão atribuidos quando a tarefa actual libertar o processador. É necessário que todas as tarefas cumpram limites temporais de apropriação dos recursos do CPU de modo a que a integridade temporal do sistema seja mantida, ou seja, a resposta a eventos críticos seja dada em tempo útil.
| Escalonador preentivo Num escalonador deste tipo, se um evento transforma uma tarefa de prioridade mais elevada em ready to run, a tarefa actual é imediatamente suspensa e o CPU é cedido a esta tarefa. A maior parte dos SOTR emprega este tipo de escalonamento porque permite uma maior rapidez de resposta a eventos críticos.

Serviços do kernel

Um dos serviços do kernel de tempo real mais comum é a gestão de semáforos. Um semáforo é um protocolo usado para controlo do acesso a recursos partilhados, assinalar a ocurrência de eventos ou sincronizar tarefas. Genericamente, é uma permissão que uma tarefa adequire para continuar a executar. Se o semáforo já estiver em uso, a tarefa é suspensa até que o semáforo seja libertado. A vantagem é que uma tarefa suspensa não gasta tempo do CPU.

Um outro serviço é o estabelecimento de uma base de tempo que permita a uma tarefa atrasar-se um determinado número de tick's definidos por essa base de tempo (ver Noções gerais de Sistemas de Tempo Real, no capítulo 3).

Outro serviço é a troca de mensagens entre mensagens ou entre mensagens e o ISR. Os dois tipos deste serviço mais comuns são o message mailbox e o message queue.

O message mailbox é tipicamente uma variável do tipo apontador que o remetente deixa na mailbox para o destinatário, sendo o tipo de mensagem acordado entre os interlocutores.

O message queue é utilizado para enviar mais do que uma mensagem; genericamente, consiste numa pilha de mailboxes

Sistemas Operativos de TR comerciais

Existem actualmente vários produtos deste género, para plataformas de 8, 16 e 32 bit. Alguns destes produtos incluem kernel de tempo real, gestor de entrada/saída, interfaces gráficas do tipo windowz , um sistema de ficheiros, controlo de rede, Compiladores multi-plataforma, etc.

A grande aposta é, no entanto, em sistemas embebidos de pequena dimensão. São utilizados em controlo de máquinas, intrumentação inteligente, robots, periféricos de computadores, equipamento de telecomunicações, etc. Geralmente, são construídos em plataformas de 8 bit. Com uma capacidade de endereçamento de 64K, não podem suportar SOTR de grande dependência de memória. Existem sistemas comerciais que requerem apenas 1 a 3K de ROM. Alguns permitem até o controlo do tamanho da stack das tarefas, caso-a-caso, para permitir a redução da RAM necessária para a aplicação. Outras vantagens destes sistemas são:

- baixo preço;
- latência de interrupção reduzida;
- tempo de execução determinístico em todos os serviços do kernel;
- capacidade de gerir pelo menos 20 tarefas em simultâneo;
- criação e eliminação dinâmicas de tarefas;
- serviço de gestão de semáforos
- a definição de timeout's e delay's para os serviços do kernel;

tudo isto à custa de um acréscimo de apenas 1 a 5% do tempo de processamento do CPU. Os benefícios de usar SOTR podem ser reconhecidos pela capacidade de desenvolver um sem número de aplicações que beneficiam dos seus atributos sem que haja necessidade de alterar o software.

Fontes de informação

De entre os projectos de desenvolvimento com divulgação na web seleccionaram-se os seguintes pela sua relevância e pela focagem dos aspectos relativos a SOTR. Encontram-se ordenados pela quantidade de informação disponibilizada.

Real Time Linux - Na perspectiva de open source que caracteriza este grupo, não se poderia pedir mais. Desde o código fonte até às FAQ's, está lá tudo.

The Maruti Project - Projecto do departamento de ciencias da computação da universidade de Maryland - USA. Menos suporte mas informação qb. Mais do que o que lá está só através do contacto com os responsáveis do projecto.

LinuxWorks - Embeeded Linux - Demasiado comercial mas um bom exemplo de como se faz actualmente uma grande aposta em sistemas embebidos