Buscar

teorico2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Sistemas de 
Tempo Real
Material Teórico
Responsável pelo Conteúdo:
Prof. Dr. Cléber Silva Ferreira da Luz
Revisão Textual:
Prof.ª Dr.ª Selma Aparecida Cesarin
Apresentação das Principais Metodologias 
e Tecnologias de Desenvolvimento
• Introdução;
• Requisitos e Especificação de 
Sistemas de Tempo Real;
• Linguagens de Programação;
• Arquitetura de Sistema de Tempo Real;
• Falhas de Softwares – Prevenção, 
Detecção e Recuperação;
• Conclusões e Resumo da Unidade.
 · Apresentar Metodologias e Tecnologias de desenvolvimento;
 · Fornecer todos os detalhes sobre o desenvolvimento de Sistemas de 
Tempo Real.
OBJETIVO DE APRENDIZADO
Apresentação das Principais 
Metodologias e Tecnologias 
de Desenvolvimento
Orientações de estudo
Para que o conteúdo desta Disciplina seja bem 
aproveitado e haja maior aplicabilidade na sua 
formação acadêmica e atuação profissional, siga 
algumas recomendações básicas: 
Assim:
Organize seus estudos de maneira que passem a fazer parte 
da sua rotina. Por exemplo, você poderá determinar um dia e 
horário fixos como seu “momento do estudo”;
Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma 
alimentação saudável pode proporcionar melhor aproveitamento do estudo;
No material de cada Unidade, há leituras indicadas e, entre elas, artigos científicos, livros, vídeos 
e sites para aprofundar os conhecimentos adquiridos ao longo da Unidade. Além disso, você 
também encontrará sugestões de conteúdo extra no item Material Complementar, que ampliarão 
sua interpretação e auxiliarão no pleno entendimento dos temas abordados;
Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de discus-
são, pois irão auxiliar a verificar o quanto você absorveu de conhecimento, além de propiciar o 
contato com seus colegas e tutores, o que se apresenta como rico espaço de troca de ideias e 
de aprendizagem.
Organize seus estudos de maneira que passem a fazer parte 
Mantenha o foco! 
Evite se distrair com 
as redes sociais.
Mantenha o foco! 
Evite se distrair com 
as redes sociais.
Determine um 
horário fixo 
para estudar.
Aproveite as 
indicações 
de Material 
Complementar.
Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma 
Não se esqueça 
de se alimentar 
e de se manter 
hidratado.
Aproveite as 
Conserve seu 
material e local de 
estudos sempre 
organizados.
Procure manter 
contato com seus 
colegas e tutores 
para trocar ideias! 
Isso amplia a 
aprendizagem.
Seja original! 
Nunca plagie 
trabalhos.
UNIDADE Apresentação das Principais Metodologias 
e Tecnologias de Desenvolvimento
Introdução
Nesta aula, iremos estudar aspectos sobre o desenvolvimento de Sistemas 
de Tempo, bem com as Linguagens de Programação mais utilizadas no Desen-
volvimento, as Técnicas de Desenvolvimento, os Requisitos mais importantes 
no Desenvolvimento.
O desenvolvimento de um Sistema de Tempo Real é semelhante ao desenvol-
vimento de um Sistema Convencional. Todavia, no desenvolvimento de Sistemas 
para aplicações de Tempo Real, alguns aspectos a mais devem ser considerados, 
tais como o tempo e a tolerância às falhas. 
No desenvolvimento do Sistema deve-se dar o máximo de atenção a esses 
dois aspectos. 
O principal foco desta aula é mostrar os principais aspectos de desenvolvimento 
em Sistemas de Tempo Real. 
Iremos estudar as principais linguagens de programação utilizadas em aplica-
ções de Tempo Real, alguns métodos para controlar e manipular falhas e os prin-
cipais requisitos e as especificações que um Sistema de Tempo Real deve possuir. 
Iremos começar nosso estudo pelos Sistemas Embarcados. Muitos Sistemas de 
Tempo Real são implementados na forma de Sistemas Embarcados, que podem ser 
vistos como Sistemas Computacionais implementados em dispositivos específicos 
(hardwares), que realizam tarefas pré-definidas e repetidas vezes. Habitualmente, 
são desenvolvidos para uma atividade específica. (ALMEIDA, M.B.) 
Por exemplo, considere um aparelho cuja única função é controlar a tempera-
tura de um ambiente. Esse aparelho possui um Sistema de Tempo Real que realiza 
o controle da temperatura e deve manter o ambiente numa temperatura de 25°C. 
O aparelho possui sensores que capturam a temperatura do ambiente e enviam 
para o sistema de controle de temperatura, que processa a informação capturada 
pelos sensores. 
Após o processamento, o Sistema deve realizar uma ação, Nesse cenário, caso 
necessário, o sistema de controle poderia aumentar ou diminuir a temperatura do 
ambiente, sempre com o objetivo de manter o ambiente com a temperatura de 25°C.
Esse cenário caracteriza bem um Sistema de Tempo Real: o Sistema recebe 
eventos do ambiente externo, processa tais eventos e realiza uma ação, modi-
ficando o ambiente externo. 
Outro aspecto interessante nesse exemplo é que o sistema de controle de tem-
peratura é implantado em um chip, caracterizando um Sistema de Tempo Real 
na forma de Sistema Embarcados.
8
9
Figura 1 – Exemplo de Sistema de Tempo Real na forma de Sistemas Embarcados
Fonte: iStock/Getty Images
Outro exemplo de Sistemas de Tempo em forma de Sistema Embarcado 
pode ser facilmente abstraído considerando um Sistema de Controle Automo-
tivo. Habitualmente, um Sistema de Controle Automotivo é implementado em 
chips que são responsáveis por controlar todo o Sistema do carro. 
Figura 2 – Exemplo de Sistema de Tempo Real na forma de Sistemas Embarcados (Controle Automotivo)
Fonte: iStock/Getty Images
O desenvolvimento de um Sistema de Tempo Real, seja ele na forma de Sis-
tema Embutido ou não, segue o mesmo paradigma de desenvolvimento de um 
Sistema Convencional. 
Todavia, o desenvolvimento deve considerar aspectos relacionados a um even-
to de Tempo Real, tais como tempo de processamento, prazo e tolerância a fa-
lhas, entre outros. 
A próxima seção apresenta alguns requisitos e especificações necessárias, que 
devem ser contemplados no desenvolvimento de um Sistema de Tempo Real. 
9
UNIDADE Apresentação das Principais Metodologias 
e Tecnologias de Desenvolvimento
Requisitos e Especificação de 
Sistemas de Tempo Real
O desenvolvimento de um Sistema de Tempo Real requer métodos de análise 
de requisitos semelhantes ao desenvolvimento de um Sistema Comum.
Todavia, no desenvolvimento de um Sistema de Tempo Real, a análise de al-
guns requisitos e a especificação do Projeto deve ser realizada rigorosamente, a 
fim de evitar fracassos no desenvolvimento do Sistema.
Na maioria dos fracassos no desenvolvimento de Sistemas de Tempo Real, as 
especificações são inconsistentes, ambíguas, incompletas ou não descrevem corre-
tamente as ações que o Sistema deve tomar. Muitos erros de especificações levam 
a falhas que poderiam ser descobertas por meio de uma especificação, análise e 
simulações. (CAURIN, 2008)
Os principais requisitos de um Sistema de Tempo Real são:
• Funcionais;
• Temporais;
• Dependabilidade.
Os requisitos Funcionais descrevem as funcionalidades que o Sistema deve 
realizar. Na especificação dos requisitos funcionais deve-se definir quem são as 
entidades de Tempo Real, isto é, definir quais são os eventos de Tempo Real que 
o Sistema deve controlar. 
Cada entidade de Tempo Real possui uma validade temporal limitada devido à 
dinâmica física do Processo, isto é, cada entidade de Tempo Real deve ocorrer num 
intervalo de tempo definido e a definição desse intervalo de tempo é definida pela di-
nâmica em que ela ocorre.
O conjunto das entidades de Tempo Real define a base de dados de Tempo Real. 
Essa base deve ser atualizada sempre que houver mudança de valor numa entidade. 
Um Sistema de Tempo Real é usado para controlar ou monitorar eventos. 
Normalmente, os Requisitos Temporais são relacionados à dinâmica do pro-
cesso físico que o Sistema pretende controlar, isto é, os requisitos temporais 
são relacionados à frequência e à dinâmica com que os eventos ocorrem. Esses 
requisitos devem realizar restrições quanto a:
• Atrasosna detecção dos eventos;
• Atrasos no processamento; 
• Atrasos na resposta dos eventos.
Requisitos de Dependabilidade são usados para definir a confiabilidade do Sistema. 
Sistemas de Tempo Real devem ser altamente confiáveis. Nessa análise de 
requisitos, deve-se ressaltar aspectos de disponibilidade e de mantenabilida-
de. Mantenabilidade é a propriedade que define se um Sistema possui condi-
ções de executar as suas tarefas.
10
11
Linguagens de Programação
Aplicações de Tempo Real requerem Linguagens de Programação com as mes-
mas características que as Linguagens de propósitos gerais possuem.
Todavia, essas aplicações necessitam de algumas características adicionais que, 
em muitos casos, não são encontradas nas Linguagens de propósitos gerais. 
Algumas dessas características são:
• Acesso e controle de tempo;
• Controle de concorrência;
• Tratamento de exceções.
Com o intuito de abstrair tais características, nos últimos anos, muitas Lingua-
gens de Programação sofreram modificações, justamente para abstrair caracterís-
ticas relacionadas a aspectos de eventos de Tempo Real. Por exemplo, a Lingua-
gem Java possui uma extensão para aplicações de Tempo Real. Também foram 
criadas diversas linguagens para aplicações de Tempo Real, as Linguagens Real-
-Time Euclid, Esterel e CSP são exemplos de Linguagens criadas especialmente 
para aplicações de Tempo Real.
Aspectos como tempo, concorrência, tolerância às falhas e funcionalidades 
bem definidas são aspectos inerentes a uma aplicação de Tempo Real.
Dessa forma, é importante que as Linguagens de Programação utilizadas em apli-
cações de Tempo Real forneçam mecanismos capazes de controlar tais aspectos.
Em relação ao aspecto de tempo, uma Linguagem de Programação para apli-
cação de Tempo Real deve fornecer Mecanismos ou Primitivas capazes de con-
trolar e monitorar o tempo em que as tarefas ocorrem. 
Essas Primitivas devem ser capazes de lidar tanto com tempos absolutos como 
tempos relativos e, geralmente, são implementadas como um servidor de relógio. 
Algumas dessas Primitivas são:
• set() – Para ajustar o tempo de uma tarefa um relógio ou timer;
• read() – Para ler o tempo de uma tarefa;
• delay() – Para retardar um tempo de uma tarefa;
• sleep() – Para colocar uma tarefa para dormir.
Vale lembrar que, em uma aplicação de Tempo Real, o tempo é um aspecto de 
extrema importância. Dessa forma, é de suma importância que as Linguagens de Pro-
gramação forneçam primitivas ou mecanismos para controlar e monitorar o tempo.
Todas as Linguagens de Programação para aplicação de Tempo Real devem 
fornecer mecanismos capazes de controlar eventos concorrentes. Devem ser 
fornecidos recursos para sincronização, escalonamento e execução de tarefas 
em paralelo e a comunicação entre elas. 
11
UNIDADE Apresentação das Principais Metodologias 
e Tecnologias de Desenvolvimento
Dessa forma, as Linguagens de Programação devem ser altamente paralelas, ca-
pazes de processar várias tarefas em paralelo. Um Sistema de Tempo Real deve 
realizar as tarefas o mais rápido possível, ou melhor, no prazo determinado. Assim, 
o paralelismo é o elemento chave no processamento de tarefas. Com ele, é possível 
aumentar o desempenho no processamento.
Um Sistema de Tempo Real é caracterizado por ser altamente confiável. O Sistema 
deve ser totalmente tolerante a falhas, caso elas ocorram. Tanto as falhas de hardwares 
como as de softwares devem ser tratadas elegantemente, caso ocorram. 
Dessa maneira, é importante que as Linguagens de Programação forneçam 
mecanismos capazes de controlar e manipular as falhas.
Na fase de projeção do Sistema, todas as falhas devem ser mapeadas e con-
tornadas. Em tese, se as falhas foram mapeadas, elas não devem ocorrer, certo? 
Se ocorrerem, podem ser consideradas casos caros. Todavia, deve-se usar uma 
linguagem capaz de detectar e manipular falhas.
Esterel
Esterel é uma linguagem orientada para evento. Seu uso é bastante significante 
na programação “reativa” de uma aplicação, isto é, ela é muito usada para intera-
gir, aceitar, monitorar e controlar sinais e eventos do ambiente externo. 
Esterel é baseada em Modelo de Computação com grande similaridade com 
grafos de estados. Uma Linguagem para Programação baseada em estados re-
cebe um estímulo do ambiente externo e reage logo em seguida, isto é, de um 
estado passa para outro estado. 
A Esterel foi projetada para ser usada em conjunto com uma Linguagem hos-
pedeira com propósito geral, que seja responsável pela manipulação dos dados e 
dos aspectos computacionais mais convencionais de uma aplicação.
Enquanto a Esterel cuida de monitorar e controlar os eventos, outra Lingua-
gem de propósito geral cuida de processar os dados, por exemplo. 
Para entender um Programa Esterel funcional é fácil imaginar uma máquina 
de estado. O Sistema de Tempo Real está num estado atual, até que um ou mais 
eventos ocorrem. 
Esses eventos fazem com que o Sistema sofra uma “reação” e com isso entre 
em outro estado. A reação deve gerar uma ação ou ações (saída). Essa saída cor-
responde à aceitação do evento de entrada. 
Se o Sistema aceitou o evento de entrada, deve respondê-lo logo em seguida 
com uma ação. É importante ressaltar que a aceitação do evento de entrada gera 
uma ação (uma saída); todavia, enquanto o Sistema está processando essa saída, 
outros eventos de entrada podem influenciar a ação do primeiro evento.
Dessa forma, o Sistema encontra-se num estado atual ao receber o evento 
de entrada, sofre uma mudança e passa para outro estado; ao receber novos 
eventos de entradas, o Sistema passa para novos estados. Uma ação termina 
num ponto definido ou quando não se tem mais ações para serem executadas.
12
13
O objetivo de um Sistema de Tempo Real é responder aos eventos eternos do 
ambiente, certo? 
Dessa maneira, habitualmente, um Sistema de Tempo Real possui sensores 
para capturar os eventos do ambiente.
A Linguagem Esterel funciona como uma interface entre o ambiente e o Sis-
tema, fornecendo várias funções para monitorar e capturar os eventos externos.
Java com Extensão a Tempo Real
Atualmente, Java é a Linguagem Orientada a Objeto mais usada no mundo 
inteiro. É uma linguagem bem completa e com vários recursos voltados para o 
desenvolvimento de Sistemas. 
Fortemente influenciada pela Linguagem C++ e seu conceitos de orienta-
ção a objeto, Java se tornou muito usual no desenvolvimento de Sistemas nos 
últimos anos, consequência de seus excelentes recursos de desenvolvimento e, 
também, por sua capacidade de fácil portabilidade.
Programação concorrente é fortemente presente em aplicações de Tempo Real 
e Java permite programação concorrente por meio da criação de vários Threads. 
Geralmente, um programa possui uma única linha de execução; na progra-
mação concorrente, é possível criar vários Threads, isto é, é possível criar várias 
linhas de execuções paralelas e concorrentes. 
Desse modo, uma tarefa pode ser dividida entre duas Threads; com isso, o 
tempo de execução da tarefa é menor, porque a execução será dividida entre 
as duas Threads. 
A programação concorrente em Java é extremamente sólida e eficaz. Assim, a 
Linguagem Java acaba sendo uma Linguagem muito atrativa para aplicações de 
Tempo Real.
Programa
Thread 1 Thread 2 Thread 3 Thread 4 Thread 5
Figura 3 – Programação concorrente
13
UNIDADE Apresentação das Principais Metodologias 
e Tecnologias de Desenvolvimento
O foco desta seção é apresentar algumas funções do Java para a Programação 
Concorrente: funções que são constantemente utilizadas no desenvolvimento de 
aplicações de Tempo Real.
Java é fundamentalmente orientado a objetos e, com isso, o modelo emprega-
do na Programação Concorrente é orientado a objetos.
Nesse modelo, existe a classe Threads. Para criar Threads, uma classe prin-
cipal deve estender a classe Thread (utilizando a palavra reservada extends) e 
programar um método run para o novo objeto. O método run contém o código 
executável do Thread.Uma instância de um Thread é ativada chamando o método star. Essa chamada 
invoca o método run do Thread. Por exemplo, a chamada:
Produtor.start();
tornaria o Thread Produtor habilitado para execução.
O código de Produtor, seu método run poderia fazer alguma computação 
e, então, inserir dados m em um buffer por meio de uma chamada ao método 
Deposita de um objeto Buffer. Por exemplo, com:
Buffer.Depista(m);
O objeto Buffer poderia ser uma instância de uma classe geral de buffers limi-
tados. Por exemplo, BB, e declarados com o código:
BB Buffer = new BB();
Na classe Threads, há muitos outros métodos para gerenciar threads, entre 
os quais está o método join(), que faz um invocador esperar até que um thread 
termine antes de continuar sua execução. 
Considere a thread Processa_Dados, a qual deve esperar até que a 
thread Obtém_Dados termine antes que ela possa continuar. Para realizá-lo, 
Processa_Dados chamaria:
Obtem_Dados.join();
A rotina join também pode receber por parâmetro o tempo máximo que ela 
deve esperar. 
Outros métodos interessantes que Java disponibiliza são:
• Wait;
• Notify;
• NotifyAll;
• Synchronized.
O método wait() bloqueia sempre a thread chamadora e libera o controle, isto 
é, a thread que chama o método fica em modo de espera e libera o controle para 
as outras threads.
Já o método notify() despertará a thread chamadora, ou seja, desbloqueará uma 
thread que estava esperando (thread que ficou bloqueado com o método wait).
O método notifyAll() desbloqueia todas as threads que estavam bloqueadas.
Já o método synchronized é utilizado para criar e sincronizar as threads.
14
15
Real-Time Euclid
A linguagem Real-Time Euclid é uma linguagem de pesquisa projetada para 
previsibilidade; ela também, possui grande facilidade na integração e na interação 
de componentes de sistemas.
O seu objetivo é garantir que os programas tenham suas restrições temporais 
satisfeitas. Real-Time Euclid é uma extensão de Tempo Real da Linguagem de 
Programação paralela Concurrent Euclid.
A Linguagem Real-Time Euclid permite programação concorrente. Nessa 
Linguagem, os processos, semelhante ao Java, são encarados como objetivos 
ativos concorrentes.
Tais objetos podem ser sincronizados, como também os recursos podem ser 
compartilhados. Essa linguagem disponibiliza o método wait semelhante ao 
Java, e também o método signal sobre variáveis de condições.
Um wait sobre uma variável de condição faz o processo invocador e bloqueia-
-se na variável. Um signal sobre uma variável de condição despertará um pro-
cesso bloqueado; se não existem processos sobre a variável de condição, uma 
operação signal é ignorada. (CAURIN, 2008)
Os processos em Real-Time Euclid podem também se comunicar fora de moni-
tores por meio de Primitivas wait e signal similares e de um brodcast.
Determinismo temporal é obtido por restrições sobre a Linguagem e por adição 
da informação temporal a algumas estruturas-chave. Processos e Estruturas de Dados 
são definidos estaticamente e não podem ser criados ou modificados dinamicamente.
Um wait numa variável de condição tem um tempo de espera associado. Por 
exemplo, a chamada wait:
WaitvcnoLongerThan 15 : vc_expirada
faz o invocador bloquear-se na variável de condição vc.
O comando também indica que a exceção vc_expirada é sinalizada se o 
processo invocador (e em espera) não for despertado dentro de 15 unidades 
de tempo.
Assumindo que esse é o único processo esperando em vc, o despertador ocor-
re se e quando outro processo emite uma operação de signal sobre vc.
signal vc.
Nessa linguagem, laços são limitados especificando um número máximo de 
iterações, usando uma expressão de limite, exp1 ... exp2, em que as duas ex-
pressões exp1 ... exp2 são avaliadas para inteiros em tempo de compilações 
|exp1 ... exp2| + 1 é o limite superior do contador de iteração. 
15
UNIDADE Apresentação das Principais Metodologias 
e Tecnologias de Desenvolvimento
Por exemplo, o código:
For i : 15 .. n
lista_comandos
end for
faria iteração sobre a lista_comandos não mais do que (n-15)+1 vezes, onde n 
é conhecido em tempo de compilação (saídas anteriores ao término do laço podem 
ser feitas com um comando exit).
Os processos podem ser periódicos ou esporádicos. Um quadro de tempo asso-
ciado a cada processo define seu período e prazo-limite (processo periódico) ou seu 
tempo de separação mínimo e prazo limite (processo esporádico). 
Pré e pós condições que devem ser satisfeitas em cada ativação podem ser es-
pecificadas. Exceções são identificadas e tratadas por meio de três métodos: 
1. Um comando kill faz o processo em questão terminar após ter indicado 
uma exceção;
2. Um comando de activate determina o quadro corrente do processo;
3. Um comando except salva o estado de processo, chama um tratador de 
exceção e retorna a execução do processo em execução.
Programas Real-Time Euclid são analisados para escalonabilidade por meio 
de um processo complexo e exaustivo que simula, essencialmente, todos os pos-
síveis caminhos e disputas por recursos. 
Iniciando no nível de instrução de máquina, limites de tempo para segmentos 
não iterativos de programas compilados são estimados.
Indeterminismos de hardware, tais como aqueles causados por operações de ca-
che e DMA, são ignorados e assumidos como não tendo efeito sobre os resultados. 
Atrasos e disputas são delimitados numa segunda fase. O mecanismo de esca-
lonamento subjacente é o prazo-limite mais cedo primeiro (EDF), o enfileiramento 
de chaveamentos de monitores e de varáveis de condição é realizado pela regra 
primeiro que entra, primeiro que sai (FIFO).
Arquitetura de Sistema de Tempo Real 
Uma descrição arquitetônica de um Sistema especifica a estrutura e o estilo dos 
elementos que compreende. 
Arquiteturas de softwares para Sistema de Tempo Real abrangem, também, 
os tipos possíveis de componentes de software, como esses componentes podem 
ser organizados, como eles interagem entre si e as abstrações e modelos subja-
centes. (CAURIN, 2008)
16
17
Um Sistema de Tempo é visto como um mundo fechado contendo dois 
componentes:
• Um ambiente; 
• Um Sistema Computacional.
Que interagem por meio de mensagens, sinais ou eventos, através de sua 
interface. Em outra visão, um Sistema de Tempo Real pode estar num conjunto 
de estados. 
Geralmente, cada estado denota um conjunto particular de valores de variá-
veis ou um conjunto de relações entre variáveis que representam o ambiente e 
o computador. 
O Sistema muda de estado devido a eventos que alteram os valores das variáveis 
de um estado. Essa mudança de estado é chamada de transição de estado. Os even-
tos causadores de transição podem ser eventos de interface, que são transmitidos do 
ambiente para o Sistema Computacional.
O modelo mais comum para Sistemas de Tempo Real é o adaptado de um mo-
delo usado em Sistemas Operacionais e Programação Concorrente.
O Sistema que implementa estados e transições é composto por um conjunto 
de processos interativos; processos interagem enviando mensagem entre si, com-
partilhando hardware, software e recursos. 
O Processo é o objeto ativo de um Sistema e é a unidade lógica de trabalho 
escalonada pelo Sistema Operacional.
Ele tem um “estado”, normalmente representado por um Descritor de Dados 
ou Bloco de Controle de Processos. O descritor armazena informações, como os 
valores das variáveis do processo, seu contador de instruções e os recursos que 
foram alocados para ele.
Processos Periódicos e Esporádicos
Sistemas de Tempo Real, geralmente, contêm dois tipos de processos :
• Periódicos;
• Esporádicos.
Processos periódicos são ativados de forma regular entre intervalos fixos de 
tempo. Em geral, são usados para monitoramento sistemático ou amostragem de 
informação a partir de sensores, por um intervalo longo de tempo. 
Processos esporádicos são dirigidos por eventos. Eles são ativados por um 
sinal externo ou uma mudança de alguma relação. Um processo esporádico 
pode ser usado para reagira um evento indicando uma falha de alguma peça 
de equipamento.
17
UNIDADE Apresentação das Principais Metodologias 
e Tecnologias de Desenvolvimento
Falhas de Softwares – Prevenção, 
Detecção e Recuperação
Um Sistema de Tempo Real deve ser totalmente tolerante a falhas. Na fase de 
projeção de um Sistema de Tempo Real, todas as falhas devem ser mapeadas, para 
que, na fase de desenvolvimento, todas elas sejam controladas. Os maiores proble-
mas encontrados em um sistema tolerante a falhas são prevenção, isto é, evitar 
falhas; detecção, avaliação de falhas, recuperação e correção de falhas. 
Para um sistema ser tolerante a falhas, a melhor solução é a prevenção. Esse as-
pecto deve ser muito bem pensando na fase de projeção. 
Na fase de análise de requisitos, as especificações do Sistema e os próprios re-
quisitos devem ser bem elaborados. Boa parte das falhas possíveis, ou quase todas 
as falhas de um Sistema, são descobertas na fase de requisitos e especificações. 
Todavia, dada uma especificação correta, ainda é possível ocorrerem falhas por 
causa de erros de implementações. 
Erros de Programação podem ser encontrados e controlados por meio de fer-
ramentas convencionais de depuração de Programa. Porém, mesmo se usar todas 
as técnicas e ferramentas possíveis para encontrar os erros, um Sistema não esta-
ria livre da ocorrência de falhas. 
Algoritmos podem ser implementados incorretamente; todos os possíveis erros 
que podem ocorrer num Sistema podem não ser conhecidos ainda, e o comporta-
mento do ambiente com o software pode ocorrer de formas incorretas.
É importante termos em mente que erros de softwares e erros de hardwares 
são coisas diferentes e ocorrem por motivos diferentes.
Habitualmente, erros de hardwares são mais fáceis de encontrar e manipular. 
Já erros de softwares são mais difíceis de serem descobertos.
Todavia, tanto erros de softwares como erros de hardwares podem ocorrer em 
tempo de execução. Formalmente, uma falha de execução ocorre quando alguma 
asserção ao Sistema é violada, isto é, alguma regra do Sistema é violada. Portan-
to, a Detecção de erros envolve a avaliação de algumas condições Booleanas em 
tempo ou local apropriado. 
Caso ocorra uma falha, o prejuízo causado pode ser determinado a partir dos 
valores das variáveis de estados no momento da detecção.
Infelizmente, uma falha é frequentemente detectada algum tempo após ela ter 
inicialmente ocorrido e após ela ter produzido dano adicional que, geralmente, 
mascara a causa original.
Em aplicações de Tempo Real, Recuperação e Correção de erros coloca o Sis-
tema em um estado consistente. Corrigir e isolar o erro, se possível, de tal maneira 
que a falha não torne a ocorrer imediatamente e não ocorra novamente. 
18
19
Nesses aspectos, dois métodos são importantes para recuperar as falhas.
São eles:
• Recuperação de falhas por avanço (forwad);
• Recuperação por retrocesso (backward).
O método por retrocesso é semelhante ao adotado na maioria dos Sistemas Ope-
racionais. Nesse método, os estados do Sistema são armazenados ou “checados” 
em determinados pontos em intervalos freqüentes; ocorrendo um erro, o estado é 
“trazido de volta”, ao ponto de checagem mais recente e a computação é repetida. 
Esse método é interessante e atraente, mas nem sempre é possível usá-lo numa 
aplicação de Tempo Real. 
O estado pode ser irrecuperável, especialmente se uma operação afetou o 
ambiente físico. Por exemplo, considere um robô que executa alguma operação 
de manufatura; corta um plano para a confecção de uma roupa. Se o corte foi 
realizado errado, não há como voltar atrás. 
Situações semelhantes a essa ocorrem frequentemente em aplicações de Tem-
po Real. Dessa forma, esse método pode ser inviável para aplicações de Tempo 
Real, sem contar que, muitas vezes, o ato de voltar o Sistema para um estado 
anterior pode levar muito tempo e o fator tempo é um aspecto de grande impor-
tância em aplicações de Tempo Real.
No método de recuperação avançada, um futuro estado consistente é deter-
minado, o Sistema é forçado ou colocado nesse estado e a execução é retomada 
desse ponto. Considerando o exemplo do robô, se ele realizou um corte errado, 
um novo corte pode ser realizado na mesma peça, dando um novo visual para a 
peça de roupa. Tipicamente, o tempo de recuperação por avanço é mais previsível 
e mais rápido do que o tempo para voltar a um estado anterior consistente.
Em ambos os métodos de recuperação, alguma intervenção não computado-
rizada pode ser necessária para isolar, reparar ou determinar a causa da falha, 
ou para recuperar o Sistema. Por exemplo, considere um Sistema de Controle 
de Tráfego Aéreo ou um Sistema de Controle de vôo a bordo. Num determinado 
momento, o Sistema de Controle poderia trocar o modo automático para o ma-
nual, quando certas falhas são detectadas.
Diversos métodos para o problema de tolerância a falhas de software foram 
desenvolvidos ao longo dos anos. Um conjunto de técnicas emprega as ideias 
de processamento de transições desenvolvidas para Sistemas para aplicações 
de Tempo Real.
Esse conjunto envolve controle de concorrência, atomicidade, capacidade 
de serialização e consistência. Um exemplo é o paradigma do objeto sensível 
ao tempo, que define uma visão centrada em dados de Sistemas de Tempo Real 
como uma alternativa à visão comum baseada em processamento de tarefa.
19
UNIDADE Apresentação das Principais Metodologias 
e Tecnologias de Desenvolvimento
O método da computação imprecisa também foi proposto para evitar e tra-
tar falhas temporais. Nesse método, uma tarefa pode ser decomposta em duas 
partes: uma parte obrigatória e uma parte opcional, que pode ser saltada se não 
houver tempo suficiente para completá-la.
Em outra variação da técnica da computação imprecisa, uma tarefa pode ter 
versões diferentes, cada uma executando com diferentes durações de tempo e pro-
duzindo resultados com precisões diferentes.
A versão selecionada para execução depende do tempo disponível. Essa última 
alternativa é um exemplo de projeto diversificado.
Conclusões e Resumo da Unidade
O desenvolvimento de um Sistema de Tempo Real segue os mesmos para-
digmas de desenvolvimento de um Sistema Convencional. Todavia, o desenvol-
vimento deve considerar aspectos relacionados ao evento de Tempo Real, tais 
como tempo de processamento, prazo e tolerância a falhas, entre outros.
No desenvolvimento de Sistemas de Tempo Real, os requisitos e as especifica-
ções devem ser realizados com bastante criticidade. 
Os requisitos e as especificações devem considerar aspectos para manipular 
eventos de Tempo Real, tais como tempo, prazo e tolerância a falhas.
Os principais requisitos de um Sistema de Tempo Real são:
• Funcionais;
• Temporais;
• Dependabilidade.
Os requisitos funcionais descrevem as funcionalidades que o Sistema deve rea-
lizar. Um Sistema de Tempo Real é usado para controlar ou monitorar eventos. 
Normalmente, os Requisitos Temporais são relacionados à dinâmica do pro-
cesso físico que o Sistema pretende controlar, isto é, os requisitos temporais são 
relacionados à frequência e à dinâmica com que os eventos ocorrem. Requisitos de 
Dependabilidade são usados para definir a confiabilidade do Sistema.
Aplicações de Tempo Real requerem Linguagens de Programação com as mes-
mas características que as Linguagens de Propósitos Gerais possuem
Todavia, essas aplicações necessitam de algumas características adicionais que, 
em muitos casos, não são encontradas nas Linguagens de Propósitos Gerais. 
Algumas dessas características são:
• Acesso e controle de tempo;
• Controle de concorrência;
• Tratamento de exceções e previsibilidade.
20
21
Existem diversas linguagens para aplicações de Tempo Real, entre as quais se 
encontram, Esterel, Java e Real-Time Euclid. 
Esterel é uma linguagem orientada a evento. Seu uso é bastante significante na 
programação “reativa” de uma aplicação, isto é, ela é muito usada para interagir, 
aceitar, monitorar e controlarsinais e eventos do ambiente externo.
Esterel é baseada em modelo de computação com grande similaridade com 
grafos de estados. Uma linguagem para programação baseada em estados. 
Recebe um estímulo do ambiente externo e reage logo em seguida, ou seja, 
de um estado, passa para outro estado. 
Atualmente, Java é a linguagem orientada a objeto mais usada no mundo inteiro.
Java é uma linguagem bem completa e com vários recursos voltados para o 
desenvolvimento de sistemas. Fortemente influenciada pela Linguagem C++ e 
seu conceitos de orientação a objeto, Java se tornou muito usual no desenvolvi-
mento de Sistemas nos últimos anos e permite a Programação Concorrente. 
A Programação Concorrente em Java é extremamente sólida e eficaz. Dessa 
forma, a Linguagem Java acaba sendo uma Linguagem muito atrativa para apli-
cações de Tempo Real.
A Linguagem Real-Time Euclid é uma Linguagem de Pesquisa projetada para 
previsibilidade, ela também tem grande facilidade na integração e na interação de 
componentes de Sistemas. 
Seu objetivo é garantir que os programas tenham suas restrições temporais 
satisfeitas. Real-Time Euclid é uma extensão de Tempo Real da Linguagem de 
Programação paralela Concurrent Euclid.
Sistemas de Tempo Real geralmente contêm dois tipos de processos:
• Periódicos;
• Esporádicos.
Processos periódicos são ativados de forma regular entre intervalos fixos de 
tempo. Em geral, são usados para monitoramento sistemático ou amostragem 
de informação a partir de sensores, por um intervalo longo de tempo.
Processos esporádicos são dirigidos por eventos; eles são ativados por um sinal 
externo ou uma mudança de alguma relação.
Um Sistema de Tempo Real deve ser totalmente tolerante a falhas. Na fase de 
projeção de um Sistema de Tempo Real, todas as falhas devem ser mapeadas, para 
que na fase de desenvolvimento todas elas sejam controladas. 
Os maiores problemas encontrados num Sistema tolerante a falhas são preven-
ção, isto é, evitar falhas, detecção, avaliação de falhas, recuperação e correção 
de falhas. 
21
UNIDADE Apresentação das Principais Metodologias 
e Tecnologias de Desenvolvimento
Para um Sistema ser tolerante a falhas, a melhor solução é a prevenção. 
Esse aspecto deve ser muito bem pensando na fase de projeção. 
Em aplicações de Tempo Real, recuperação e correção de erros colocam o Sis-
tema num estado consistente. Deve-se corrigir e isolar o erro, se possível, de tal 
maneira que a falha não torne a ocorrer imediatamente e não ocorra novamente. 
Nesses aspectos, dois métodos são importantes para recuperar as falhas.
São eles:
• Recuperação de falhas por avanço (forwad);
• Recuperação por retrocesso (backward).
O método por retrocesso é semelhante ao adotado na maioria dos Sistemas 
Operacionais. Nesse método, os estados do Sistema são armazenados ou “checa-
dos” em determinados pontos em intervalos freqüentes.
Ocorrendo um erro, o estado é “trazido de volta” ao ponto de checagem mais 
recente e a computação é repetida. 
No método de recuperação avançada, um futuro estado consistente é deter-
minado, o Sistema é forçado ou colocado nesse estado e a execução é retomada 
desse ponto.
22
23
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
 Sites
Sergio Prado
Sistemas de Tempo Real – Parte 1.
https://goo.gl/K29zuC
 Vídeos
Sistema em Tempo Real - SO
https://youtu.be/gaO9o-ZfMiU
Sistemas de Tempo Real
https://youtu.be/HTLZUCkdQbA
 Leitura
Sistemas de Tempo Real
https://goo.gl/4bcgvB
23
UNIDADE Apresentação das Principais Metodologias 
e Tecnologias de Desenvolvimento
Referências
ALMEIDA, M. B. de. Implementando sistemas operacionais de Tempo Real 
em microcontroladores. Amazon, 2013. (eBook)
CAURIN, G. A. P. Análise de sistemas operacionais de Tempo Real para 
aplicações de robótica e automação. 2008. 154 p. (Dissertação de Mestra-
do) Departamento de Engenharia da Escola de Engenharia /Universidade de 
São Paulo, São Paulo, 2008.
CEDENO, W.; LAPLANTE, P. A. Na overview of real-time operating systems, 
Journal of the Association for Laboratoty Automation, USA, n. 12, p. 40-
45, 2007.
FARINES, J. M., FRAGA, J. S. e OLIVEIRA, R. S. Sistemas de Tempo Real. 
Departamento de Automação e Sistemas. Universidade Federal de Santa Cata-
rina, Florianópolis, julho de 2000. 
MARTIN, T. Design of Real Time Systems. NJ: Prentice-Hall Inc., 2013.
SHAW, A. C., Sistemas e Software de Tempo Real. Porto Alegre: Bookman, 2003.
TANENBAUM, A. S. Sistemas Operacionais Modernos. 2. ed. São Paulo, Pearson 
Prentice Hall, 2003.
24

Outros materiais