escalonador de processos de tempo real rtx tiny

15
SVC GRECO Escalonador de Escalonador de Processos Processos de Tempo Real de Tempo Real RTX Tiny RTX Tiny

Upload: mckenzie-petersen

Post on 30-Dec-2015

20 views

Category:

Documents


0 download

DESCRIPTION

Escalonador de Processos de Tempo Real RTX Tiny. Necessidade. Manipulação de processos Definição de ordem de execução Tratamento de eventos / interrupções Sincronização / comunicação Time-slicing. RTX Tiny. Produzido pela Keil, Inc. Subconjunto do RTX comercial Características técnicas - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Escalonador de Processos Escalonador de Processos de Tempo Realde Tempo RealRTX TinyRTX Tiny

Page 2: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

NecessidadeNecessidade

• Manipulação de processos• Definição de ordem de execução• Tratamento de eventos / interrupções• Sincronização / comunicação• Time-slicing

Page 3: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

RTX TinyRTX Tiny

• Produzido pela Keil, Inc.• Subconjunto do RTX comercial• Características técnicas

– Escalonamento round-robin sem prioridades– 7 primitivas de sistema– Permite até 16 tarefas– Usa máximo de 64 bytes de RAM– Usa o Timer 0– 900 bytes de código

Page 4: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

RTX TinyRTX Tiny

• Características técnicas (continuação)– Latência de interrupção < 20 ciclos– Tempo usado na mudança de contexto é

de 100 a 700 ciclos, dependendo se a pilha está muito carregada.

– Timer 0 programado para interromper a cada 10ms (padrão que pode ser alterado).

– Time slicing de 5 pulsos do Timer 0 (padrão que pode ser alterado).

Page 5: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Primitivas DisponíveisPrimitivas Disponíveis

• char os_create_task (uchar task_id);

1) Inicializa e põe a tarefa 1) Inicializa e põe a tarefa task_idtask_id na fila de na fila de processos no estado processos no estado readyready..

2) Retorna 0 se OK, e -1 se 2) Retorna 0 se OK, e -1 se task_id task_id não existe não existe ou não pode ser inicializada.ou não pode ser inicializada.

Page 6: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Primitivas DisponíveisPrimitivas Disponíveis

• char os_create_task (uchar task_id);• char os_delete_task (uchar task_id);

1) Pára a tarefa 1) Pára a tarefa task_idtask_id e remove da fila de e remove da fila de processos.processos.

2) Retorna 0 se OK, e -1 se 2) Retorna 0 se OK, e -1 se task_id task_id não existe não existe ou não estava na fila de processos.ou não estava na fila de processos.

Page 7: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Primitivas DisponíveisPrimitivas Disponíveis

• char os_create_task (uchar task_id);• char os_delete_task (uchar task_id);• char os_wait (uchar tipo, uchar ticks, uint d);

1) Pára a tarefa atual e espera pelo evento 1) Pára a tarefa atual e espera pelo evento definido em definido em tipo.tipo.

2) O parâmetro 2) O parâmetro dd não é usado e é mantido não é usado e é mantido apenas por compatibilidade com a versão apenas por compatibilidade com a versão completa do RTX Comercial.completa do RTX Comercial.

Page 8: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Primitivas DisponíveisPrimitivas Disponíveis

• char os_create_task (uchar task_id);• char os_delete_task (uchar task_id);• char os_wait (uchar tipo, uchar ticks, uint d);

1) O parâmetro 1) O parâmetro tipotipo pode ter os seguintes pode ter os seguintes valores:valores:

K_SIG K_SIG Espere por um sinal Espere por um sinal

K_TMO K_TMO Espere por timeout Espere por timeout

K_IVL K_IVL Espere por tempo Espere por tempo

2) Estes valores podem ser combinados. Ex: 2) Estes valores podem ser combinados. Ex: (K_SIG | K_TMO), espera um sinal pelo tempo (K_SIG | K_TMO), espera um sinal pelo tempo definido em definido em ticksticks..

3) O parâmetro 3) O parâmetro ticksticks define o número de pulsos define o número de pulsos do timer que devem ser esperados caso K_IVL do timer que devem ser esperados caso K_IVL ou K_TMO sejam usados.ou K_TMO sejam usados.

Page 9: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Primitivas DisponíveisPrimitivas Disponíveis

• char os_create_task (uchar task_id);• char os_delete_task (uchar task_id);• char os_wait (uchar tipo, uchar ticks, uint d);Após a ocorrência do evento esperado, aApós a ocorrência do evento esperado, a

função pode retornar um dos seguintesfunção pode retornar um dos seguintes

valores:valores:

NOT_OKNOT_OK Parâmetro Parâmetro TipoTipo é inválido é inválido

SIG_EVENTSIG_EVENT Recepção de sinal Recepção de sinal

TMO_EVENTTMO_EVENT Acabou o tempo definido Acabou o tempo definido em em ticksticks

Page 10: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Primitivas DisponíveisPrimitivas Disponíveis

• char os_create_task (uchar task_id);• char os_delete_task (uchar task_id);• char os_wait (uchar tipo, uchar ticks, uint d);• char os_send_signal (uchar task_id);

1) Envia sinal à tarefa 1) Envia sinal à tarefa task_idtask_id. Se esta já estiver . Se esta já estiver esperando por um sinal, passará para o esperando por um sinal, passará para o estado estado readyready. Senão o sinal é armazenado no . Senão o sinal é armazenado no flag correspondente.flag correspondente.

2) Retorna 0 se OK, e -1 se 2) Retorna 0 se OK, e -1 se task_id task_id não existe.não existe.

3) Só pode ser usada a partir de rotinas comuns 3) Só pode ser usada a partir de rotinas comuns e não de rotinas de interrupção.e não de rotinas de interrupção.

Page 11: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Primitivas DisponíveisPrimitivas Disponíveis

• char os_create_task (uchar task_id);• char os_delete_task (uchar task_id);• char os_wait (uchar tipo, uchar ticks, uint d);• char os_send_signal (uchar task_id);• char os_clear_signal (uchar task_id);

1) Apaga o flag de sinal da tarefa 1) Apaga o flag de sinal da tarefa task_idtask_id..

2) Retorna 0 se OK, e -1 se 2) Retorna 0 se OK, e -1 se task_id task_id não existe.não existe.

Page 12: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Primitivas DisponíveisPrimitivas Disponíveis

• char os_create_task (uchar task_id);• char os_delete_task (uchar task_id);• char os_wait (uchar tipo, uchar ticks, uint d);• char os_send_signal (uchar task_id);• char os_clear_signal (uchar task_id);• char isr_send_signal (uchar task_id);

1) Envia sinal à tarefa 1) Envia sinal à tarefa task_idtask_id. Se esta já estiver . Se esta já estiver esperando por um sinal, passará para o esperando por um sinal, passará para o estado estado readyready. Senão o sinal é armazenado no . Senão o sinal é armazenado no flag correspondente.flag correspondente.

2) Retorna 0 se OK, e -1 se 2) Retorna 0 se OK, e -1 se task_id task_id não existe.não existe.

3) Só pode ser usada a partir de uma rotina de 3) Só pode ser usada a partir de uma rotina de interrupção.interrupção.

Page 13: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Primitivas DisponíveisPrimitivas Disponíveis

• char os_create_task (uchar task_id);• char os_delete_task (uchar task_id);• char os_wait (uchar tipo, uchar ticks, uint d);• char os_send_signal (uchar task_id);• char os_clear_signal (uchar task_id);• char isr_send_signal (uchar task_id);• char os_running_task_id (void);

1) Retorna o identificador da tarefa em 1) Retorna o identificador da tarefa em execução no momento.execução no momento.

2) Se for usada de uma rotina de interrupção, 2) Se for usada de uma rotina de interrupção, retorna o valor da tarefa que estava retorna o valor da tarefa que estava executando antes de haver a interrupção.executando antes de haver a interrupção.

Page 14: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Exemplo 1: ContadoresExemplo 1: Contadores#include <rtx51tny.h>#include <rtx51tny.h>int counter0; //counter for task 0int counter0; //counter for task 0int counter1; //counter for task 1int counter1; //counter for task 1int counter2; //counter for task 2int counter2; //counter for task 2

//RTX-51 tiny começa pela tarefa 0//RTX-51 tiny começa pela tarefa 0job0 () _task_ 0 {job0 () _task_ 0 { os_create_task (1); //start task 1os_create_task (1); //start task 1 os_create_task (2); //start task 2os_create_task (2); //start task 2 while (1)while (1) {counter0++;}{counter0++;}

}}

// Esta rotina não faz nada// Esta rotina não faz nadavoid main ()void main ()

{while (1);}{while (1);}

//Esta tarefa inicia em os_create_task(1)//Esta tarefa inicia em os_create_task(1)job1 () _task_ 1 {job1 () _task_ 1 {

while (1) while (1) {counter1++;}{counter1++;}

}}

//Esta tarefa inicia em os_create_task(2)//Esta tarefa inicia em os_create_task(2)job2 () _task_ 2 {job2 () _task_ 2 {

while (1) while (1) {counter2++;}{counter2++;}

}}

Page 15: Escalonador de Processos  de Tempo Real RTX Tiny

SVC GRECO

Exemplo 2: ComunicaçãoExemplo 2: Comunicação#include <rtx51tny.h>#include <rtx51tny.h>int counter0; //counter for task 0int counter0; //counter for task 0int counter1; //counter for task 1int counter1; //counter for task 1int counter2; //counter for task 2int counter2; //counter for task 2int counter3; //counter for task 3int counter3; //counter for task 3

//RTX-51 tiny começa pela tarefa 0//RTX-51 tiny começa pela tarefa 0

job0 () _task_ 0 {job0 () _task_ 0 {

os_create_task (1); // start task 1os_create_task (1); // start task 1

os_create_task (2); // start task 2os_create_task (2); // start task 2

os_create_task (3); // start task 3os_create_task (3); // start task 3

while (1) {while (1) {

counter0++;counter0++;

os_wait (K_TMO, 5, 0); //Esp.timeoutos_wait (K_TMO, 5, 0); //Esp.timeout

}}

}}

job1() _task_ 1 {job1() _task_ 1 {while (1) {while (1) { counter1++;counter1++;

os_wait (K_TMO, 10, 0); //Esp.timeoutos_wait (K_TMO, 10, 0); //Esp.timeout }}}}

job2() _task_ 2 {job2() _task_ 2 {while (1) {while (1) { counter2++;counter2++; if (counter2 == 0) if (counter2 == 0)

os_send_signal (3); //Envie para 3os_send_signal (3); //Envie para 3 }} }}

job3 () _task_ 3 {job3 () _task_ 3 {while (1) {while (1) { os_wait (K_SIG, 0, 0); //Espere sinalos_wait (K_SIG, 0, 0); //Espere sinal counter3++;counter3++; }}}}

//Esta rotina não faz nada//Esta rotina não faz nadavoid main ()void main () {while (1);}{while (1);}