SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
ELT048 - SOE
Requisitos temporais
Rodrigo Almeida
Universidade Federal de Itajubá
Revisão
● Kernel cooperativo
● Troca de processos
● Métodos de escalonamento
Exemplo
● Exemplo de kernel cooperativo
● O código apresentado pode ser compilado em
qualquer compilador C
● O kernel é composto por três funções:
● KernelInit(): Inicializa as variáveis internas
● KernelAddProc(): Adiciona processos no pool
● KernelLoop(): Inicializa o gerenciador de
processos
– Esta função possui um loop infinito pois ela só
precisa terminar quando o equipamento/placa for
desligado.
//return code
#define SUCESSO 0
#define FALHA 1
#define REPETIR 2
#define POOLSIZE 10
//function pointer declaration
typedef char(*ptrFunc)(void);
//process struct
typedef struct {
ptrFunc function;
} process;
process* pool[POOLSIZE];
Exemplo
char kernelInit(void){
ini = 0;
fim = 0;
return SUCESSO;
}
char kernelAddProc(process* newProc){
//checking for free space
if ( ((fim+1)%POOLSIZE) != ini){
pool[fim] = newProc;
fim = (fim+1)%POOLSIZE;
return SUCESSO;
}
return FALHA;
}
Exemplo
void kernelLoop(void){
for(;;){
//Do we have any process to execute?
if (ini != fim){
//check if there is need to reschedule
if (pool[start]->Func() == REPETIR){
kernelAddProc(pool[ini]);
}
//prepare to get the next process;
ini = (ini+1)%POOLSIZE;
}
}
}
Exemplo
void tst1(void){
printf("Process 1n");
return REPETIR;
}
void tst2(void){
printf("Process 2n");
return SUCESSO;
}
void tst3(void){
printf("Process 3n");
return REPETIR;
}
● Os processos
Exemplo
void main(void){
//declaring the processes
process p1 = {tst1};
process p2 = {tst2};
process p3 = {tst3};
kernelInit();
//Test if the process was added successfully
if (kernelAddProc(p1) == SUCESSO){
printf("1st process addedn");}
if (kernelAddProc(p2) == SUCESSO){
printf("2nd process addedn");}
if (kernelAddProc(p3) == SUCESSO){
printf("3rd process addedn");}
kernelLoop();
}
Exemplo
Console Output:
---------------------------
1st process added
2nd process added
3rd process added
Ite. 0, Slot. 0: Process 1
Ite. 1, Slot. 1: Process 2
Ite. 2, Slot. 2: Process 3
Ite. 3, Slot. 3: Process 1
Ite. 4, Slot. 0: Process 3
Ite. 5, Slot. 1: Process 1
Ite. 6, Slot. 2: Process 3
Ite. 7, Slot. 3: Process 1
Ite. 8, Slot. 0: Process 3
...
---------------------------
Exemplo
Requisitos temporais
Na maioria dos sistemas embarcados é
necessário garantir que algumas funções
sejam executadas com uma certa frequência.
Alguns sistema podem até mesmo falhar caso
estes requisitos não sejam atingidos.
Requisitos temporais
● Tempo real
● Velocidade
● Instantâneadade
Real time
● Capacidade de um
sistema em garantir
a peridiocidade de
uma tarefa
● O importante é o
determinismo na
execução, não a
velocidade
business2community.com
Real time
● Capacidade de um
sistema em garantir
a peridiocidade de
uma tarefa
● Determinismo
Real time
● Hard real time ● Soft real time
Requisitos temporais
● Para implementar um sistema que trabalhe
com requisitos temporais:
1)Deve existir um relógio que trabalhe com uma
frequência precisa.
2)O kernel deve ser informado da frequência, ou
período, de execução de cada processo.
3)A soma dos tempos de cada processo deve
“caber” no tempo disponível do processador.
●
1a
condição:
● É necessário um timer que possa gerar uma
interrupção.
●
2a
condição:
● Adicionar as informações na estrutura do
processo
●
3a
condição:
● Testar, testar e testar.
● Em caso de falha:
– Chip mais rápido
– Otimização
Requisitos temporais
● Agendamento dos processos:
● A utilização de um timer finito para medição de
tempo pode causar overflow
● Exemplo: agendamento de 2 processos para
10 e 50 segundos (1 bit = 1ms)
Agendamento
● E se os dois processos forem agendados
para o mesmo tempo?
Agendamento
● Suponha que o primeiro processo fosse
executado:
● Do diagrama de tempo abaixo o processo P2
está atrasado 10(s) ou foi agendado para
acontecer daqui 55(s)?
Agendamento
● Solução:
● Utilizar um contador temporizado decrescente
para cada processo ao invés de um valor de
agendamento.
● Problema:
● Cada um dos contadores devem ser
decrementados na rotina de interrupção.
● Isso é um problema pra sua aplicação?
Agendamento
Kernel com requisitos temporais
● A primeira modificação é adicionar
● Um contador para cada processo
● Uma variável para armazenar o período de
execução
//process struct
typedef struct {
ptrFunc function;
int period;
int start;
} process;
Kernel com requisitos temporais
● Deve ser criada uma função de interrupção
para decrementar cada um dos contadores
dos processos
● Os detalhes intrínsecos do processo de
criação e manipulação de interrupções está
fora do escopo desta aula.
● Por facilidade será utilizado o Device
initialization
Kernel com requisitos temporais
Device initialization
Device initialization
Rotina de Interrupção
Rotina de Interrupção
//colocar no MCUinit.c na função isrVrti()
#include “kernel.h”
__interrupt void isrVrti(void){
KernelClock();
//limpar a flag de interrupção
CRGFLG = 0x80;
}
Rotina de Interrupção
//colocar no kernel.c
#define MIN_INT -30000
void KernelClock(void){
unsigned char i;
i = ini;
while(i!=fim){
if((pool[i].start)>(MIN_INT)){
pool[i].start--;
}
i = (i+1)%SLOT_SIZE;
}
}
//colocar no kernel.h
void KernelClock(void);
● A função de adição de processos deve
inicializar corretamente as variáveis
char AddProc(process* newProc){
//checking for free space
if ( ((fim+1)%POOLSIZE) != ini){
pool[fim] = newProc;
//increment start timer with period
pool[fim].start += newProc.period;
fim = (end+1)%POOLSIZE;
return SUCESSO;
}
return FALHA;
}
Kernel com requisitos temporais
● A função de execução do kernel apresenta
uma mudança maior.
● O processo de escalonamento muda de um
modelo FIFO (aula anterior) para um
escalonador baseado no menor tempo de
inicio.
Kernel com requisitos temporais
if (ini != fim){
//Procurando o processo com menor tempo de inicio
j = (ini+1) % POOLSIZE;
next = ini;
while(j!=fim){
if (pool[j].start < pool[next].start){
next = j;
}
j = (j+1)%POOLSIZE;
}
//trocando as posições no pool
tempProc = pool[next];
pool[next] = pool[ini];
pool[ini] = tempProc;
while(pool[ini].start>0){
//ótimo lugar para economia de energia
}
if ( (pool[ini]->function)() == REPETIR ){
AddProc(&(pool[ini]));
}
ini = (ini+1)%POOLSIZE;
}
Exercício
● Montar um relógio binário onde cada led
pisca numa frequência diferente
1
2
3
4
1 segundo
2 segundos
4 segundos
8 segundos //Ligar o 1o led
PORTB = PORTB | 0x01;
//Desligar o 1o led
PORTB = PORTB & ~0x01;
//Piscar o 1o led
PORTB = PORTB ^ 0x01;

Weitere ähnliche Inhalte

Was ist angesagt?

The Linux Block Layer - Built for Fast Storage
The Linux Block Layer - Built for Fast StorageThe Linux Block Layer - Built for Fast Storage
The Linux Block Layer - Built for Fast StorageKernel TLV
 
Beyond printk: Efficient Zynq UltraScale+ MPSoC Linux Debugging and Development
Beyond printk: Efficient Zynq UltraScale+ MPSoC Linux Debugging and DevelopmentBeyond printk: Efficient Zynq UltraScale+ MPSoC Linux Debugging and Development
Beyond printk: Efficient Zynq UltraScale+ MPSoC Linux Debugging and DevelopmentZach Pfeffer
 
Linux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKBLinux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKBshimosawa
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelDivye Kapoor
 
LLVM Backend Porting
LLVM Backend PortingLLVM Backend Porting
LLVM Backend PortingShiva Chen
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedAnne Nicolas
 
Linux Initialization Process (1)
Linux Initialization Process (1)Linux Initialization Process (1)
Linux Initialization Process (1)shimosawa
 
Introduction to open_sbi
Introduction to open_sbiIntroduction to open_sbi
Introduction to open_sbiNylon
 
LLVM Instruction Selection
LLVM Instruction SelectionLLVM Instruction Selection
LLVM Instruction SelectionShiva Chen
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングYuma Ohgami
 
Debug dpdk process bottleneck & painpoints
Debug dpdk process bottleneck & painpointsDebug dpdk process bottleneck & painpoints
Debug dpdk process bottleneck & painpointsVipin Varghese
 

Was ist angesagt? (20)

Linux Network Stack
Linux Network StackLinux Network Stack
Linux Network Stack
 
The Linux Block Layer - Built for Fast Storage
The Linux Block Layer - Built for Fast StorageThe Linux Block Layer - Built for Fast Storage
The Linux Block Layer - Built for Fast Storage
 
Beyond printk: Efficient Zynq UltraScale+ MPSoC Linux Debugging and Development
Beyond printk: Efficient Zynq UltraScale+ MPSoC Linux Debugging and DevelopmentBeyond printk: Efficient Zynq UltraScale+ MPSoC Linux Debugging and Development
Beyond printk: Efficient Zynq UltraScale+ MPSoC Linux Debugging and Development
 
C Programming - Refresher - Part III
C Programming - Refresher - Part IIIC Programming - Refresher - Part III
C Programming - Refresher - Part III
 
Linux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKBLinux Kernel Booting Process (1) - For NLKB
Linux Kernel Booting Process (1) - For NLKB
 
The TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux KernelThe TCP/IP Stack in the Linux Kernel
The TCP/IP Stack in the Linux Kernel
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 
LLVM Backend Porting
LLVM Backend PortingLLVM Backend Porting
LLVM Backend Porting
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
 
Dpdk performance
Dpdk performanceDpdk performance
Dpdk performance
 
Linux Internals - Interview essentials 2.0
Linux Internals - Interview essentials 2.0Linux Internals - Interview essentials 2.0
Linux Internals - Interview essentials 2.0
 
Linux Initialization Process (1)
Linux Initialization Process (1)Linux Initialization Process (1)
Linux Initialization Process (1)
 
Introduction to open_sbi
Introduction to open_sbiIntroduction to open_sbi
Introduction to open_sbi
 
BusyBox for Embedded Linux
BusyBox for Embedded LinuxBusyBox for Embedded Linux
BusyBox for Embedded Linux
 
LLVM Instruction Selection
LLVM Instruction SelectionLLVM Instruction Selection
LLVM Instruction Selection
 
Roteamento
RoteamentoRoteamento
Roteamento
 
Qemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System EmulationQemu JIT Code Generator and System Emulation
Qemu JIT Code Generator and System Emulation
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
Debug dpdk process bottleneck & painpoints
Debug dpdk process bottleneck & painpointsDebug dpdk process bottleneck & painpoints
Debug dpdk process bottleneck & painpoints
 

Andere mochten auch

Andere mochten auch (7)

49 1225 la deidad de jesucristo
49 1225 la deidad de jesucristo49 1225 la deidad de jesucristo
49 1225 la deidad de jesucristo
 
Bluecontrol cadastro temporario
Bluecontrol cadastro temporarioBluecontrol cadastro temporario
Bluecontrol cadastro temporario
 
Ciberdelitos
CiberdelitosCiberdelitos
Ciberdelitos
 
Comercio electronico
Comercio electronicoComercio electronico
Comercio electronico
 
58 0202 escápate allá, date prisa
58 0202 escápate allá, date prisa58 0202 escápate allá, date prisa
58 0202 escápate allá, date prisa
 
Treinamento Coleta Seletiva
Treinamento Coleta SeletivaTreinamento Coleta Seletiva
Treinamento Coleta Seletiva
 
Dengue1
Dengue1Dengue1
Dengue1
 

Ähnlich wie Kernel cooperativo com requisitos temporais

Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de driversRodrigo Almeida
 
Definição de processos
Definição de processosDefinição de processos
Definição de processosRodrigo Almeida
 
Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Embarcados
 
Interrupts and the timer
Interrupts and the timerInterrupts and the timer
Interrupts and the timerMayara Mônica
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasKirmayr tomaz
 
Escalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPEscalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPRafael Moreira
 
Aula 01b - Conceitos de Hardware e Software.pdf
Aula 01b - Conceitos de Hardware e Software.pdfAula 01b - Conceitos de Hardware e Software.pdf
Aula 01b - Conceitos de Hardware e Software.pdfEMERSONMUNIZDECARVAL
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosEmbarcados
 
Hierarquia dos Processadores da Intel.pptx
Hierarquia dos Processadores da Intel.pptxHierarquia dos Processadores da Intel.pptx
Hierarquia dos Processadores da Intel.pptxOsvaldoJooNhabete
 
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...Marcelo Barros de Almeida
 
Sistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsSistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsPedro De Almeida
 
Planejamento e Controle da Produção
Planejamento e Controle da Produção Planejamento e Controle da Produção
Planejamento e Controle da Produção Geovana Pires Lima
 
Máquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaMáquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaLincoln Lamas
 
Coroutine e concorrência python
Coroutine e concorrência   python Coroutine e concorrência   python
Coroutine e concorrência python Kaueh Moreno
 

Ähnlich wie Kernel cooperativo com requisitos temporais (20)

Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
 
Definição de processos
Definição de processosDefinição de processos
Definição de processos
 
Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?
 
Apresentacao sobre o KURT
Apresentacao sobre o KURTApresentacao sobre o KURT
Apresentacao sobre o KURT
 
Arquitetura 8 3
Arquitetura 8 3Arquitetura 8 3
Arquitetura 8 3
 
Arquitetura 8 3
Arquitetura 8 3Arquitetura 8 3
Arquitetura 8 3
 
Interrupts and the timer
Interrupts and the timerInterrupts and the timer
Interrupts and the timer
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticas
 
Escalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SPEscalonador Earliest Deadline First - TDC2014SP
Escalonador Earliest Deadline First - TDC2014SP
 
Aula 01b - Conceitos de Hardware e Software.pdf
Aula 01b - Conceitos de Hardware e Software.pdfAula 01b - Conceitos de Hardware e Software.pdf
Aula 01b - Conceitos de Hardware e Software.pdf
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Hierarquia dos Processadores da Intel.pptx
Hierarquia dos Processadores da Intel.pptxHierarquia dos Processadores da Intel.pptx
Hierarquia dos Processadores da Intel.pptx
 
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
 
Sistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e ThreadsSistemas Operativos - Processos e Threads
Sistemas Operativos - Processos e Threads
 
Planejamento e Controle da Produção
Planejamento e Controle da Produção Planejamento e Controle da Produção
Planejamento e Controle da Produção
 
Máquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da MicroarquiteturaMáquinas Multiníveis - Nível da Microarquitetura
Máquinas Multiníveis - Nível da Microarquitetura
 
Coroutine e concorrência python
Coroutine e concorrência   python Coroutine e concorrência   python
Coroutine e concorrência python
 

Mehr von Rodrigo Almeida

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Rodrigo Almeida
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19Rodrigo Almeida
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenhariasRodrigo Almeida
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Rodrigo Almeida
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Rodrigo Almeida
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio LacerdaRodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersRodrigo Almeida
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosRodrigo Almeida
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusRodrigo Almeida
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCDRodrigo Almeida
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialRodrigo Almeida
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosRodrigo Almeida
 
Acessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorAcessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorRodrigo Almeida
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registrosRodrigo Almeida
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRodrigo Almeida
 
Introdução à programação embarcada
Introdução à programação embarcadaIntrodução à programação embarcada
Introdução à programação embarcadaRodrigo Almeida
 

Mehr von Rodrigo Almeida (20)

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenharias
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio Lacerda
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffers
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcados
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virus
 
Comunicação serial
Comunicação serialComunicação serial
Comunicação serial
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCD
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricial
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexados
 
Acessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorAcessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontrolador
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registros
 
Operações com Bits
Operações com BitsOperações com Bits
Operações com Bits
 
Revisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas EmbarcadosRevisão de linguagem C para Sistemas Embarcados
Revisão de linguagem C para Sistemas Embarcados
 
Introdução à programação embarcada
Introdução à programação embarcadaIntrodução à programação embarcada
Introdução à programação embarcada
 

Kernel cooperativo com requisitos temporais

  • 1. ELT048 - SOE Requisitos temporais Rodrigo Almeida Universidade Federal de Itajubá
  • 2. Revisão ● Kernel cooperativo ● Troca de processos ● Métodos de escalonamento
  • 3. Exemplo ● Exemplo de kernel cooperativo ● O código apresentado pode ser compilado em qualquer compilador C ● O kernel é composto por três funções: ● KernelInit(): Inicializa as variáveis internas ● KernelAddProc(): Adiciona processos no pool ● KernelLoop(): Inicializa o gerenciador de processos – Esta função possui um loop infinito pois ela só precisa terminar quando o equipamento/placa for desligado.
  • 4. //return code #define SUCESSO 0 #define FALHA 1 #define REPETIR 2 #define POOLSIZE 10 //function pointer declaration typedef char(*ptrFunc)(void); //process struct typedef struct { ptrFunc function; } process; process* pool[POOLSIZE]; Exemplo
  • 5. char kernelInit(void){ ini = 0; fim = 0; return SUCESSO; } char kernelAddProc(process* newProc){ //checking for free space if ( ((fim+1)%POOLSIZE) != ini){ pool[fim] = newProc; fim = (fim+1)%POOLSIZE; return SUCESSO; } return FALHA; } Exemplo
  • 6. void kernelLoop(void){ for(;;){ //Do we have any process to execute? if (ini != fim){ //check if there is need to reschedule if (pool[start]->Func() == REPETIR){ kernelAddProc(pool[ini]); } //prepare to get the next process; ini = (ini+1)%POOLSIZE; } } } Exemplo
  • 7. void tst1(void){ printf("Process 1n"); return REPETIR; } void tst2(void){ printf("Process 2n"); return SUCESSO; } void tst3(void){ printf("Process 3n"); return REPETIR; } ● Os processos Exemplo
  • 8. void main(void){ //declaring the processes process p1 = {tst1}; process p2 = {tst2}; process p3 = {tst3}; kernelInit(); //Test if the process was added successfully if (kernelAddProc(p1) == SUCESSO){ printf("1st process addedn");} if (kernelAddProc(p2) == SUCESSO){ printf("2nd process addedn");} if (kernelAddProc(p3) == SUCESSO){ printf("3rd process addedn");} kernelLoop(); } Exemplo
  • 9. Console Output: --------------------------- 1st process added 2nd process added 3rd process added Ite. 0, Slot. 0: Process 1 Ite. 1, Slot. 1: Process 2 Ite. 2, Slot. 2: Process 3 Ite. 3, Slot. 3: Process 1 Ite. 4, Slot. 0: Process 3 Ite. 5, Slot. 1: Process 1 Ite. 6, Slot. 2: Process 3 Ite. 7, Slot. 3: Process 1 Ite. 8, Slot. 0: Process 3 ... --------------------------- Exemplo
  • 10. Requisitos temporais Na maioria dos sistemas embarcados é necessário garantir que algumas funções sejam executadas com uma certa frequência. Alguns sistema podem até mesmo falhar caso estes requisitos não sejam atingidos.
  • 11. Requisitos temporais ● Tempo real ● Velocidade ● Instantâneadade
  • 12. Real time ● Capacidade de um sistema em garantir a peridiocidade de uma tarefa ● O importante é o determinismo na execução, não a velocidade business2community.com
  • 13. Real time ● Capacidade de um sistema em garantir a peridiocidade de uma tarefa ● Determinismo
  • 14. Real time ● Hard real time ● Soft real time
  • 15. Requisitos temporais ● Para implementar um sistema que trabalhe com requisitos temporais: 1)Deve existir um relógio que trabalhe com uma frequência precisa. 2)O kernel deve ser informado da frequência, ou período, de execução de cada processo. 3)A soma dos tempos de cada processo deve “caber” no tempo disponível do processador.
  • 16. ● 1a condição: ● É necessário um timer que possa gerar uma interrupção. ● 2a condição: ● Adicionar as informações na estrutura do processo ● 3a condição: ● Testar, testar e testar. ● Em caso de falha: – Chip mais rápido – Otimização Requisitos temporais
  • 17. ● Agendamento dos processos: ● A utilização de um timer finito para medição de tempo pode causar overflow ● Exemplo: agendamento de 2 processos para 10 e 50 segundos (1 bit = 1ms) Agendamento
  • 18. ● E se os dois processos forem agendados para o mesmo tempo? Agendamento
  • 19. ● Suponha que o primeiro processo fosse executado: ● Do diagrama de tempo abaixo o processo P2 está atrasado 10(s) ou foi agendado para acontecer daqui 55(s)? Agendamento
  • 20. ● Solução: ● Utilizar um contador temporizado decrescente para cada processo ao invés de um valor de agendamento. ● Problema: ● Cada um dos contadores devem ser decrementados na rotina de interrupção. ● Isso é um problema pra sua aplicação? Agendamento
  • 22. ● A primeira modificação é adicionar ● Um contador para cada processo ● Uma variável para armazenar o período de execução //process struct typedef struct { ptrFunc function; int period; int start; } process; Kernel com requisitos temporais
  • 23. ● Deve ser criada uma função de interrupção para decrementar cada um dos contadores dos processos ● Os detalhes intrínsecos do processo de criação e manipulação de interrupções está fora do escopo desta aula. ● Por facilidade será utilizado o Device initialization Kernel com requisitos temporais
  • 27. Rotina de Interrupção //colocar no MCUinit.c na função isrVrti() #include “kernel.h” __interrupt void isrVrti(void){ KernelClock(); //limpar a flag de interrupção CRGFLG = 0x80; }
  • 28. Rotina de Interrupção //colocar no kernel.c #define MIN_INT -30000 void KernelClock(void){ unsigned char i; i = ini; while(i!=fim){ if((pool[i].start)>(MIN_INT)){ pool[i].start--; } i = (i+1)%SLOT_SIZE; } } //colocar no kernel.h void KernelClock(void);
  • 29. ● A função de adição de processos deve inicializar corretamente as variáveis char AddProc(process* newProc){ //checking for free space if ( ((fim+1)%POOLSIZE) != ini){ pool[fim] = newProc; //increment start timer with period pool[fim].start += newProc.period; fim = (end+1)%POOLSIZE; return SUCESSO; } return FALHA; } Kernel com requisitos temporais
  • 30. ● A função de execução do kernel apresenta uma mudança maior. ● O processo de escalonamento muda de um modelo FIFO (aula anterior) para um escalonador baseado no menor tempo de inicio. Kernel com requisitos temporais
  • 31. if (ini != fim){ //Procurando o processo com menor tempo de inicio j = (ini+1) % POOLSIZE; next = ini; while(j!=fim){ if (pool[j].start < pool[next].start){ next = j; } j = (j+1)%POOLSIZE; } //trocando as posições no pool tempProc = pool[next]; pool[next] = pool[ini]; pool[ini] = tempProc; while(pool[ini].start>0){ //ótimo lugar para economia de energia } if ( (pool[ini]->function)() == REPETIR ){ AddProc(&(pool[ini])); } ini = (ini+1)%POOLSIZE; }
  • 32. Exercício ● Montar um relógio binário onde cada led pisca numa frequência diferente 1 2 3 4 1 segundo 2 segundos 4 segundos 8 segundos //Ligar o 1o led PORTB = PORTB | 0x01; //Desligar o 1o led PORTB = PORTB & ~0x01; //Piscar o 1o led PORTB = PORTB ^ 0x01;