SVC  GRECO Escalonador de Processos de Tempo Real RTX Tiny.

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Sistemas Operacionais
E/S Síncrona x E/S Assíncrona no sistema Unix
Capitulo 6: Entrada e Saída
Recursividade Função recursiva é aquela que chama a si própria.
Medição do desempenho Computacional
Algoritmo e Programação
Técnicas para operações E/S
Profa. Priscila Facciolli
Processos no Unix e Linux
Escalonamento Linux.
Algoritmos e Estrutura de Dados I
Arquitetura de Sistemas Operacionais
Sincronização com Posix Threads
Sistemas Operacionais
Ivan Saraiva Silva Sistemas de Tempo Real Embutidos
Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação SSC SISTEMAS OPERACIONAIS I Aulas.
Programação Concorrente
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Processos Conceitos Básicos.
Estruturas de Controle
Listas Encadeadas.
Revisão da Linguagem C.
Sistemas Operacionais Adriana Vettorazzo
Concorrência em Java Threads em Java.
Unidade 1-1 Processos e Threads
Sistemas Operacionais
Sistemas Operacionais
Erivelto TSchoeke 1/12. Cenário Definição de tarefas Processamento em sistemas mono-tarefas Sistemas multi-tarefas Sistemas multi-tarefas com time-sharing.
Manipulação de Arquivos em C
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Tópicos em redes e sistemas distribuídos Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Qual o melhor sabor para o RT-Linux (Real Time Linux)? Ricardo Matias Nº27471 e Vitor Hugo Nº21906 Sistemas de Tempo Real 2006 DETI-UA.
Processo Entidade dinâmica e efêmera
Sistemas Operacionais Profª Adriana Vettorazzo
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Escalonamento de Tempo Real
Técnicas de Desenvolvimento de Programas
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
SISTEMAS OPERACIONAIS I
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
Computação L1: Infra-Estrutura Básica
Capítulo VIII Ambientes de Execução
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Escalonamento com prioridades
Sistemas Operacionais
Programação com Threads
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta.
Conceitos de thread Faculdade PITÁGORAS – Outubro de 2012
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
S ISTEMAS OPERACIONAIS PROCESSOS Horácio Ribeiro.
8088 Assembly Software Básico Mitsuo Takaki.
Multiprocessamento Sérgio Cavalcante CIn GRECO - CIn / UFPE.
Capítulo 4: Processos.
©André Santos, Concorrência: Sincronização de fina granularidade II André Santos CIn-UFPE.
SISTEMAS OPERACIONAIS
Engenharia de Sistemas Embarcados Aula 9: Salvo RTOS.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Engenharia de Sistemas Embarcados Aula 5: Técnicas Especiais de Software.
Bruno Affonso Diego Chiquito Ruan Berté.   O código de Escalonamento no Windows é implementado no Kernel.  A rotina que desempenha as tarefas do Escalonador.
Redes e Sistemas Distribuídos II – Cód Prof. MSc. Ronnison Reges Vidal.
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Anderson Braga de Avila 1.  Usar todos os recursos computacionais no sistema — CPUs, GPUs e outros processadores  Modelo de programação paralela eficiente.
Arleys Pereira Nunes de Castro - Mestrando : Modelagem computacional (SENAI-MCTI) Especialista : Sistema distribuídos
ProgramaçãoConcorrente Glêdson Elias
Transcrição da apresentação:

SVC  GRECO Escalonador de Processos de Tempo Real RTX Tiny

SVC  GRECO Necessidade Manipulação de processos Definição de ordem de execução Tratamento de eventos / interrupções Sincronização / comunicação Time-slicing

SVC  GRECO RTX 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

SVC  GRECO RTX 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).

SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); 1) Inicializa e põe a tarefa task_id na fila de processos no estado ready. 2) Retorna 0 se OK, e -1 se task_id não existe ou não pode ser inicializada.

SVC  GRECO Primitivas Disponíveis char os_create_task (uchar task_id); char os_delete_task (uchar task_id); 1) Pára a tarefa task_id e remove da fila de processos. 2) Retorna 0 se OK, e -1 se task_id não existe ou não estava na fila de processos.

SVC  GRECO Primitivas 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 definido em tipo. 2) O parâmetro d não é usado e é mantido apenas por compatibilidade com a versão completa do RTX Comercial.

SVC  GRECO Primitivas 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 tipo pode ter os seguintes valores: K_SIG  Espere por um sinal K_TMO  Espere por timeout K_IVL  Espere por tempo 2) Estes valores podem ser combinados. Ex: (K_SIG | K_TMO), espera um sinal pelo tempo definido em ticks. 3) O parâmetro ticks define o número de pulsos do timer que devem ser esperados caso K_IVL ou K_TMO sejam usados.

SVC  GRECO Primitivas 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, a função pode retornar um dos seguintes valores: NOT_OK  Parâmetro Tipo é inválido SIG_EVENT  Recepção de sinal TMO_EVENT  Acabou o tempo definido em ticks

SVC  GRECO Primitivas 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 task_id. Se esta já estiver esperando por um sinal, passará para o estado ready. Senão o sinal é armazenado no flag correspondente. 2) Retorna 0 se OK, e -1 se task_id não existe. 3) Só pode ser usada a partir de rotinas comuns e não de rotinas de interrupção.

SVC  GRECO Primitivas 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 task_id. 2) Retorna 0 se OK, e -1 se task_id não existe.

SVC  GRECO Primitivas 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 task_id. Se esta já estiver esperando por um sinal, passará para o estado ready. Senão o sinal é armazenado no flag correspondente. 2) Retorna 0 se OK, e -1 se task_id não existe. 3) Só pode ser usada a partir de uma rotina de interrupção.

SVC  GRECO Primitivas 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 execução no momento. 2) Se for usada de uma rotina de interrupção, retorna o valor da tarefa que estava executando antes de haver a interrupção.

SVC  GRECO Exemplo 1: Contadores #include #include int counter0; //counter for task 0 int counter1; //counter for task 1 int counter2; //counter for task 2 //RTX-51 tiny começa pela tarefa 0 job0 () _task_ 0 { os_create_task (1); //start task 1 os_create_task (1); //start task 1 os_create_task (2); //start task 2 os_create_task (2); //start task 2 while (1) while (1) {counter0++;} } {counter0++;} } // Esta rotina não faz nada void main () {while (1);} //Esta tarefa inicia em os_create_task(1) job1 () _task_ 1 { while (1) {counter1++;} } //Esta tarefa inicia em os_create_task(2) job2 () _task_ 2 { while (1) {counter2++;} }

SVC  GRECO Exemplo 2: Comunicação #include #include int counter0; //counter for task 0 int counter1; //counter for task 1 int counter2; //counter for task 2 int counter3; //counter for task 3 //RTX-51 tiny começa pela tarefa 0 job0 () _task_ 0 { os_create_task (1); // start task 1 os_create_task (1); // start task 1 os_create_task (2); // start task 2 os_create_task (2); // start task 2 os_create_task (3); // start task 3 os_create_task (3); // start task 3 while (1) { counter0++; counter0++; os_wait (K_TMO, 5, 0); //Esp.timeout os_wait (K_TMO, 5, 0); //Esp.timeout }} job1() _task_ 1 { while (1) { counter1++; counter1++; os_wait (K_TMO, 10, 0); //Esp.timeout os_wait (K_TMO, 10, 0); //Esp.timeout } } } } job2() _task_ 2 { while (1) { counter2++; if (counter2 == 0) counter2++; if (counter2 == 0) os_send_signal (3); //Envie para 3 os_send_signal (3); //Envie para 3 } } } job3 () _task_ 3 { while (1) { os_wait (K_SIG, 0, 0); //Espere sinal os_wait (K_SIG, 0, 0); //Espere sinal counter3++; counter3++; }} //Esta rotina não faz nada void main () {while (1);} {while (1);}