Sumário


1. Caracterização dos Sistemas de Tempo Real
1.1 Definição
1.2 Requisitos Temporais
1.3 Classes de Aplicações
1.4 Características Comuns
1.5 Concepções Erradas
1.6 Exemplo: Sistema de Defesa Anti-Míssil
1.7 Exercícios

2. Conceitos Básicos dos Sistemas de Tempo Real
2.1 Conceito de Tarefa
2.2 Tipos de Deadlines
2.3 Previsibilidade
2.4 Escalonamento
2.5 Recorrência das Tarefas
2.6 Tempo de Execução
2.7 Propriedades Temporais das Tarefas
2.8 Relações de Exclusão Mútua
2.9 Relações de Precedência
2.10 Modelo de Tarefas
2.11 Exercícios

3. Implementação de Tarefas em Sistemas Pequenos
3.1 Executivo Cíclico
3.2 Mecanismo de Interrupções
3.3 Laço Principal com Tratadores de Interrupções
3.4 Microkernel Simples como Sistema Operacional Multitarefa
3.4.1 Chamadas de Sistema
3.4.2 Estados de uma Thread
3.4.3 Chaveamento de Contexto entre Threads
3.4.4 Design do Microkernel
3.5 Comparação entre as Formas de Implementar Tarefas de Tempo Real
3.6 Exercícios

4. Implementação de Tarefas em Kernel Completo
4.1 O Sistema Operacional Tradicional
4.2 Terminologia: Processos, Threads e Tarefas
4.3 Chamadas de Sistema
4.4 Estados da Thread de um Processo
4.5 Chaveamento de Contexto
4.6 Gerência de Memória
4.7 Partições Variáveis
4.8 Paginação
4.9 Outros Aspectos da Paginação
4.10 Memória Virtual com Paginação por Demanda
4.11 Comparação entre as Formas de Implementar Tarefas de Tempo Real
4.12 Exercícios

5. Escalonamento de Tarefas
5.1‭ ‬Escalonamento em Sistemas de Propósito Geral
5.1.1‭ ‬Ordem de Chegada
5.1.2‭ ‬Menor Ciclo de Processamento Antes
5.1.3‭ ‬Fatias de Tempo
5.1.4‭ ‬Prioridades
5.1.5‭ ‬Combinação das Formas Básicas
5.2 Escalonamento em Sistemas de Tempo Real
5.3 Atribuição de Prioridades Fixas
5.3.1‭ ‬Taxa Monotônica
5.3.2‭ Deadline Monotônico
5.3.3‭ Importância
5.4 Atribuição de Prioridades Variáveis
5.4.1 Menor Deadline Absoluto Antes
5.4.2 Menor Folga Antes
5.5 Conceito de Utilização e Teoremas Fundamentais
5.5.1 Limiar de Utilização para EDF
5.5.2 Limiar de Utilização para Taxa Monotônica
5.5.3 Deadline Monotônico versus Taxa Monotônica
5.6 Questões Práticas da Atribuição de Prioridades
5.6.1 Escalonabilidade superior do EDF em Modelos Simples
5.6.2 Comportamento em Sobrecarga
5.6.3 Custo da Implementação
5.7 Exercícios

6. Sincronização e Comunicação entre Tarefas
6.1 Caracterização da Programação Concorrente
6.2 Motivação para Programação Concorrente
6.3 Métodos de Sincronização e Comunicação entre Tarefas
6.4 Sincronização e Comunicação com Mensagens
6.5 Padrões de Interação Usando Mensagens
6.6 Sincronização e Comunicação com Variáveis Compartilhadas
6.7 Problema da Seção Crítica
6.8 Seção Crítica: Mecanismos de Baixo Nível
6.9 Seção Crítica: Mutex
6.10 Aninhamento de Mutex e Deadlock
6.11 Exercícios

7. Seções Críticas em Sistemas de Tempo Real
7.1 Inversão de Prioridades
7.2 Mutex para Tempo Real
7.3 Mutex para Tempo Real: Desliga Preempção
7.4 Mutex para Tempo Real: Herança de Prioridade
7.5 Mutex para Tempo Real: Teto de Prioridade
7.6 Mutex para Tempo Real: Teto de Prioridade Imediato
7.7 Mutex para Tempo Real: Outros Protocolos
7.8 Exercícios

8. Mecanismos de Sincronização com Variáveis Compartilhadas
8.1 Problemas Clássicos de Sincronização
8.2 Semáforos
8.3 Monitores
8.4 Monitores com a Linguagem C e Pthreads
8.5 Exercícios

9. O Tempo Real
9.1 O Tempo Mecânico
9.2 O Tempo Astronômico
9.2.1 Universal Time (UT)
9.2.2 Ephemeris time (ET)
9.3 O Tempo Atômico
9.3.1 O Mecanismo do Relógio Atômico
9.3.2 Quanto Tempo é 1 Segundo ?
9.3.3 Tempo Atômico Internacional (TAI)
9.3.4 Tempo Universal Coordenado (UTC)
9.4 O Tempo Real no Século 21
9.4.1 O Sistema de Posicionamento Global (GPS)
9.4.2 Network Time Protocol (NTP)
9.5 O Tempo Real nos Computadores
9.5.1 Os Vários Relógios de um PC 80x86
9.6 Sincronização de Relógios entre Computadores
9.7 Considerações Finais
9.8 Exercícios

10. Variância dos Tempos de Execução
10.1 Introdução
10.2 Variância Causada pelo Software
10.3 Variância Causada pelo Hardware
10.3.1 Memória Cache
10.3.2 Pipeline
10.3.3 Previsor de Salto (Branch Predictor)
10.3.4 Memórias DRAM
10.3.5 Acesso Direto à Memória – DMA
10.3.6 Translation Lookaside Buffer – TLB
10.3.7 Controle de Frequência
10.3.8 Modo de Gerência do Sistema
10.3.9 Múltiplas Threads em Hardware
10.3.10 Impacto dos Tratadores de Interrupção e de Múltiplas Tarefas
10.4 Exercícios

11. Estimação do WCET usando Análise Estática
11.1 Introdução
11.2 Importância do Tipo de Hardware
11.3 Análise Estática
11.4 Análise do Fluxo de Controle
11.5 Análise do Comportamento do Processador
11.5.1 Análise da Memória Cache
11.5.2 Análise do Pipeline
11.6 Cálculo do Limite Superior para o WCET
11.7 A Ferramenta aiT
11.8 Considerações Finais
11.9 Exercícios

12. Estimação do WCET usando Medições
12.1 Introdução
12.2 Medição do Tempo de Execução
12.3 Teste de Software Baseado em Busca
12.4 Métodos Híbridos
12.5 A Ferramenta RapiTime
12.6 Métodos Estatísticos
12.6.1 Teoria de Valores Extremos
12.6.2 Avaliação Experimental
12.7 Considerações Gerais
12.8 Exercícios

13. Variância dos Tempos de Resposta
13.1 Fontes da Variância do Tempo de Resposta
13.2 Variância Causada por Outras Tarefas da Aplicação
13.3 Variância Causada por Outros Processos do Sistema
13.4 Variância Causada por Threads do Kernel
13.5 Variância Causada por Tratadores de Interrupção
13.6 Variância Causada pela Manipulação das Prioridades dos Processos e Threads
13.7 Variância Causada por Kernel Não-Preemptivo
13.8 Variância Causada pela Desabilitação das Interrupções
13.9 Variância Causada por Overhead do Kernel . .    255
13.10 Variância Causada por Mecanismos de Sincronização na Aplicação
13.11 Variância Causada por Mecanismos de Sincronização no Kernel
13.12 Determinação do Tempo de Resposta no Pior Caso
13.13 Exercícios

14. Estimação do Tempo de Resposta no Pior Caso
14.1 Princípios da Análise do Tempo de Resposta
14.2 Método Básico da Análise do Tempo de Resposta
14.3 Tarefas Esporádicas e Tarefas com D ≤ P
14.4 Interrupções Desabilitadas
14.5 Bloqueios
14.6 Chaveamentos de Contexto
14.7 Tratadores de Interrupções
14.8 Níveis Insuficientes de Prioridades
14.9 Atribuição Ótima de Prioridades
14.10 Exemplo de Análise do Tempo de Resposta
14.11 Aspectos Práticos da Análise do Tempo de Resposta no Pior Caso
14.12 Estimação do WCRT via Medição
14.13 Visão Estatística das Medições
14.14 Exercícios

15. Diferentes Abordagens
15.1 Diferentes Abordagens são Necessárias
15.2 Classificação das Abordagens na Academia
15.2.1 Sistemas com Garantia (hard real-time systems)
15.2.2 Sistemas sem Garantia (soft real-time systems)
15.2.2.1 Atrasa Deadline
15.2.2.2 Reduz Precisão
15.2.2.3 Não Executa
15.2.2.4 Aumenta Período
15.3 Classificação das Abordagens na Prática
15.3.1 Classificação na Prática: Garantia Provada
15.3.2 Classificação na Prática: Garantia Testada
15.3.3 Classificação na Prática: Sem Garantia
15.4 Abordagem Definida pela Criticalidade
15.5 Comentários sobre as Abordagens
15.6 Exercícios

16. Sistemas Operacionais de Tempo Real
16.1 Introdução
16.2 Aspectos Funcionais dos SOTR
16.3 Aspectos Temporais dos SOTR
16.3.1 Aspectos Temporais de um SOTR: O Ideal Impossível
16.3.2 Aspectos Temporais de um SOTR: O Ideal Possível porém Inexistente
16.3.3 Aspectos Temporais de um SOTR: A Realidade
16.4 Principais Diferenças Construtivas entre SOPG e SOTR
16.4.1 Algoritmo de Escalonamento Apropriado
16.4.2 Níveis de Prioridade Suficientes
16.4.3 Sistema Operacional não Altera Prioridades das Tarefas
16.4.4 Tratadores de Interrupções com Execução Rápida
16.4.5 Desabilitar Interrupções ao Mínimo
16.4.6 Emprego de Threads de Kernel
16.4.7 Tempo de Chaveamento entre Tarefas Pequeno
16.4.8 Emprego de Temporizadores com Alta Resolução
16.4.9 Comportamento das Chamadas de Sistema no Pior Caso
16.4.10 Preempção de Tarefa Executando Código do Kernel
16.4.11 Mecanismos de Sincronização Apropriados
16.4.12 Granularidade das Seções Críticas dentro do Kernel
16.4.13 Gerência de Recursos em Geral
16.5 Cuidados do Desenvolvedor da Aplicação
16.6 Microkernel Exemplo: FreeRTOS
16.6.1 Tratadores de Interrupção da Aplicação
16.6.2 Mecanismos de Sincronização
16.7 Kernel Exemplo: Linux PREEMPT_RT
16.7.1 Modelos de Preempção no Kernel do Linux
16.7.2 Políticas de Escalonamento
16.7.3 Programação da Aplicação
16.7.4 Serviços de Tempo para a Aplicação
16.7.5 Mecanismos de Sincronização para a Aplicação
16.7.6 Impacto da Gestão de Energia
16.8 Considerações Finais
16.9 Exercícios

17. Tópicos Adicionais
17.1 Servidores de Tarefas Aperiódicas
17.2 Multiprocessadores
17.3 Protocolos de Comunicação
17.4 Protocolos para Sincronização de Relógios
17.5 Computação Imprecisa
17.6 Engenharia de Software
17.7 Exercícios

18. Referências Bibliográficas

Índice Remissivo