SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
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;

Más contenido relacionado

La actualidad más candente

Embedded Operating System - Linux
Embedded Operating System - LinuxEmbedded Operating System - Linux
Embedded Operating System - Linux
Emertxe Information Technologies Pvt Ltd
 
LCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platformLCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platform
Linaro
 

La actualidad más candente (20)

Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao Swing
 
Embedded Operating System - Linux
Embedded Operating System - LinuxEmbedded Operating System - Linux
Embedded Operating System - Linux
 
Lcu14 107- op-tee on ar mv8
Lcu14 107- op-tee on ar mv8Lcu14 107- op-tee on ar mv8
Lcu14 107- op-tee on ar mv8
 
C Programming - Refresher - Part III
C Programming - Refresher - Part IIIC Programming - Refresher - Part III
C Programming - Refresher - Part III
 
Advanced C - Part 3
Advanced C - Part 3Advanced C - Part 3
Advanced C - Part 3
 
Advanced C - Part 1
Advanced C - Part 1 Advanced C - Part 1
Advanced C - Part 1
 
Linux Internals - Part II
Linux Internals - Part IILinux Internals - Part II
Linux Internals - Part II
 
Linux Porting
Linux PortingLinux Porting
Linux Porting
 
Embedded C - Day 2
Embedded C - Day 2Embedded C - Day 2
Embedded C - Day 2
 
U-Boot - An universal bootloader
U-Boot - An universal bootloader U-Boot - An universal bootloader
U-Boot - An universal bootloader
 
Android Security Internals
Android Security InternalsAndroid Security Internals
Android Security Internals
 
LCA14: LCA14-502: The way to a generic TrustZone® solution
LCA14: LCA14-502: The way to a generic TrustZone® solutionLCA14: LCA14-502: The way to a generic TrustZone® solution
LCA14: LCA14-502: The way to a generic TrustZone® solution
 
HKG15-311: OP-TEE for Beginners and Porting Review
HKG15-311: OP-TEE for Beginners and Porting ReviewHKG15-311: OP-TEE for Beginners and Porting Review
HKG15-311: OP-TEE for Beginners and Porting Review
 
Bootloaders (U-Boot)
Bootloaders (U-Boot) Bootloaders (U-Boot)
Bootloaders (U-Boot)
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
C Programming - Refresher - Part II
C Programming - Refresher - Part II C Programming - Refresher - Part II
C Programming - Refresher - Part II
 
I2c drivers
I2c driversI2c drivers
I2c drivers
 
LCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platformLCU14 302- How to port OP-TEE to another platform
LCU14 302- How to port OP-TEE to another platform
 
Linux boot process
Linux boot processLinux boot process
Linux boot process
 
Character drivers
Character driversCharacter drivers
Character drivers
 

Destacado (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
 

Similar a Kernel 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 drivers
Rodrigo Almeida
 

Similar a Kernel 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
 

Más de Rodrigo 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 virus
Rodrigo Almeida
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registros
Rodrigo Almeida
 

Más de 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
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Kernel 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;