Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados pdf

Documento: pdf (55 páginas) 2.8 MB

Publicado em: 2022-05-19

Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados pdf
www.blucher.com.br
SISTEMAS OPERACIONAIS DE
TEMPO REAL E SUA APLICAÇÃO
EM SISTEMAS EMBARCADOS
SISTEMAS
OPERACIONAIS
DE
TEMPO
REAL
E
SUA
APLICAÇÃO
EM
SISTEMAS
EMBARCADOS
Este livro tem como objetivo servir de referência
técnica e didática na área de sistemas operacionais
de tempo real (RTOS) e na sua utilização nos projetos
de sistemas embarcados.
É voltado ao ensino de sistemas embarcados nos cursos de
Engenharia Elétrica, Eletrônica, Computação, Controle e
Automação, Telecomunicações, cursos técnicos, bem como para
profissionais que atuam na área de sistemas embarcados. Além
disso, visa preencher uma lacuna identificada pelos autores na
bibliografia referente ao tema, refletida na pouca oferta de livros
didáticos na área de sistemas embarcados e, especialmente, com
relação aos sistemas operacionais de tempo real.
A familiaridade do leitor com a linguagem utilizada nos exemplos
facilita o aprendizado, bem como o aproxima das
implementações reais. Ainda, o uso massivo de exemplos faz o
livro ter um propósito que vai além da leitura, pois o torna uma
referência prática de consulta no dia a dia dos profissionais da
área e dos estudantes na elaboração de projetos realizados
durante as disciplinas da graduação, em atividades extraclasse,
em grupos de pesquisa e em projetos de conclusão de curso.
DENARDIN
|
BARRIQUELLO
GUSTAVO WEBER DENARDIN
CARLOS HENRIQUE BARRIQUELLO
CONTEÚDO
1
Introdução aos sistemas de tempo real
2
Sistemas operacionais de tempo real
3
Gerenciamento de tarefas
4
Objetos básicos do sistema operacional
5
Gerenciamento de tempo
6
Gerenciamento de memória
7
Arquiteturas de interrupções
8
Desenvolvimento de drivers
9
Projetos de sistemas embarcados
baseados em RTOS
Referências
Índice remissivo
GUSTAVO WEBER DENARDIN
É graduado (2002), mestre (2004) e doutor (2012) em
Engenharia Elétrica pela Universidade Federal de Santa
Maria (UFSM). Professor associado na Universidade
Tecnológica Federal do Paraná (UTFPR) desde 2005, atua
nos cursos de Engenharia Elétrica, Engenharia de
Computação e no Programa de Pós-Graduação em
Engenharia Elétrica, para os quais ministra as disciplinas
de sistemas embarcados, oficina de integração e
instrumentação eletroeletrônica. É pesquisador no grupo de
pesquisa PROCEN, com interesse nos seguintes temas:
sistemas embarcados e de tempo real, redes e sistemas de
comunicação de dados, redes de sensores sem fio e sistemas
de iluminação inteligentes. Também é um dos
desenvolvedores do BRTOS, um RTOS brasileiro
disponibilizado em código aberto e gratuito.
CARLOS HENRIQUE BARRIQUELLO
Graduado (2007), mestre (2009) e doutor (2012) em
Engenharia Elétrica pela Universidade Federal de Santa
Maria (UFSM). É professor adjunto IV no Departamento de
Eletrônica e Computação da UFSM desde 2012 e atua em
cursos de Engenharia Elétrica, Engenharia de Computação e
e Engenharia de Telecomunicações, ministrando as
disciplinas de comunicações de dados, telecomunicações,
redes de computadores e projetos de sistemas embarcados.
É pesquisador no grupo GEDRE, interessando-se
principalmente em sistemas embarcados e de tempo real,
redes e sistemas de comunicação de dados, redes de
sensores sem fio, sistemas ciberfísicos e sistemas de
iluminação inteligentes. Também é um dos desenvolvedores
do BRTOS.
C
M
Y
CM
MY
CY
CMY
K
Capa_Denardin_sistemas operacionais_P4.pdf 1 11/02/2019 23:02:08
Gustavo Weber Denardin
Carlos Henrique Barriquello
Sistemas operacionais de tempo real
e sua aplicação em sistemas embarcados
Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados
© 2019 Gustavo Weber Denardin e Carlos Henrique Barriquello
Editora Edgard Blücher Ltda.
Ilustrações
Gustavo Weber Denardin e Carlos Henrique Barriquello
Rua Pedroso Alvarenga, 1245, 4◦ andar
04531-934 – São Paulo – SP – Brasil
Tel.: 55 11 3078-5366

www.blucher.com.br
Segundo o Novo Acordo Ortográfico, conforme 5. ed.
do Vocabulário Ortográfico da Língua Portuguesa,
Academia Brasileira de Letras, março de 2009.
É proibida a reprodução total ou parcial por quaisquer
meios sem autorização escrita da editora.
Todos os direitos reservados pela Editora
Edgard Blücher Ltda.
Dados Internacionais de Catalogação na Publicação (CIP)
Angélica Ilacqua CRB-8/7057
Denardin, Gustavo Weber
Sistemas operacionais de tempo real e sua aplicação em
sistemas embarcados / Gustavo Weber Denardin, Carlos
Henrique Barriquello. – São Paulo : Blucher, 2019.
474 p. : il.
Bibliografia
ISBN 978-85-212-1396-3 (impresso)
ISBN 978-85-212-1397-0 (e-book)
1. Processamento eletrônico de dados em tempo real 2.
Sistemas embarcados (Computadores) 3. Sistemas operacionais
(Computadores) I. Título II. Barriquello, Carlos Henrique
19-0129 CDD 005.43
Índice para catálogo sistemático:
1. Sistemas operacionais (Computadores)
Imagem da capa
iStockphoto
Conteúdo
Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Listagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1 Introdução aos sistemas de tempo real . . . . . . . . . . . . . 37
1.1 Sistemas foreground/background . . . . . . . . . . . . . . . . . . . 39
1.2 Sistemas operacionais . . . . . . . . . . . . . . . . . . . . . . . . 42
1.3 Motivações para sistemas operacionais de tempo real . . . . . . 43
1.4 Definições relativas a sistemas operacionais . . . . . . . . . . . . 52
1.4.1 Tarefas, corrotinas, processos e threads . . . . . . . . . . . 52
1.4.2 Prioridades . . . . . . . . . . . . . . . . . . . . . . . . . . 60
1.4.3 Sistemas multitarefas . . . . . . . . . . . . . . . . . . . . 60
1.4.4 Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
1.4.5 Núcleo (kernel) . . . . . . . . . . . . . . . . . . . . . . . . 62
1.4.6 Reentrância e funções seguras . . . . . . . . . . . . . . . . 70
1.4.7 Variáveis globais voláteis e estáticas . . . . . . . . . . . . 75
1.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
1.6 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
2 Sistemas operacionais de tempo real . . . . . . . . . . . . . . 83
2.1 Núcleo não preemptivo . . . . . . . . . . . . . . . . . . . . . . . 84
2.2 Núcleo preemptivo . . . . . . . . . . . . . . . . . . . . . . . . . . 86
2.3 Bloco de controle de tarefas . . . . . . . . . . . . . . . . . . . . . 88
2.4 Marca de tempo (timer tick) . . . . . . . . . . . . . . . . . . . . . 90
2.5 Interrupções e exceções em sistemas de tempo real . . . . . . . . 95
2.6 Inversão de prioridades . . . . . . . . . . . . . . . . . . . . . . . 101
2.7 Seções críticas de código e exclusão mútua . . . . . . . . . . . . 105
2.8 Deadlock (impasse) . . . . . . . . . . . . . . . . . . . . . . . . . . 107
14 Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados
2.9 Sobrecarga (overload) . . . . . . . . . . . . . . . . . . . . . . . . . 108
2.10 Vantagens e desvantagens de núcleos de tempo real . . . . . . . 109
2.11 Sistemas operacionais de tempo real BRTOS e FreeRTOS . . . . 110
2.12 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
2.13 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
3 Gerenciamento de tarefas . . . . . . . . . . . . . . . . . . . . . . 117
3.1 Instalação de tarefas . . . . . . . . . . . . . . . . . . . . . . . . . 121
3.2 Inicialização de sistemas operacionais de tempo real . . . . . . . 128
3.3 Escalonamento de tarefas . . . . . . . . . . . . . . . . . . . . . . 130
3.3.1 Escalonamento dirigido por tempo . . . . . . . . . . . . . 133
3.3.1.1 FIFO e SJF . . . . . . . . . . . . . . . . . . . . . . 133
3.3.1.2 Executivo cíclico . . . . . . . . . . . . . . . . . . 135
3.3.1.3 Round-robin . . . . . . . . . . . . . . . . . . . . . 138
3.3.2 Escalonamento dirigido por prioridades . . . . . . . . . 140
3.3.2.1 Escalonamento por taxa monotônica . . . . . . 142
3.3.2.2 Escalonamento por “prazo monotônico” e “prazo
mais cedo primeiro” . . . . . . . . . . . . . . . 148
3.3.3 Gerenciamento de tarefas aperiódicas . . . . . . . . . . . 151
3.3.4 Aspectos práticos na implementação de escalonadores . 155
3.3.4.1 µC/OS II . . . . . . . . . . . . . . . . . . . . . . 157
3.3.4.2 BRTOS . . . . . . . . . . . . . . . . . . . . . . . . 161
3.3.5 Organização de TCB em listas encadeadas: o exemplo do
FreeRTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
3.3.6 Limiar ou threshold de preempção . . . . . . . . . . . . . 172
3.4 Idle task ou tarefa ociosa . . . . . . . . . . . . . . . . . . . . . . . 176
3.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
3.6 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
4 Objetos básicos do sistema operacional . . . . . . . . . . . . 181
4.1 Objetos de sincronização . . . . . . . . . . . . . . . . . . . . . . . 182
4.1.1 Sincronização de atividades . . . . . . . . . . . . . . . . 182
4.1.1.1 Semáforos . . . . . . . . . . . . . . . . . . . . . . 186
4.1.2 Sincronização de recursos . . . . . . . . . . . . . . . . . . 191
4.1.2.1 Semáforos de exclusão mútua (mutex) . . . . . . 196
4.1.3 Grupo de eventos (event groups) . . . . . . . . . . . . . . . 202
4.2 Objetos de comunicação . . . . . . . . . . . . . . . . . . . . . . . 210
Conteúdo 15
4.2.1 Caixas de mensagem (message mailboxes) . . . . . . . . . . 212
4.2.2 Filas de mensagens (message queues) . . . . . . . . . . . . 218
4.3 Sincronização por múltiplos objetos do sistema (queue sets) . . . 226
4.4 Notificação de tarefas (task notifications) . . . . . . . . . . . . . . 229
4.4.1 Objetos de comunicação sinalizados por notificação de
tarefa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
4.4.1.1 Stream buffers . . . . . . . . . . . . . . . . . . . . 234
4.4.1.2 Message buffers . . . . . . . . . . . . . . . . . . . 238
4.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
4.6 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
5 Gerenciamento de tempo . . . . . . . . . . . . . . . . . . . . . . . 245
5.1 Temporizadores hard e soft . . . . . . . . . . . . . . . . . . . . . . 246
5.2 Modelos de temporizadores em software (implementação da marca
de tempo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
5.3 Temporizadores em software para execução de callbacks . . . . . 256
5.4 Implementação de temporizadores em software para execução de
callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
5.4.1 Gerenciamento de temporizadores com listas ordenadas 259
5.4.2 Gerenciamento de temporizadores com roda de sincro-
nismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
5.4.3 Gerenciamento de temporizadores com heap binário . . . 265
5.4.4 Comparação das estratégias de gerenciamento de tempori-
zadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
5.5 Sistemas com suporte ao modo tickless . . . . . . . . . . . . . . . 272
5.6 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
5.7 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
6 Gerenciamento de memória . . . . . . . . . . . . . . . . . . . . . 277
6.1 Alocação dinâmica de memória em sistemas embarcados . . . . 279
6.2 Técnicas de alocação dinâmica de memória . . . . . . . . . . . . 282
6.3 Gerenciamento de memória em RTOS . . . . . . . . . . . . . . . 286
6.4 Alocação estática de memória no FreeRTOS . . . . . . . . . . . . 294
6.5 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
6.6 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
7 Arquiteturas de interrupções . . . . . . . . . . . . . . . . . . . . 299
7.1 Arquitetura de interrupção unificada . . . . . . . . . . . . . . . . 302
16 Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados
7.2 Arquitetura de interrupção segmentada . . . . . . . . . . . . . . 305
7.3 Comparando as duas abordagens . . . . . . . . . . . . . . . . . . 315
7.3.1 Latência de interrupção . . . . . . . . . . . . . . . . . . . 316
7.3.2 Utilização de recursos . . . . . . . . . . . . . . . . . . . . 317
7.3.3 Determinismo . . . . . . . . . . . . . . . . . . . . . . . . . 318
7.3.4 Complexidade . . . . . . . . . . . . . . . . . . . . . . . . . 319
7.3.5 Arquiteturas de interrupção de RTOS conhecidos . . . . 319
7.4 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
7.5 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
8 Desenvolvimento de drivers . . . . . . . . . . . . . . . . . . . . . 323
8.1 Comunicação serial . . . . . . . . . . . . . . . . . . . . . . . . . . 325
8.2 Teclados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
8.3 Cartão SD e sistema de arquivos FAT . . . . . . . . . . . . . . . 332
8.3.1 Sistema de arquivos FAT . . . . . . . . . . . . . . . . . . . 334
8.3.2 FatFs by Chan . . . . . . . . . . . . . . . . . . . . . . . . . 335
8.4 Displays (telas) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
8.4.1 Displays gráficos e suporte a touchscreen . . . . . . . . . . 347
8.5 Padronização de drivers . . . . . . . . . . . . . . . . . . . . . . . . 351
8.6 FreeRTOS+IO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
8.7 BRTOS device drivers . . . . . . . . . . . . . . . . . . . . . . . . . 362
8.8 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
8.9 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
9 Projetos de sistemas embarcados baseados em RTOS . . . 369
9.1 Distribuição do sistema embarcado em tarefas . . . . . . . . . . 370
9.2 Definição de prioridades entre tarefas . . . . . . . . . . . . . . . 376
9.3 Tarefas periódicas a partir de funções de delay . . . . . . . . . . 379
9.4 Uso da biblioteca padrão do C e seu impacto na pilha das tarefas 382
9.5 Utilizando funções de callback . . . . . . . . . . . . . . . . . . . . 382
9.5.1 Gancho de tarefa ociosa . . . . . . . . . . . . . . . . . . . 383
9.5.2 Gancho de marca de tempo . . . . . . . . . . . . . . . . . 384
9.5.3 Gancho de alocação de memória . . . . . . . . . . . . . . 384
9.5.4 Gancho de verificação de pilha . . . . . . . . . . . . . . . 385
9.6 Corrotinas no FreeRTOS . . . . . . . . . . . . . . . . . . . . . . . 387
9.7 Ferramentas para monitoramento do sistema . . . . . . . . . . . 389
9.7.1 Lista de tarefas com suas principais informações . . . . . 389
Conteúdo 17
9.7.2 Estatísticas de tempo de execução . . . . . . . . . . . . . 393
9.8 Shell, console ou terminal . . . . . . . . . . . . . . . . . . . . . . 398
9.8.1 FreeRTOS+CLI . . . . . . . . . . . . . . . . . . . . . . . . 399
9.8.2 BRTOS Terminal . . . . . . . . . . . . . . . . . . . . . . . 404
9.9 Traçamento ou tracing . . . . . . . . . . . . . . . . . . . . . . . . 407
9.10 Portando um sistema operacional de tempo real . . . . . . . . . 411
9.11 Abstração de um RTOS a módulos externos . . . . . . . . . . . . 422
9.12 Configuração de sistemas operacionais de tempo real . . . . . . 429
9.13 Utilizando uma unidade de proteção de memória . . . . . . . . 432
9.14 Gerenciamento de múltiplos núcleos em um RTOS . . . . . . . . 445
9.15 Códigos demonstrativos de uso de RTOS . . . . . . . . . . . . . 449
9.15.1 Sistema multitarefa cooperativo com protothreads . . . . 449
9.15.2 Sistema embarcado com alta concorrência . . . . . . . . . 452
9.15.3 Reprodutor de arquivos de áudio WAV . . . . . . . . . . 455
9.15.4 Exemplo de tarefa gatekeeper . . . . . . . . . . . . . . . . . 464
9.16 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
9.17 Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Índice remissivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
1
Capítulo
Introdução aos sistemas de
tempo real
Sistemas operacionais de tempo real são uma subclasse de sistemas operacio-
nais destinados à concepção de sistemas computacionais, geralmente embarcados,
em que o tempo de resposta a um evento é fixo e deve ser respeitado sempre que
possível. Esses sistemas são conhecidos na literatura como sistemas de tempo
real e são caracterizados por possuírem requisitos específicos de sequência lógica
e tempo que, se não cumpridos, resultam em falhas no sistema a que se dedicam.
Ressalta-se que o tempo de resposta aos eventos controlados em um sistema de
tempo real não deve ser necessariamente o mais rápido possível. A prioridade é
o cumprimento dos prazos de todos os eventos controlados pelo sistema.
Existem dois tipos de sistemas em tempo real: soft e hard. Em um sistema de
tempo real soft, o sistema pode continuar funcionando mesmo que restrições
temporais não sejam respeitadas. Isso não significa que o sistema irá funcionar
corretamente, mas que durante os períodos em que os prazos são perdidos
ocorrerá inconsistência em seu funcionamento, voltando a operação correta
quando os prazos voltarem a ser cumpridos. Um sistema de aquisição de dados
pode ser considerado soft, pois possui restrições temporais, mas a perda de
38 Sistemas operacionais de tempo real e sua aplicação em sistemas embarcados
prazos não implica falha geral do sistema. Já sistemas de tempo real hard devem
seguir suas restrições temporais rigidamente, de forma a evitar o colapso total
do sistema. Normalmente sistemas hard são utilizados em aplicações que estão
diretamente relacionadas à vida de pessoas, como o sistema de controle de um
avião. A maioria dos sistemas em tempo real existentes utilizam uma combinação
de requisitos soft e hard.
Normalmente os sistemas em tempo real são embarcados. Isso significa que o
sistema computacional é completamente encapsulado e dedicado ao dispositivo
ou sistema que controla. Diferentemente de computadores de propósito geral,
como o computador pessoal, um sistema embarcado realiza um conjunto de
tarefas predefinidas, geralmente com requisitos específicos. Já que o sistema é
dedicado a tarefas específicas, pode-se otimizar o projeto reduzindo tamanho,
recursos computacionais e custo do produto/produção.
Alguns exemplos de sistemas embarcados são:
• Automotivos: controle de injeção eletrônica, controle de tração, controle de
sistemas de frenagem antibloqueio (ABS) etc.;
• Domésticos: micro-ondas, lavadouras de louça, lavadouras de roupa etc.;
• Comunicação: telefones celulares, roteadores, equipamentos de GPS etc.;
• Robótica: robôs industriais, humanoides, drones etc.;
• Aeroespacial e militar: sistemas de gerenciamento de voo, controle de armas
de fogo etc.;
• Controle de processos: processamento de alimentos, controle de plantas
químicas e controle de manufaturas em geral.
Este capítulo irá discutir as principais motivações para a utilização de sistemas
operacionais de tempo real na concepção de sistemas embarcados, destacando
os principais impactos na utilização desse tipo de sistema frente às técnicas
tradicionais de projeto. Ainda, descrevem-se os principais conceitos envolvidos
em sistemas de tempo real. No texto os termos “processador” e “central processing
unit (CPU)” serão utilizados de forma análoga para evitar o uso dos mesmos
termos em longas sequências de texto.
Introdução aos sistemas de tempo real 39
1.1 Sistemas foreground/background
O ensino de projetos de sistemas embarcados usualmente se inicia com siste-
mas de baixa complexidade. Isso deve-se ao fato de ser o primeiro contato com
uma mudança de paradigma de programação, em que em vez de se projetar
um software sequencial, projeta-se um software que responda a eventos. Ademais,
provavelmente será o primeiro contato com o projeto de um software que deve
executar indefinidamente, enquanto o sistema estiver energizado. Existem vá-
rias formas de escrever um código que se comporte dessa maneira. No entanto,
devido à sua simplicidade, normalmente começa-se...

mostrar mais »TempolivroRealsistemasoperacionais

Comentários para: LIVRO Sistemas Operacionais de Tempo Real

Quais são os sistemas operacionais utilizados em sistemas embarcados?

Sistemas operacionais/Sistemas embarcados.
1.2.1 TinyOS:.
1.2.2 Contiki..
1.2.3 VirtuOS:.
1.2.4 QNX:.
1.2.5 Windows CE:.
1.2.6 Exemplos de sistemas embarcados com Linux:.

Em que tipo de aplicações são utilizados sistemas operacionais em tempo real?

Estes sistemas são utilizados em situações onde a exatidão temporal é tão importante quanto a exatidão lógica de um programa. Por exemplo, suponhamos que você esteja executando um programa que consiste em quatro tarefas. Cada tarefa deve ser concluída em um milissegundo.

Quais os 2 tipos de sistema operacional de tempo real?

Sistemas de Tempo Real Críticos e Não-Críticos.
A severidade da pena pelo não cumprimento das tarefas num determinado intervalo de tempo é o fator que os distingüe..
O STR Crítico é aquele que tem um comportamento determinístico, ou seja, o prazo para execução de uma tarefa (deadline) não pode ser violado..

O que é um sistema operacional embarcado?

Um sistema operacional é dito embarcado ou embutido (em inglês, embedded) quando é construído para operar sobre um hardware com poucos recursos de processamento, armazenamento e energia.