Baixe o app para aproveitar ainda mais
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 Definição de Conceitos Básicos e da Importância de Sistemas Computacionais para aplicações Tempo Real • Introdução; • Sistemas de Tempo Real Crítico e Não Crítico; • Classificação dos Sistemas de Tempo Real; • Classificação de Eventos; • Confiabilidade; • Tolerância e Falhas; • Conclusões e Resumo da Unidade. · Apresentar a definição, os conceitos e a classificação de Sistemas de Tempo Real; · Apresentar a importância de Sistemas Computacionais de Tempo Real. OBJETIVO DE APRENDIZADO Defi nição de Conceitos Básicos e da Importância De Sistemas Computacionais para aplicações Tempo Real UNIDADE De!nição de Conceitos Básicos e da Importância De Sistemas Computacionais para aplicações Tempo Real Introdução Vivemos numa era em que a informação é valiosa e, diariamente, milhares de informações estão disponíveis a cada segundo. A informação ajuda na tomada de decisões, que muitas vezes não precisam ser tomadas rápido e que podem possuir impactos imensuráveis. Na Sociedade da Informação, o termo tempo real se refere ao tempo em que uma decisão foi tomada, isto é, analisar a informação e, logo em seguida, tomar uma decisão. Dessa forma, pode-se dizer que a informação está associada à decisão e ao tem- po. Todavia, há um paradigma na Sociedade da Informação, que envolve informa- ção, decisão e tempo. As decisões precisam ser tomadas o mais rápido possível, isto é, quanto me- nos tempo possível para tomar uma decisão, melhor. Todavia, como analisar uma quantidade imensa de informação e tomar uma decisão em pouco tempo? Esse paradigma está presente a todo o momento, na vida do ser humano. Atualmente, a Tecnologia se tornou uma grande aliada da informação e possibilita armazenar, analisar e disponibilizar informações. Além disso, Sistemas Computacionais são responsáveis por realizar diversas atividades importantes na Sociedade. É possível dizer que vivemos numa Sociedade informatizada em que os Sistemas Computacionais são essenciais para realizar diversas atividades que, que muitas vezes, têm restrições temporais, isto é, as atividades devem ser realizadas num determinado intervalo de tempo. Existem Sistemas Computacionais que são responsáveis por realizar atividades temporais de extrema cautela, nas quais a ocorrência de uma falha pode resultar em danos irreversíveis. Habitualmente, o tempo é um fator crítico nessa categoria de Sistemas Com- putacionais. As tarefas realizadas pelo Sistema Computacional precisam ser rea- lizadas num intervalo de tempo definido; caso as tarefas não ocorram dentro do intervalo de tempo determinado, resultará numa falha no Sistema. Podem ocorrer falhas toleradas, ou irreversíveis. As falhas toleradas são falhas que, caso ocorram, os resultados são aceitáveis, isto é, os danos não são de extrema preocupação. Já as falhas irreversíveis são falhas que podem trazer danos irreversíveis, até mesmo fatais. Um Sistema Computacional se preocupa em realizar e concluir tarefas. Todavia, quando o Sistema Computacional se preocupa em concluir a tarefa e também, com o tempo da conclusão da tarefa, ele é classificado como Sistema de Tempo Real [2]. 8 9 Em um Sistema de Tempo Real, o fator tempo é muito importante. O Sistema deve responder a determinadas requisições numa pequena fração de tempo. Um Sistema de Tempo Real responde a requisições pré-determinadas, nas quais a velocidade da resposta tende a ser muita rápida. O tempo de resposta a uma requisição do Sistema é chamado de prazo, isto é, toda tarefa realizada pelo Sistema tem de ser cumprida num prazo de tempo. O termo “perda de prazo” corresponde a um não cumprimento de uma tarefa dentro de um intervalo de tempo determinado. A perda de um prazo corresponde a uma falha do Sistema [1]. Em outras palavras, um Sistema de Tempo Real é um Sistema que realiza diversas tarefas em prazos de tempo, e o não comprimento das tarefas num prazo é uma falha do Sistema. Habitualmente, um Sistema de Tempo Real interage com o seu ambiente. O Sis- tema responde a estímulos do ambiente externo, isto é, o ambiente ao seu redor re- aliza um estímulo e o Sistema responde a esse estímulo em um determinado prazo. Um Sistema de Tempo Real é caracterizado como um Sistema previsível, isto é, um Sistema que conhece todas as ações que irão acontecer e é capaz de antecipar as suas ações. Para isso, o desenvolvimento de um Sistema de Tempo Real deve ser muito bem feito. No desenvolvimento do Sistema, deve-se especificar todas as ações que ele terá de tomar em situações adversas [3]. Num Sistema de Tempo Real, frequentemente, o processamento é especializado e curto. O Sistema obtém um estímulo e o responde logo em seguida, isto é, a tarefa correspondente ao estímulo deve ser executada no prazo definido. Em Sistemas com essas características, há forte tendência em executar as tarefas em paralelo, estabelecendo uma política de prioridade entre tais atividades. Nesse cenário, uma tarefa com prioridade maior pode interromper o processa- mento de outra tarefa, com prioridade menor. Quando as tarefas são executadas em paralelo, é necessário implementar uma sincronização entre elas[4]. Algumas definições de Sistemas de Tempo Real podem ser encontradas na Literatura, como as propostas por Young (1982) e Randell (1995). Na definição proposta por Young (1982), um Sistema de Tempo Real é “Um Sistema que gera uma saída em um determinado tempo para uma entrada externa ao Sistema”. Outra definição é proposta por Randell (1995) e diz que “Um Sistema de Tempo Real é um Sistema que responde a um estímulo do seu ambiente em um determinado intervalo de tempo”. 9 UNIDADE De!nição de Conceitos Básicos e da Importância De Sistemas Computacionais para aplicações Tempo Real Segundo Martins[6], um Sistema de Tempo Real é um Sistema que recebe dados, analisa e executa uma ação ou retorna um resultado rapidamente, e a sua ação afeta o funcionamento do ambiente naquele momento [6] . A IEEE também tem uma definição de Sistemas de Tempo Reais. Segundo a IEEE, um Sistema de Tempo Real é aquele em que o resultado computacional pode ser usado para controlar, monitorar ou responder a um evento externo num determinado intervalo de tempo. Sugiram muitas outras definições de Sistemas de Tempo Real. Todavia, a definição feita por Laplante [7] está mais adequada para os Sistemas de tempo real da atualidade. Segundo Laplante, “Um Sistema de Tempo Real é aquele que deve satisfazer explicitamente restrições de tempo de resposta, podendo ter consequências de riscos ou falhas, não satisfazendo suas restrições”[7]. Muitas vezes, um Sistema de Tempo Real é projetado utilizando ferramentas convencionais de verificação e desenvolvimento. As Tecnologias e as Ferramentas utilizadas na projeção e no desenvolvimento de um Sistema de Tempo Real variam de acordo com o seu propósito. No desenvolvimento dessa classe de Sistema, é possível utilizar Linguagens de Programação de alto e baixo nível. Por exemplo, muitos Sistemas de Tempo Real são implementados em chips, na forma de Sistemas embarcados. Nesse cenário, são utilizadas Linguagens de baixo nível, tais como Assembly e C. Por outro lado, o desenvolvimento de um Sistema de Tempo de Real de previ- são de tempo, por exemplo, é desenvolvido utilizando Linguagens de alto nível, tais como Java e C#, entre outras. Habitualmente, no desenvolvimento de um Sistema de Tempo Real, são utilizados diversos algoritmos determinísticos, isto é, algoritmos que fornecem sempre uma resposta certa e confiável. A utilização de algoritmos determinísticos se faz necessária pelo fator da “tomada de decisão”. A decisão que o Sistema deve tomar deve ser a mais adequada e certa possível e, também, no menor tempo possível. No desenvolvimento de Sistema de Tempo Real, as maiorespreocupações consistem em fornecer a resposta certa no menor tempo possível. Vale ressaltar que o tempo é estritamente relacionado ao problema em questão. Por exemplo, um Sistema de controle aéreo deve fornecer uma resposta em frações de milésimos de segundos. Por outro lado, um Sistema de previsão de tempo, por exemplo, pode fornecer uma resposta em frações de segundos. Dessa forma, ao se escolher a Tecnologia de Desenvolvimento do Sistema, de- ve-se observar a característica do problema. Por exemplo, a Linguagem C é mais rápida que a Linguagem Java. Dessa forma, para o Sistema de Controle Aéreo, por exemplo, a Linguagem C é mais indicada do que a Linguagem Java. 10 11 Figura 1 – Implementação de um Sistema de Tempo Real em chips Fonte: iStock/Getty Images Habitualmente, um Sistema de Tempo Real realiza atividades repetidas com um intervalo de tempo definido. O aspecto mais importante num Sistema de Tempo Real é o fato de as atividades serem deterministas, isto é, as atividades devem sempre ter o mesmo resultado. Um Sistema Computacional é caracterizado como um Sistema de Tempo Real se a dimensão de erro de tempo no intervalo da realização de uma tarefa é pré- definida, podendo ser sempre repetida. Esse aspecto mede o quanto o erro varia, isto é, tratando-se do jitter [7]. Um jitter é definido como uma variação do comportamento inesperado, relacio- nado a algum período de tempo. Em um Sistema de Tempo Real, um jitter pode ser causado por vários motivos. Em um Sistema de Tempo Real,ele pode ser um comportamento inesperado do Sistema, durante a realização de uma atividade [7]. Um Sistema de Tempo Real é usado quando há necessidade de realizar tarefas na quais o tempo é uma questão importante. Alguns exemplos de Sistemas de Tempo Real são: Sistemas que controlam Ex- perimentos Científicos; Sistemas de Processamento de Imagens Médicas; Sistemas de Controle Ferroviário, Sistemas de Controle de Fluxo de Carros; Sistemas de Controle Industrial e Sistema de Controle Marítimo, entre outros. Habitualmente, um Sistema de Tempo Real tem a característica de “controlar”, “monitorar”. Boa parte dos Sistemas de Tempo Real são projetados para monitorar determi- nados eventos. É normal um Sistema de Tempo Real ter sensores que recebem estímulos do ambiente externo, analisam e, logo em seguida, realiza uma ação. A Figura 2 ilustra esses procedimentos. 11 UNIDADE De!nição de Conceitos Básicos e da Importância De Sistemas Computacionais para aplicações Tempo Real Sensores Sensores Sensores Sensores AçãoAçãoAçãoAção Sistema de tempo real Figura 2 – Sistema Tempo Real Sistemas de Tempo Real estão presentes em várias Áreas, em nosso dia a dia. A seguir, são apresentados alguns exemplos desse tipo de Sistemas. Um Sistema de Controle Aéreo é um exemplo de Sistemas de tempo real. Ele monitora e gerencia todos os voos realizados no Aeroporto. Por sua vez, um Sis- tema de Controle Ferroviário é responsável por monitorar todos os trens de uma Rede de Ferrovia e, também, é um exemplo de Sistema de Tempo Real. Figura 3 – Exemplo de Sistema de Tempo Real: Sistema de Controle Aéreo Fonte: Wikimedia Commons Outro exemplo de Sistema de Tempo Real que está presente em nosso coti- diano é o Sistema de Controle Ferroviário. Tanto no cenário de controle aéreo, quanto no cenário de controle ferroviário, o Sistema deve fornecer uma resposta totalmente confiável. Caso o Sistema forneça uma resposta errada ou, ainda, o Sistema apresentar uma falha, pode impactar em resultados irreversíveis, ou até mesmo fatais, pois vidas estarão em jogo. 12 13 Figura 4 – Exemplo de Sistema de Tempo Real: Sistema de Controle Ferroviário Fonte: iStock/Getty Images Sistemas de Tempo Real estão presentes até mesmo no campo de Inteligência. Por exemplo, um Sistema de Tempo Real pode ser implementado num robô que recebe determinados estímulos do seu ambiente externo e os responde com deter- minadas ações. Figura 5 – Exemplo de Sistema de Tempo Real: Sistema Computacional de um robô Fonte: iStock/Getty Images Outro exemplo de Sistema de Tempo Real é o Sistema de Controle de Frequ- ência de Batimentos Cardíacos. Imagine que um paciente está internado na UTI e o caso clínico dele é grave. De repente, a frequência do batimento cardíaco do pa- ciente começa cair. O Sistema de Controle de Frequência de Batimento Cardíaco deve gerar um alerta imediatamente. Figura 6 – Exemplo de Sistema de Tempo Real Fonte: iStock/Getty Images 13 UNIDADE De!nição de Conceitos Básicos e da Importância De Sistemas Computacionais para aplicações Tempo Real O desenvolvimento de um Sistema de Tempo Real é multidisciplinar; envolve diversas áreas da Computação e da Engenharia. A Figura 7 ilustra a natureza interdisciplinar envolvida no desenvolvimento de um Sistema de Tempo Real. Sistemas de Tempo Real Linguagens de Programação Teoria de Controle Estruturas de Dados Arquitetura de Computadores Algoritmos Teoria de Escalonamento Sistemas Operacionais Engenharia de Software Figura 7 – Ilustração dos conceitos interdisciplinares envolvidos em Sistemas de tempo real Sistemas de Tempo Real Crítico e Não Crítico Os Sistemas de Tempo Real podem ser classificados a partir do ponto de vista de segurança (Safety). Considerando o ponto de vista de segurança, os Sistemas de Tempo Real podem ser classificados em: • Críticos; • Não críticos. Os Sistemas de Tempo Real Críticos também são chamados de Sistemas de Tempo Real Rígidos. Sistemas de Tempo Real com essa classificação devem obe- decer ao intervalo de tempo para a realização da tarefa, isto é, não pode haver perda de prazo na realização de uma tarefa. O termo crítico é imprecado no sentido de que o Sistema não pode apresentar falhas, ou seja, todas as tarefas devem ser realizadas no prazo determinado. O não cumprimento dos prazos pode gerar resultados fatais. Por exemplo, o Sistema de freios de um trem não pode falhar; caso falhe, isso pode resultar num grave acidente. Podemos imaginar outros exemplos mais trágicos. Imagine um avião prestes a realizar o seu pouso: o piloto aciona o Sistema de trem pouso, mas ele não abre a tempo do pouso; isso pode resultar em milhares de mortes. 14 15 Figura 8 – Exemplo de Sistema de Tempo Real crítico Fonte: Wikimedia Commons Um Sistema de Tempo Real crítico possui a característica de ser ultraconfiável. Caso ocorram falhas, o Sistema deve corrigi-las em frações de milissegundos, senão, pessoas podem se machucar. Os Sistemas de tempo real críticos podem ser subdivididos em: • Seguro caso de falha (fail safe); • Operacional em caso de falha (fail operational). Um Sistema é classificado como Seguro Caso de Falha se uma falha ocorrer e ele conseguir atingir um ou mais estados seguros. Por exemplo, considere uma linha ferroviária: caso aconteça uma falha no Sistema ferroviário, é possível fazer uma parada obrigatória. Um Sistema de Tempo Real pode ser classificado como Operacional em Caso de Falha se, na presença de falhas parciais, o Sistema puder se degradar fornecen- do alguma forma de serviço mínimo. Por exemplo, considere o Sistema de controle aéreo: caso ocorra alguma falha, o Sistema consegue se degradar e fornece algum tipo de serviço mínimo. Figura 8 – Exemplo de Sistema de Tempo Real não crítico Fonte: Wikimedia Commons 15 UNIDADE De!nição de Conceitos Básicos e da Importância De Sistemas Computacionais para aplicações Tempo Real Um Sistema de Tempo Real não crítico também é chamado de Sistema de Tempo Real Moderado. No Sistema de Tempo Real moderado, o tempo também é o fator mais importante; todavia, se ocorrerem falhas, elas são aceitáveis. Dessa forma, se o Sistema não cumprir a tarefa no prazo determinado, os danos não serão letais. Assim, é possível ter perda de prazo sem maiores resultados. Habitualmente, o Sistema de Tempo Real moderado processa grande volume de dados, ao contrário do Sistema de Tempo Real crítico. Os Sistemas de temporeal críticos são inflexíveis; o prazo não pode ser ultrapassa- do. Ao contrário, os Sistemas de tempo real não críticos oferecem alguma flexibilidade no não cumprimento de um prazo. Como exemplo de um Sistema de Tempo Real moderado, podemos mencionar um aparelho de leitor de DVD de um Computador. O Sistema recebe um estímulo do seu ambiente, isto é, recebe uma ação para abrir a bandeja e o usuário colocar o DVD, mas, o Sistema não responde ao even- to no prazo de tempo adéqua; nesse caso, essa falha é aceitável, pois não houve danos irreversíveis. Classi!cação dos Sistemas de Tempo Real Os Sistemas de tempo real são classificados em: • Hard Real-Time; • Soft Real-Time; • Real Real-Time; • Firm Real-Time. A classificação Hard Real-Time significa que o Sistema deve respeitar todos os prazos de forma absoluta, isto é, a perda de prazo não é tolerada. O Sistema deve respeitar todos os prazos de forma rigorosa. Soft Real-Time significa que se o Sistema perder algum prazo final, ocasionalmente, será tolerável. Nesse caso, é tolerado que o Sistema termine a atividade num prazo maior do que o definido. Os Sistemas classificados como Real Real-Time são Sistemas Hard Real- Time, que possuem prazos de respostas extremamente curtos. Na classificação Firm Real-Time estão os Soft Real-Time que não possuem benefícios de entrega de serviço sem atraso. Na Literatura, há autores que ainda classificam os Sistemas de Tempo Real considerando suas implementações. Essas classificações correspondem a: • Sistema de Resposta Garantida ( Guaranteed Response System); • Sistema de melhor Esforço (Best Effort System). 16 17 Um Sistema de Tempo Real é classificado como Sistema de “Resposta Garantida” quando, no Sistema, existem recursos suficientes para suportar a carga de trabalho e, também, todos os cenários de falhas são definidos. Já a classificação “Melhor Esforço” é aplicada a Sistemas que possuem estratégia de alocação dinâmica de recurso que se baseia em estudos probabilísticos sobre a carga de trabalho esperada. Nessa classificação, as falhas são aceitáveis. Atualmente, o desenvolvimento de um Sistema de Tempo Real considera o contexto em que irá atuar. Por exemplo, os Sistemas de tempo real não críticos são desenvolvidos utilizando o paradigma de “Melhor Esforço” e os Sistemas de tempo real críticos são desenvolvidos utilizando o paradigma de “Resposta Garantida”. Classi! cação de Eventos Os eventos que o Sistema de Tempo Real pode responder são classificados como: • Eventos periódicos; • Eventos aperiódicos. Os eventos periódicos ocorrem num intervalo de tempo regular, isto é, num intervalo regular. O Sistema recebe estímulos do seu ambiente externo e os responde no prazo de tempo determinado. Os eventos aperiódicos ocorrem de maneira imprevisível, isto é, não há intervalo de tempo regular para os eventos ocorrerem. A ocorrência dos eventos é totalmente incerta. Um Sistema de Tempo Real pode responder a múltiplos fluxos de eventos periódicos. É possível calcular quantos eventos periódicos o Sistema pode atender num intervalo de tempo definido. Com esse cálculo, é possível dizer se o Sistema consegue manipular todos os eventos ou não. Por exemplo, se houver m eventos periódicos e o evento i ocorre com o período Pi e requer Ci segundos para responder o evento, então, o Sistema só pode gerenciar todos os eventos se: Se o Sistema satisfizer esse critério, ele é classificado como um Sistema de Tempo Real agendável. Para melhorar o entendimento, vamos utilizar um exemplo. Considere um Sistema de Tempo Real Soft Real-Time com três eventos periódicos, com períodos de 100, 200 e 500ms, respectivamente. 17 UNIDADE De!nição de Conceitos Básicos e da Importância De Sistemas Computacionais para aplicações Tempo Real Se esses eventos exigirem 50, 30 e 100ms de tempo para serem processados, respectivamente, o Sistema será agendável porque 0,5 + 0,15 + 0,2 < 1. Se um quarto evento com um período de 1ms for adicionado, o Sistema per- manecerá agendável, contanto que esse evento não precise de mais de 150ms de tempo de processamento por ocorrência. Con!abilidade Um Sistema de Tempo Real é caracterizado como um Sistema totalmente confiável. O termo confiabilidade caracteriza um Sistema de tempo real. Suas respostas devem ser totalmente corretas e o Sistema nunca deve apresen- tar falhas. Se ocorrerem falhas, o Sistema deve então, identificá-las e as corrigir. Como mencionado na Seção 1.1, no desenvolvimento de um Sistema de Tem- po Real, normalmente, são utilizados algoritmos determinísticos: algoritmos que sempre fornecem as respostas corretas, para que a confiança no Sistema seja alta. Na fase de projeção do Sistema, deve-se realizar o mapeamento de todas as falhas possíveis e realizar um plano de contingência caso elas ocorram. Habitualmente, um Sistema de Tempo Real é um Sistema de alta disponibili- dade. Se uma falha for tão grave a ponto derrubar o Sistema, deve-se pensar em utilizar um plano de Redundância. Redundância é a forma mais confiável e simples de manter um Sistema com alta disponibilidade. Por exemplo, continuando com o Sistema de Controle Aéreo, é comum que esse Sistema seja executado em dois computadores diferentes: o com- putador A e o computador B. Caso ocorra uma falha no computador A, o controle aéreo é automática e rapidamente transferido para o Sistema que está sendo exe- cutado no computador B. Existem duas formas de redundância: a temporal e a espacial. A redundância temporal é quando a falha ocorre e logo em seguida é tomada uma ação corretiva. Por exemplo, caso a falha ocorra, a atividade é repetida. Esse tipo de redundância é menos aplicada em Sistemas de tempo real críticos, porque a repetição da ação irá violar a restrição do tempo, ou seja, haverá perda de prazo. Já na redundância espacial, uma mesma ação crítica é executada por vários re- cursos replicados, isto é, caso a falha ocorra, a ação é continuada logo em seguida por outros recursos. Nesse cenário, a falha pode ser mascarada, pois outro recurso continuará a ação de onde ela parou. Nesse sentido, a probabilidade de perda de prazo é pequena, porque o outro recurso irá continuar a tarefa no ponto em que o recurso anterior parou. 18 19 Geralmente, a redundância espacial é utilizada em Sistemas de tempo real críti- cos. Essa redundância permite não gerar atrasos no tempo de resposta, isto é, não há perda de prazo ao se implementar a redundância espacial. Tolerância e Falhas Um Sistema de Tempo Real deve ser totalmente tolerante a falhas. Como men- cionado na seção anterior, o Sistema deve ser totalmente confiável e, também, na fase de projeção, deve-se mapear todas as falhas possíveis, isto é, criar um Modelo de Falhas. Com o modelo de falhas pronto, o próximo passo é determinar uma ação de contingência para cada falha, caso elas ocorram. É importante ressaltar que na ação tomada, caso ocorra uma falha, deve-se respeitar o prazo de resposta da ação original, isto é, caso ocorra uma falha, o prazo não pode ser pedido. O modelo de falhas deve ser elaborado cuidadosamente. Uma falha pode ocor- rer por diversos motivos, tais como, falha no hardware, falha no software, falha humana, falha do próprio Sistema por processar algum dado errado, enfim, são diversas razões para ocorrer uma falha. Todavia, independentemente da origem da falha, deve-se elaborar uma ação para todas as falhas possíveis. Para realizar um bom modelo de falhas, é necessário definir todas as hipóteses de tipo de falhas possíveis que podem acontecer durante a execução do Sistema. A construção do modelo de falha é essencial para que os mecanismos de tole- rância às falhas possam ser testados e validados. Quando o mapeamento for rea- lizado, devem ser implementado de forma mais precisa possível, para permitir a implementação dos mecanismos de tolerância às falhas, isto é, o mapeamento das falhas deve ser feito o mais claro possível para permitirum mecanismo de tolerân- cia à falha mais seguro e confiável. Na teoria, as falhas não mapeadas não devem ocorrer. Todavia, caso ocorram, serão eventos raros. Conclusões e Resumo da Unidade Sistemas de Tempo Real são Sistemas voltados para aplicações nas quais a confiabilidade é de extrema importância. O Sistema deve fornecer uma saída total- mente correta, e não deve falhar. As tarefas devem ser realizadas num determinado período de tempo, que é cha- mado de prazo. O não cumprimento de um prazo, isto é, se o Sistema não realizar 19 UNIDADE De!nição de Conceitos Básicos e da Importância De Sistemas Computacionais para aplicações Tempo Real a tarefa num determinado prazo, é gerada uma falha. O termo “perda de prazo” se refere a uma tarefa que não foi realizada no período de tempo estipulado. Um Sistema de Tempo Real é caracterizado por ser previsível, um Sistema que conhece todas as ações que irão acontecer, e é capaz de antecipar as suas ações. Habitualmente, um Sistema de Tempo Real recebe um estímulo do seu ambiente externo, analisa e gera uma saída, isto é, uma ação. Um Sistema de Tempo Real pode ser classificado como crítico e não crítico. Um Sistema de Tempo Real crítico é caracterizado por não haver perda de pra- zo. Caso haja perda de prazo, pode resultar em danos irreversíveis e fatais. Já num Sistema de Tempo Real não crítico, a perda de tempo é tolerada, isto é, caso alguma ação não seja tomada durante um intervalo de tempo, as consequên- cias não serão tão severas. Também é possível classificar os Sistemas de Tempo Real considerando o tempo de resposta de uma atividade. Um Sistema de Tempo Real pode ser classificado como Hard Real-Time, Soft Real-Time, Real Real-Time e Firm Real-Fime. A classificação Hard Real-Time diz que o Sistema deve respeitar todos os prazos de forma absoluta, isto é, a perda de prazo não é tolerada. A classificação Soft Real-Time significa que a perda de algum prazo final, ocasionalmente, é tolerável. Os Sistemas classificados como Real Real-Time são Sistemas Hard Real-Time, que possuem prazos de respostas extremamente curtos. Na classificação Firm Real-Time estão os Soft Real-Time, que não possuem benefícios de entrega de serviço sem atraso. Um Sistema de Tempo Real pode, ainda, ser classificado considerando suas implementações. Um Sistema de Tempo Real pode ser classificado como Sistema de Respos- ta Garantida (Guaranteed Response System) e Sistema de Melhor Esforço (Best Effort System). Um Sistema de Tempo Real se encaixa na classificação “Resposta Garantida” quando no Sistema existem recursos suficientes para suportar a carga de trabalho e, também, todos os cenários de falhas são definidos. Já a classificação “Melhor Esforço” é aplicada aos Sistemas que possuem uma estratégia de alocação dinâmica de recurso que se baseia em estudos probabilísticos sobre a carga de trabalho esperada. Nessa classificação, as falhas são aceitáveis. Um Sistema de Tempo Real sempre responde a um evento do seu ambiente. Um evento pode ser classificado como periódico ou aperiódico. 20 21 Um evento periódico ocorre um intervalo de tempo regular e um evento ape- riódico ocorre de maneira inesperada, isto é, não há intervalo de tempo definido para o evento ocorrer. Um Sistema de Tempo Real deve possuir grande confiabilidade, isto é, o Sistema deve ser totalmente confiável; todas as atividades realizadas por ele devem ocorrer de forma rigorosa. O Sistema deve conter vários mecanismos de tolerância às falhas. Um mecanis- mo simples e eficaz de tolerância às falhas é a redundância. Existem duas formas de redundância, a temporal e a espacial. A redundância temporal é quando a falha ocorre e logo em seguida é tomada uma ação corretiva. Por exemplo, a repetição da ação. Já na redundância espacial, uma mesma ação crítica é executada por vários recursos replicados, isto é, caso a falha ocorra, a ação é continuada logo em seguida por outros recursos. Nesse cenário, a falha pode ser mascarada, pois outro recurso continuará a ação de onde ela havia parado. Nesse sentido, a probabilidade de perda de prazo é muito pequena, porque o outro recurso irá continuar a tarefa no ponto em que o recurso anterior parou. Na fase de projeção de um Sistema de Tempo Real, deve-se mapear todas as falhas possíveis, ou seja, realizar um Modelo de Falhas. Com o modelo de falhas pronto, o próximo passo é determinar uma ação de contingência para cada falha, caso elas ocorram. É importante ressaltar que, na ação tomada, caso ocorra uma falha, deve-se respeitar o prazo de resposta da ação original, isto é, caso ocorra uma falha, o prazo não pode ser pedido. Na sociedade, eventos que necessitam de uma resposta rápida ocorrem a todos os momentos e em todas as áreas. Há casos em que, se esses eventos não obti- verem uma resposta rápida e eficaz, danos irreversíveis e fatais podem ocorrer, e também há casos em que o não recebimento de uma resposta não é tão crucial. Todavia, esses eventos sempre devem ser respondidos num intervalo de tempo determinado. Sistemas Computacionais se mostraram grandes aliados no monitora- mento e no controle desses eventos. Em nosso dia a dia, isto é facilmente percebido. Sistemas Computacionais de Tempo Real estão presentes no Campo Aéreo, Ferroviário, Industrial, Alimentício, Bancário e Hospitalar, entre outros. É possível dizer que muitos eventos críticos ou não críticos não poderiam ser controlados sem o auxílio de Sistemas Computacionais. Em suma, Sistemas Computacionais são de extrema importância para controlar eventos de Tempo Real. 21 UNIDADE De!nição de Conceitos Básicos e da Importância De Sistemas Computacionais para aplicações Tempo Real Material Complementar Indicações para saber mais sobre os assuntos abordados nesta Unidade: Sites 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/ZCsfnn 22 23 Referências [1] ALMEIDA, M. B. de. Implementando Sistemas operacionais de tempo real em microcontroladores. Local: Amazon, ano. (eBook Kindle). [2] SHAW, A. C. Sistemas e Software de Tempo Real. Local: Bookman, 2003. [3] CAURIN, G. A. P. Análise de Sistemas operacionais de tempo real para aplicações de robótica e automação. 2008. 154p. (Dissertação de mestrado) – Departamento de Engenharia da Escola de Engenharia /Universidade de São Paulo, São Paulo, 2008. [4] Farines, J. M., Fraga, J. S. e Oliveira, R. S. - Sistemas de Tempo Real. Departamento de Automação e Sistemas. Universidade Federal de Santa Catarina, Florianópolis, julho de 2000. [5] TANENBAUM, A. S. Sistemas Operacionais Modernos. 2.ed. São Paulo: Pearson Prentice Hall, 2003. [6] MARTIN, T. Design of Real Time Systems. New Jersey: Prentice-Hall Inc., 2013. [7] CEDE NO, W.; LAPLANTE, P. A. An overview of real-time operating systems, Journal of the Association for Laboratoty Automation, Local, n.12, p. 40- 45, 2007. 23 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 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çãomais 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: • Atrasos na 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çãoentre 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 Primitivaswait 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 reagir a 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 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. 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 Material Teórico Responsável pelo Conteúdo: Prof. Dr. Cléber Silva Ferreira da Luz Revisão Textual: Prof.ª Dr.ª Selma Aparecida Cesarin Programação de Sistemas Operacionais para Aplicações em Tempo Real • Introdução; • Sistemas Operacionai; • Sistemas Operacionais de Tempo Real; • Funções e Serviços de um so de Tempo Real; • Exemplos de Sistemas Operacionais de Tempo Real; • Conclusões e Resumo da Unidade. · Apresentar todos os conceitos presentes no desenvolvimento de um Sistema Operacional para Aplicações de Tempo Real. OBJETIVO DE APRENDIZADO Programação de Sistemas Operacionais para Aplicações em Tempo Real UNIDADE Programação de Sistemas Operacionais para Aplicações em Tempo Real Introdução Sistemas Operacionais de Tempo Real são Sistemas Operacionais voltados para aplicações de Tempo Real. Assim como num Sistema de Tempo Real, um Sistema Operacional de Tempo Real responde a eventos pré-definidos em um intervalo de tempo conhecido e bem definido. Em Sistemas Operacionais de Tempo Real, o tempo de resposta a um evento é o aspecto mais importante. Todos os eventos devem ser respondidos respeitando os prazos de tempo. Um Sistema Operacional de Tempo Real também possui a característica de ser totalmente confiável, mesmo na ocorrência de uma falha; o Sistema Operacional de Tempo Real deve responder o evento no intervalo de tempo determinado. O primeiro passo no estudo de Sistemas Operacionais para aplicações de Tempo Real é entender o que é um Sistema operacional. Após termos bem claro o que é um Sistema Operacional, conseguiremos compreender facilmente todos os conceitos e elementos por trás de um Sistema Operacional para aplicações de Tempo Real. Em um Sistema Computacional, um Sistema Operacional (SO) é o Programa mais importante do Sistema. Ele atua como um intermediário entre o usuário e o hardware de um computador. O objetivo do Sistema Operacional fornece um ambiente para que o usuário possa executar seus Programas. Dessa forma, podemos dizer que o objetivo central do SO é facilitar o uso de Sistemas Computacionais. Um objetivo secundário do SO é usar os hardwares do Sistema Computa- cional de forma eficiente. A próxima seção apresenta mais detalhes sobre um Sistema Operacional. Sistemas Operacionais Um Sistema Operacional (SO) pode ser considerado um Programa que visa a realizar uma intermediação entre um usuário e o hardware de um computador. Seu objetivo é fornecer um ambiente no qual os usuários possam executar seus Programas de maneira eficiente. Numa definição clássica de Sistemas Operacio- nais, um SO pode ser considerado um gerenciador, que atua gerenciando os diver- sos recursos computacionais, tais como, softwares, hardwares, dados e dados de entrada e saída, entre outros. Por mais complexo que possa parecer, um Sistema Operacional é um conjunto de rotinas executado pelo processador, da mesma forma que nossos Programas. Sua principal função é controlar o funcionamento do computador, como um geren- te dos vários recursos disponíveis do Sistema. 8 9 O nome Sistema Operacional não é único para designar esse Conjunto de Pro- gramas. Nomes como monitor, executivo, supervisor ou controlador possuem, nor- malmente, o mesmo significado. Funções que um Sistema operacional deve desempenhar: • Permitir que os Programas armazenem e obtenham informação; • Isolar os Programas dos detalhes específicos de hardware; • Controlar o fluxo de dados entre os componentes de um computador; • Permitir que os Programas sejam executados sem a interferência de outros Programas; • Permitir que os Programas independentes cooperem periodicamente e com- partilhem informações; • Responder aos erros ou a solicitações dos usuários; • Impor um escalonamento entre Programas que solicitam recursos; • Facilitar o acesso aos recursos do Sistema. O Sistema Operacional, então, serve de interface entre o usuário e os recursos dis- poníveis no Sistema, tornando essa comu- nicação transparente e permitindo ao usu- ário uma utilização mais eficiente e com menores chances de erros. Sistemas Operacionais de Tempo Real As principais funções de um SO são gerenciar os recursos de hardware e de software do Sistema Computacional e fornecer serviços específicos para os usuários do Sistema Computacional. Sis- temas Operacionais de Tempo Real tam- bém realizam as mesmas funções e servi- ços de um SO. Todavia, um SO de Tempo Real possui requisitos diferentes que surgem por causa da sua natureza. Uma característica funda- mental que os diferes é a Previsibilidade. Essa característica se aplica de modo mais crítico em relação ao tempo. Todos os serviços devem ser realizados dentro de um intervalo de tempo conhecidos e Figura 1 – Sistema Operacional como uma interface Fonte: Adaptado de iStock/Getty Images 9 UNIDADE Programação de Sistemas Operacionais para Aplicações em Tempo Real determinados. Essa característica também é aplicada em todos os recursos geren- ciados pelo SO de Tempo Real, tais como, armazenamento, dispositivos de E/S e arquivos. É importante também, que a gerência de falhas seja previsível. Outras características que os difere são a Visibilidade e o Controle para to- dos os recursos do Sistema. Em um SO convencional, uma grande quantidade de hardware do Sistema Computacional é totalmente escondida e abstraída do usuário. Entretanto, em um SO de Tempo Real, os usuários devem ser capazes de acessar e controlar os recursos físicos do Sistema para garantir a previsibilidade. Habitualmente, um SO de Tempo Real é um Sistema aberto, isto é, aquele que de- fine um conjunto de mecanismos apropriados e flexíveis. Um SO de Tempo Real deve possibilitar a definição de um amplo domínio de políticas, por exemplo, definição de di- ferentes políticas de gerenciamento de memória, de gerenciamento de entrada e saída de dados e de gerenciamento de arquivos, entre outros. Criando um amplo conjunto de definições de políticas, o Sistema Operacional de Tempo Real se torna mais robusto. Um Sistema Operacional de Tempo Real compartilha dos mesmos conceitos e classificações de um Sistema de Tempo Real. Por exemplo, um SO de Tempo Real também é classificado em Críticoe Não Crítico. SOs de Tempo Real Críticos obedecem ao intervalo de tempo para a realiza- ção da tarefa, isto é, não pode haver perda de prazo na realização de uma tarefa. O não cumprimento dos prazos pode causar resultados fatais. Em um SO de Tempo Real, uma realização de tarefa pode ser encarada como uma alocação de recurso, uma alocação de memória e uma abertura de um arquivo,e entre outros. Todavia, a tarefa deve cumprir o prazo de forma rigorosa; senão, resul- tados fatais podem ocorrer. Um SO de Tempo Real crítico também é subclassificado em Seguro em Caso de Falha e Operacional em Caso de Falha. Seguro em Caso de Falha significa que, caso ocorram falhas, o SO consegue atingir um ou mais estados seguros. Operacional em Caso de Falha significa que, se ocorrerem falhas, o SO se degrada e consegue fornecer um tipo de serviço mínimo. No SO Tempo Real não Crítico, o tempo também é o fator mais importante; todavia, se ocorrerem falhas, elas são aceitáveis. Dessa forma, caso ocorra perda de prazo, os danos resultantes não serão letais. Um SO de Tempo Real também pode ser classificado como Hard Real-Time, Soft Real-Time, Real Real-Time e Firm Real-Time. Hard Real-Time significa que o SO deve respeitar todos os prazos de forma absoluta, isto é, a perda de prazo não é tolerada. Soft Real-Time significa que se o SO perder algum prazo final, ocasionalmente, é tolerável. Os SO classificados como Real Real-Time são SOs Hard Real-Time que possuem prazos de respos- tas extremamente curtos. 10 11 Na classificação Firm Real-Time estão os Soft Real-Time que não possuem benefícios de entrega de serviço sem atraso. Para um melhor entendimento sobre essas classificações, consulte a Unidade I – Definição de Conceitos Básicos e da importância de Sistemas Computacionais para aplicações Tempo-Real. Funções e Serviços de um so de Tempo Real Um Sistema Operacional de Tempo Real deve realizar algumas funções básicas, tais como, criar Processos, gerenciar Processos, escalonar Processos, gerenciar memória, gerenciar arquivos, gerenciar dados de entrada e saída e, também, ge- renciar todos os hardwares disponíveis no Sistema Operacional. A próxima seção apresenta detalhes sobre Processos. Processos Um dos serviços mais importantes que o SO de Tempo Real realiza é criar, con- trolar e destruir Processos. Um Processo é basicamente um Programa em Execução. O termo Processo se re- fere ao Programa em Execução e, também, todos os elementos necessários para que o Programa o execute, como, espaço de memória, código binário do Programa, espaço para armazenar dados de processamento e controlador de instruções (responsável por controlar quais instruções do programa falta serem executadas), entre outros. A maneira mais fácil de obter uma boa noção de Processos é pensar nos Siste- mas de tempos compartilhados. Periodicamente, o SO decide parar de executar um Processo e começar a executar outro. Quando um Processo é suspenso temporariamente, mais tarde ele deve ser rei- niciado exatamente no mesmo estado em que estava quando foi suspenso. Dessa forma, todas as informações do Programa devem ser armazenadas em algum lugar seguro durante a suspensão. Um Processo pode criar outros Processos. Nesse caso, temos uma relação de pai e filho, criando uma árvore de Processos, como é mostrado na Figura 2. C A B FED Uma árvore de processos - A criou dois processos !lhos: B e C - B criou dois processos !lhos: D, E e F Figura 2 – Relação entre Processos Fonte: Acervo do Conteudista 11 UNIDADE Programação de Sistemas Operacionais para Aplicações em Tempo Real Processos são executados na CPU do computador. Um Processo possui 3 estados: 1. Executando (realmente sendo executado na CPU nesse instante); 2. Pronto (executável; temporariamente parado para permitir que outro Processo execute na CPU); 3. Bloqueado (incapaz de executar até que algum evento externo aconteça). A Figura 3 ilustra o ciclo de estados de um Processo. Bloqueado 1 3 2 1 - O processo bloqueia para entrada 2 - O agendador seleciona outro processo 3 - O agendador seleciona esse processo 4 - A entrada torna-se disponível 4 Executando Pronto Figura 3 – Ciclo de estados de um Processo Fonte: Adaptado de Tanenbaum O agendador é responsável por selecionar o Processo e colocá-lo para executar na CPU. A próxima seção apresenta detalhes sobre um agendador. Escalonamento Outra função importante de um SO de Tempo Real é escalonar o Processo para ser executado pelo processado. Quando um Processo fica em estado de pronto, ele é colocado em fila de Processos, esperando a sua vez de ser escalonado para utilizar o processador, conforme ilustrado na Tabela 1. Tabela 1 – Fila de Processos Processos 0 1 ... n – 2 n – 1 Agendador Fonte: Acervo do Conteudista A função de escalonamento é chamada de agendador ou escalonador. Fre- quentemente, o termo em inglês Sheduling é utilizado para fazer referência à função de escalonamento do SO. Os Processos que se encontram em estado de prontos ficam numa fila e o escalo- nador de Processos seleciona um Processo e o coloca para ser executado na CPU. Esse procedimento é ilustrado na Figura 4. 12 13 Espera Execução Processo Processo Processo Processo Processo Pronto Escalonador Figura 4 – Escalonamento Fonte: Acervo do Conteudista Essa seleção é realizada a partir de um método de escalonamento, que selecio- na o Processo utilizando um algoritmo de escalonamento. Existem diversos algoritmos de escalonamento; cada algoritmo de escalonamen- to implementa uma lógica de seleção. Os algoritmos de escalonamento são classificados em dois grupos: • Algoritmos de escalonamento estáticos; • Algoritmos de escalonamento dinâmicos. Essa classificação baseia-se nas regras de escalonamento quanto à consideração do estado atual da aplicação. Como, por exemplo, no escalonamento estático, que não são consideradas as alterações do estado atual da aplicação. Dessa forma, as tarefas são alocadas antes da execução da aplicação e a execu- ção é feita em função do escalonamento estabelecido. O escalonamento dinâmico detecta alterações no estado atual da aplicação e gerencia os recursos com base nas informações atuais da aplicação. As tarefas são alocadas em tempo de execução, considerando as informações e as condições da aplicação. Métodos de escalonamentos serão estudados com profundidade na unidade V – Métodos de Escalonamento. É interessante lembrar que problemas de escalonamento de tarefas não ocorrem somente em Sistemas Operacionais; ocorrem, constantemente, em Sistemas de Tempo Real. Imagine o seguinte cenário: chegam duas tarefas ao mesmo tempo para o Sis- tema de Tempo Real. Qual se deve atender primeiro? Os Sistemas de Tempo possuem uma política de escalonamento muito rígida, pois, habitualmente, chegam diversas tarefas ao mesmo tempo e o Sistema deve realizar a escolha de qual realizar primeiro a partir de um mecanismo de escalona- mento, que selecionará a tarefa a ser executada primeiro utilizando determinadas regras implementadas no escalonador. 13 UNIDADE Programação de Sistemas Operacionais para Aplicações em Tempo Real Threads Em Sistemas Operacionais de Tempo Real, é comum que Processos trabalhem em conjunto para realizar uma determinada tarefa. Frequentemente, quando dois Processos trabalham em conjunto, eles compartilham o mesmo recurso, seja ele um espaço de memória, seja um arquivo. Dessa forma, é necessário haver comu- nicação e sincronização, entre os Processos. Normalmente, num Processo, há uma única linha de execução. Entretanto, em alguns Sistemas Operacionais modernos, é fornecido suporte para múltiplas linhas de execução dentro de um Processo. Essas linhas de controle, normalmente, são chamadas Threads ou, ocasional- mente, Processos Leves. Threads possuem os mesmos estados de um Processo, compartilham o mes- mo espaço de endereçamento, permitindo que um thread possa alterar dados de outro thread. Assim como os
Compartilhar