SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
QUEUES E HOOK
FUNCTIONS
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
Conceito de FIFO ( First In First Out ) onde os
dados são escritos no fim e lidos no início.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
Queues são a principal forma de comunicação entre tarefas.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
Elas podem ser usadas para enviar mensagens entre tarefas
e entre interrupções e tarefas.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
Novos dados podem ser enviados para o fim da fila
ou ainda podem ser enviados para a frente.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
Uma fila não pertence a nenhuma tarefa em
específico.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
• Cada queue armazena um conjunto finito de itens
(uxLenght);
• Cada item do queue pode ter um tamanho fixo de bytes
(uxItemSize);
• Ambos “uxLenght” e “uxItemSize” são definidos no
momento da criação do queue;
• Escrever em uma queue significa copiar os dados byte a
byte. Ler de uma queue significa cópia e remoção dos
dados da queue. Se o elemento da queue for muito
grande, o ideal é trabalhar com ponteiros.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Pequenas mensagens podem ser enviadas diretamente para a queue
ou lidas diretamente da queue através de variáveis.
• O envio para uma queue deste modo permite substituir a variável que
foi enviado para a queue.
• Usar queues que passam dados por cópia não impede que elas
também possam ser utilizadas para transmitir dados por referência.
• Quando o tamanho de uma mensagem chegar a um ponto em que não
é prático copiar toda a mensagem para a queue byte a byte, então são
utilizados ponteiros. O ponteiro é copiado para o lugar da mensagem
na queue.
Introdução
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Uma única queue pode ser usada para receber diferentes tipos de
mensagens e mensagens de vários locais.
• Uma queue pode armazenar uma estrutura que tem um elemento que
contém o tipo de mensagem, e um outro elemento que contém os
dados da mensagem ou ainda um ponteiro para os dados da
mensagem.
• Os dados são interpretados depende do tipo de mensagem.
• Por exemplo, isto é exatamente o que a tarefa que gerencia a pilha
FreeRTOS + UDP IP é capaz de fazer.
• Usa única fila para receber notificações de eventos do timer ARP,
pacotes sendo recebidos do hardware Ethernet, os pacotes recebidos
do aplicativo, a rede para baixo eventos, etc
Introdução
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
As funções da API de queues permite um tempo de bloqueio que
pode ser especificado caso uma das duas situações ocorram:
• Lendo da Queue:
• A tarefa esta aguardando um item da queue. A tarefa será colocada
no estado Blocked até que os dados estejam disponíveis na fila ou
até o tempo de bloqueio expirar (timeout de leitura).
• Não consome tempo de CPU e outras tarefas podem ser executadas.
• Uma tarefa esperando um item na queue é automaticamente
colocada no estado Ready quando:
• Um item é escrito na queue;
• O timeout de leitura expira ;
Bloqueio de Queues
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Lendo da Queue:
• Queues podem ter mais de uma tarefa esperando a leitura de um
item;
• A tarefa de maior prioridade é passada para o estado Ready;
• Se existir mais uma tarefa com a mesma prioridade, então a tarefa
que esta esperando a mais tempo será passada para o estado
Ready.
Bloqueio de Queues
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Lendo do Queue:
Bloqueio de Queues
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Escrevendo na queue:
• A tarefa tenta escrever em uma queue cheia. A tarefa será colocada
no estado Blocked até que haja espaço disponível na fila ou até o
tempo de bloqueio expirar (timeout de escrita).
• Não consome tempo de CPU e outras tarefas podem ser executadas.
• Uma tarefa escrevendo um item na queue é colocada
automaticamente no estado Ready quando:
• O elemento é escrito na queue com sucesso;
• O timeout de escrita expira;
• Se a queue estiver cheia assim que surgir um espaço livre a tarefa
de maior prioridade é colocada no estado Ready;
• Se houver mais de uma tarefa bloqueada com a mesma prioridade
aguardando, a tarefa que estiver a mais tempo será passada para o
estado Ready..
Bloqueio de Queues
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Escrevendo no queue:
Bloqueio de Queues
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Normalmente os eventos são tratados com interrupções
dentro de uma rotina de tratamento de interrupção (ISR);
• Queues são usados para comunicar eventos e transferir
dados;
• Portanto, o queue pode ser usado para transferir dados e
deferir trabalho de uma interrupção para uma tarefa do
RTOS;
• Em interrupções use sempre as funções que terminam com
FromISR();
Interrupções
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueCreate
queue.h
QueueHandle_t xQueueCreate
(
BaseType_t uxQueueLength,
BaseType_t uxItemSize
);
Retorno:
Se a fila é criada com êxito, um identificador para a fila recém-criada é
retornado.
Se a fila não pode ser criada, é retornado 0.
Parâmetros:
• uxQueueLength: O número máximo de itens que a fila pode conter.
• uxItemSize: O número de bytes de cada item na fila vai exigir.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
vQueueDelete
queue.h
void vQueueDelete
{
QueueHandle_t xQueue
};
Parâmetros:
• xQueue - Um identificador para
a fila para ser excluído.
xQueueReset
queue.h
BaseType_t xQueueReset
(
QueueHandle_t xQueue
);
Parâmetros:
• xQueue : o identificador da fila é
passado,
Retorna:
Desde FreeRTOS V7.2.0 xQueueReset()
sempre retorna pdPASS.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
uxQueueSpacesAvailable
queue.h
BaseType_t uxQueueSpacesAvailable
(
QueueHandle_t xQueue
);
Parâmetros:
• xQueue : O identificador da fila para
ser consultado.
Retorna:
O número de espaços livres em uma
fila.
uxQueueMessagesWaiting
queue.h
BaseType_t uxQueueMessagesWaiting
(
QueueHandle_t xQueue
);
Parâmetros:
• xQueue : O identificador da fila para
ser consultado.
Retorna :
O número de mensagens disponíveis
na fila.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
vQueueAddToRegistry
queue.h
void vQueueAddToRegistry
(
QueueHandle_t xQueue,
char * pcQueueName
);
Parâmetros:
• xQueue: O identificador da fila em
que o item será escrito.
• pcQueueName: O nome a ser
atribuído à fila. Esta é apenas uma
sequência de texto usado para facilitar a
depuração.
vQueueUnregisterQueue
queue.h
vazio vQueueUnregisterQueue
(
QueueHandle_t xQueue
);
Parâmetros:
• xQueue: O identificador da fila
que será removida do registro.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueOverwrite
queue.h
BaseType_t xQueueOverwrite
(
QueueHandle_t xQueue,
const void * pvItemToQueue
);
Retorna:
xQueueOverwrite() é uma macro que chama xQueueGenericSend(), e,
portanto, tem os mesmos valores de retorno como
xQueueSendToFront(). No entanto, pdPASS é o único valor que pode ser
retornado porque xQueueOverwrite() escreve na fila, mesmo quando a fila
já esta cheia.
Parâmetros:
• xQueue: O identificador da fila em que o
item será escrito.
• pvItemToQueue: Um ponteiro para o
item que será colocado na fila.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueuePeek
queue.h
BaseType_t xQueuePeek
(
QueueHandle_t xQueue,
void * pvBuffer, TickType_
t xTicksToWait
);
Retorna:
pdTRUE se o item foi recebido com êxito na fila, caso contrário pdFALSE.
Parâmetros:
• xQueue: O identificador da fila em que o item será escrito.
• pvBuffer: Ponteiro para o buffer no qual o item recebido será copiado.
• xTicksToWait: A quantidade máxima de tempo que a tarefa deve bloquear à espera de
um item caso a fila esteja vazia no momento da chamada.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
uxQueueMessagesWaitingFromISR
queue.h
BaseType_t uxQueueMessagesWaiting
(
QueueHandle_t xQueue
);
Parâmetros:
• xQueue: Um identificador da fila que será consultada.
Retorna:
O número de mensagens armazenadas em uma fila.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueSendFromISR
queue.h
BaseType_t xQueueSendFromISR
(
QueueHandle_t xQueue,
const void * pvItemToQueue,
BaseType_t * pxHigherPriorityTaskWoken
);
Retorna:
pdTRUE se os dados foram enviados com sucesso para a fila, caso contrário
errQUEUE_FULL.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
Parâmetros:
• xQueue: O identificador da fila em que o item está a ser escrito.
• pvItemToQueue: Um ponteiro para o item que será colocado na fila. O tamanho dos
itens da fila já foram definidos quando a fila foi criada.
• pxHigherPriorityTaskWoken: xQueueSendFromISR() irá definir
*pxHigherPriorityTaskWoken para pdTRUE se enviar para a fila uma tarefa desbloqueada
e esta tarefa desbloqueada tiver uma prioridade maior do que a tarefa em execução. Se
xQueueSendFromISR() definir este valor para pdTRUE então uma mudança de contexto
deve ser solicitada antes da interrupção ser encerrada. No FreeRTOS V7.3.0
pxHigherPriorityTaskWoken é um parâmetro opcional e pode ser definido como NULL.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueSendToFrontFromISR
queue.h
BaseType_t xQueueSendToFrontFromISR
(
QueueHandle_t xQueue,
const void *pvItemToQueue,
BaseType_t *pxHigherPriorityTaskWoken
);
Retorno:
pdPass se os dados foram enviados com sucesso para a fila, senão
errQUEUE_FULL.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
Parâmetros:
• xQueue: O identificador da fila na qual o item deve ser publicado.
• pvItemToQueue: Um ponteiro para o item que será colocado na fila.
• pxHigherPriorityTaskWoken: xQueueSendToFrontFromISR() irá definir
*pxHigherPriorityTaskWoken para pdTRUE se enviar para a fila uma tarefa
desbloqueada e esta tarefa desbloqueada tiver uma prioridade maior do que a
tarefa em execução. Se xQueueSendFromISR() definir este valor para pdTRUE
então uma mudança de contexto deve ser solicitada antes da interrupção ser
encerrada. No FreeRTOS V7.3.0 pxHigherPriorityTaskWoken é um parâmetro
opcional e pode ser definido como NULL.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueReceiveFromISR
queue.h
BaseType_t xQueueReceiveFromISR
(
QueueHandle_t xQueue,
void *pvBuffer,
BaseType_t *pxHigherPriorityTaskWoken
);
Retorno:
pdTRUE se o item foi recebido com êxito na fila, senão pdFALSE.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
Parâmetros:
• xQueue: O identificador da fila para onde o item será enviado.
• pvBuffer: Ponteiro para o buffer no qual o item recebido será copiado
• pxHigherPriorityTaskWoken: Uma tarefa pode estar bloqueada esperando
pelo espaço disponível no âmbito da fila. Se xQueueReceiveFromISR provoca
tal tarefa para desbloquear *pxHigherPriorityTaskWoken irá ser definido para
pdTRUE, caso contrário *pxHigherPriorityTaskWoken permanecerá inalterado.
De FreeRTOS V7.3.0 pxHigherPriorityTaskWoken é um parâmetro opcional e
pode ser definido como NULL.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueIsQueueEmptyFromISR
queue.h
BaseType_t xQueueIsQueueEmptyFromISR
(
const QueueHandle_t xQueue
);
Parâmetros:
• xQueue: O indicador da fila que está sendo consultada
Retorno:
pdFALSE se a fila não estiver vazia, ou qualquer outro valor se a fila estiver vazia.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueIsQueueFullFromISR
queue.h
BaseType_t xQueueIsQueueFullFromISR
(
const QueueHandle_t xQueue
);
Parâmetros:
• xQueue: O identificador da fila que será consultada
Retorno:
pdFALSE se a fila não estiver cheia, ou qualquer outro valor se a fila estiver cheia.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueOverwriteFromISR
queue.h
BaseType_t xQueueOverwrite
(
QueueHandle_t xQueue,
const void *pvItemToQueue,
BaseType_t *pxHigherPriorityTaskWoken
);
Retorno:
xQueueOverwriteFromISR() é uma macro que chama
xQueueGenericSendFromISR(), e, portanto, tem os mesmos valores de retorno
como xQueueSendToFrontFromISR(). No entanto, pdPass é o único valor que
pode ser retornado porque xQueueOverwriteFromISR() vai escrever na fila, mesmo
quando a fila já estiver cheia.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
Parâmetros:
• xQueue: O identificador da fila para a qual os dados devem ser enviados.
• pvItemToQueue: Um ponteiro para o item que será colocado na fila.
• pxHigherPriorityTaskWoken: xQueueOverwriteFromISR() irá definir
*pxHigherPriorityTaskWoken para pdTRUE se enviar para a fila uma tarefa
desbloqueada e esta tarefa desbloqueada tiver uma prioridade maior do que a
tarefa em execução. Se xQueueOverwriteFromISR() definir este valor para
pdTRUE então uma mudança de contexto deve ser pedido antes da interrupção
ser encerrada.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Hook Functions
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Tick Interrupt
• Em um kernel preemptivo:
– Tarefas possuem um tempo para execução
– Time slice ou quantum
• No fim desta período de tempo:
– Escalonador selecionará a próxima tarefa para
execução.
• O kernel usa uma interrupção do sistema:
– tick interrupt (system tick ou clock tick).
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Tick interrupt (system tick ou clock tick)
– Interrupção periódica
– configTICK_RATE_HZ no arquivo FreeRTOSConfig.h
#define configUSE_PREEMPTION 1
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ ( SystemCoreClock )
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )
Tick Interrupt
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Tick Interrupt
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Uma função de callback pode ser chamada em
cada tick interrupt:
– executando uma rotina periódica, como zerar o
watchdog timer.
– Contexto de interrupção -> processamento o mais breve
possível.
• Habilitar opção:
– configUSE_TICK_HOOK
• Implemente a função:
– void vApplicationTickHook(void);
Tick Interrupt Hook
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Tarefa Idle
• Ao se trabalhar com eventos:
– as tarefas estão quase sempre no estado Blocked.
– e não podem ser escolhidas e executadas pelo
escalonador.
• Só que, a CPU precisará executar algo.
– a tarefa Idle
– criada automaticamente na inicialização do
escalonador
– ao chamar a função vTaskStartScheduler().
– tem prioridade 0.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Tarefas em Execução
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Idle Hook Function
• Função de callback chamada ao executar a tarefa
Idle.
– Executar um processamento contínuo em background.
– Medir a quantidade de processamento livre disponível.
– Colocar o processador em modo de baixo consumo.
• Habilitar a opção configUSE_IDLE_HOOK no
arquivo FreeRTOSConfig.h.
• Implementar a função:
void vApplicationIdleHook(void);
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Implementação
• A função de Idle Hook nunca deve bloquear ou suspender.
• Na tarefa Idle ocorre a limpeza das tarefas deletadas pela aplicação.
– se a aplicação usa a função vTaskDelete(),
– Então a função Idle Hook sempre deverá retornar.
void vApplicationIdleHook( void )
{
++u64IdleTicksCnt;
}
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Gerenciamento de Memória
• O FreeRTOS precisa alocar memória dinamicamente toda
vez que cria uma tarefa, um queue ou um semáforo.
• Quando o kernel precisa alocar memória, em vez de
chamar malloc() diretamente, o kernel chama
pvPortMalloc().
• Da mesma forma, para liberar memória, em vez de chamar
a função free(), o kernel chamará a função vPortFree().
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Alocação
• O FreeRTOS fornece 4 diferentes implementações para
alocação de memória:
• heap_1.c: apenas aloca memória.
• heap_2.c: aloca e desaloca memória, mas não trata fragmentação.
• heap_3.c: usa a implementação padrão de malloc() e free() da
biblioteca C.
• heap_4.c: disponível a partir da versão 7.2.0 do FreeRTOS. Aloca e
desaloca memória, trata fragmentação e é mais eficiente que a maioria
das implementações da biblioteca C padrão.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Malloc Failed Hook Function
• Os esquemas de alocação de memória implementados por
heap1.c, heap2.c, heap3.c e heap4 podem, opcionalmente,
incluir a função Malloc Failed Hook Function que pode ser
configurada para ser chamado se pvPortMalloc() retornar
NULL.
• Definir a função Malloc Failed Hook Function ajudará a
identificar os problemas causados pela falta de memória no
heap - especialmente quando falha uma chamada para
pvPortMalloc() dentro de uma função da aplicação.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Malloc Failed Hook Function
• A Malloc Failed Hook Function será chamada apenas se
configUSEMALLOCFAILEDHOOK estiver definida como 1
em FreeRTOSConfig.h.
• Quando isso é definido, a aplicação deve implementar o
método com a seguinte assinatura:
void vApplicationMallocFailedHook( void );
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Stack
• Região de memória onde são salvos as variáveis locais,
registradores e parâmetros nas chamadas de função.
• Na criação de uma tarefa, um stack de uso particular desta
tarefa, também é definido.
• Um mau dimensionamento do stack pode levar uma tarefa
a ultrapassar este espaço alocado (stack overflow).
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Stack Overflow Hook
• Dois mecanismos opcionais podem monitorar o stack das
tarefas em tempo de execução.
• O kernel irá monitorar o stack das tarefas, caso identifique
stack overflow, ele executará uma função de callback (stack
overflow hook).
• Tem como desvantagem o aumento do tempo na troca de
contexto.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Stack Overflow Hook
• Para ambos os métodos, a implementação da função de
callback de stack overflow é a seguinte:
void vApplicationStackOverflowHook
(xTaskHandle *pxTask, signed char *pcTaskName);
• Deve ser usada para:
– identificar e corrigir problemas de stack durante o desenvolvimento
da aplicação.
– Simplificar o debugging de problemas com o stack.
• Não existe nenhum jeito fácil de se recuperar de um stack
overflow.
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
MÉTODO 1
• É selecionado quando configuramos no arquivo FreeRTOSConfig.h:
configCHECK_FOR_STACK_OVERFLOW com 1.
• Após a troca de contexto de uma tarefa, o kernel verifica o stack
pointer do stack associada a esta tarefa. Caso esteja fora dos limites
será chamada a função de stack overflow hook.
• A desvantagem é que pode-se perder alguns stack overflows, já que
apenas verifica-se o stack pointer na troca de contexto, ou seja,
durante algum momento na execução da tarefa o stack pointer pode
ter ultrapassado os limites do stack.
Stack Overflow Hook
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Stack Overflow Hook
MÉTODO 2
• É selecionado quando configuramos no arquivo FreeRTOSConfig.h:
configCHECK_FOR_STACK_OVERFLOW com 2.
• Acrescenta mais uma checagem ao método 1.
• O stack é preenchido com um padrão conhecido, que terá seus últimos
20 bytes verificados. Caso tenham sido sobrescrito, a função de stack
overflow hook será chamada.
• Tem a desvantagem de ser mais lento do que o método 1 , em
contrapartida garante quase que 100% de acerto.

Mais conteúdo relacionado

Mais procurados

(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11Norton Trevisan Roman
 
Conceitos e técnicas de programação aula 5
Conceitos e técnicas de programação aula 5Conceitos e técnicas de programação aula 5
Conceitos e técnicas de programação aula 5Robson Ferreira
 
(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03Norton Trevisan Roman
 
(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22Norton Trevisan Roman
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialFabio Spanhol
 
(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12Norton Trevisan Roman
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07Norton Trevisan Roman
 

Mais procurados (9)

(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11(ACH2044) Sistemas Operacionais - Aula 11
(ACH2044) Sistemas Operacionais - Aula 11
 
Thread Java
Thread JavaThread Java
Thread Java
 
Conceitos e técnicas de programação aula 5
Conceitos e técnicas de programação aula 5Conceitos e técnicas de programação aula 5
Conceitos e técnicas de programação aula 5
 
(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03(ACH2044) Sistemas Operacionais - Aula 03
(ACH2044) Sistemas Operacionais - Aula 03
 
(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22(ACH2044) Sistemas Operacionais - Aula 22
(ACH2044) Sistemas Operacionais - Aula 22
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 
(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12(ACH2044) Sistemas Operacionais - Aula 12
(ACH2044) Sistemas Operacionais - Aula 12
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07(ACH2044) Sistemas Operacionais - Aula 07
(ACH2044) Sistemas Operacionais - Aula 07
 

Semelhante a Queues e funções de API em sistemas operacionais

Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 
XML-RPC: Tópicos Introdutórios
XML-RPC: Tópicos IntrodutóriosXML-RPC: Tópicos Introdutórios
XML-RPC: Tópicos IntrodutóriosFabio Spanhol
 
Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFutureHelder da Rocha
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonGiancarlo Silva
 
Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)Helder da Rocha
 
Gerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUGerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUAlexandre Duarte
 
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptAula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptssuserd654cb1
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreadingBianca Dantas
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestEdson Celio
 
Substituindo o request message no mule
Substituindo o request message no muleSubstituindo o request message no mule
Substituindo o request message no muleJeison Barros
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorFelipe Hummel
 
Pipeline Técnica de processadores.
Pipeline Técnica de processadores.Pipeline Técnica de processadores.
Pipeline Técnica de processadores.Cleber Ramos
 
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)Charles Fortes
 

Semelhante a Queues e funções de API em sistemas operacionais (20)

Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
XML-RPC: Tópicos Introdutórios
XML-RPC: Tópicos IntrodutóriosXML-RPC: Tópicos Introdutórios
XML-RPC: Tópicos Introdutórios
 
UPPAAL
UPPAALUPPAAL
UPPAAL
 
Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFuture
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)Utilitários para Programação Concorrente em Java (2005)
Utilitários para Programação Concorrente em Java (2005)
 
Gerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUGerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPU
 
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptAula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
 
Pesquisa ppi 2
Pesquisa ppi 2Pesquisa ppi 2
Pesquisa ppi 2
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Aula7ArquivosDB.ppt
Aula7ArquivosDB.pptAula7ArquivosDB.ppt
Aula7ArquivosDB.ppt
 
Python e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentestPython e Linux para a criação de ferramentas para pentest
Python e Linux para a criação de ferramentas para pentest
 
Substituindo o request message no mule
Substituindo o request message no muleSubstituindo o request message no mule
Substituindo o request message no mule
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Pipeline Técnica de processadores.
Pipeline Técnica de processadores.Pipeline Técnica de processadores.
Pipeline Técnica de processadores.
 
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
 
Aula 05 subprogramas
Aula 05   subprogramasAula 05   subprogramas
Aula 05 subprogramas
 
Java Básico :: Stream
Java Básico :: StreamJava Básico :: Stream
Java Básico :: Stream
 

Mais de Mayara Mônica

Pronouns and Verb To Be
Pronouns and Verb To BePronouns and Verb To Be
Pronouns and Verb To BeMayara Mônica
 
Aprendendo o Alfabeto em Inglês
Aprendendo o Alfabeto em InglêsAprendendo o Alfabeto em Inglês
Aprendendo o Alfabeto em InglêsMayara Mônica
 
Saúde e Nutrição - Fibras Alimentares
Saúde e Nutrição - Fibras AlimentaresSaúde e Nutrição - Fibras Alimentares
Saúde e Nutrição - Fibras AlimentaresMayara Mônica
 
Biofísica do Sistema Respiratório
Biofísica do Sistema RespiratórioBiofísica do Sistema Respiratório
Biofísica do Sistema RespiratórioMayara Mônica
 
Órgãos em Microchips
Órgãos em MicrochipsÓrgãos em Microchips
Órgãos em MicrochipsMayara Mônica
 
Escolas da Psicologia e Bases Biológicas do Comportamento
Escolas da Psicologia e Bases Biológicas do ComportamentoEscolas da Psicologia e Bases Biológicas do Comportamento
Escolas da Psicologia e Bases Biológicas do ComportamentoMayara Mônica
 
Bioquímica Articular, Articulações e Pele
Bioquímica Articular, Articulações e PeleBioquímica Articular, Articulações e Pele
Bioquímica Articular, Articulações e PeleMayara Mônica
 
Cartilha Educativa sobre Bioética
Cartilha Educativa sobre BioéticaCartilha Educativa sobre Bioética
Cartilha Educativa sobre BioéticaMayara Mônica
 
Estudo Sobre o Músculo Liso
Estudo Sobre o Músculo LisoEstudo Sobre o Músculo Liso
Estudo Sobre o Músculo LisoMayara Mônica
 
LZW - Compressão e Descompressão
LZW - Compressão e Descompressão LZW - Compressão e Descompressão
LZW - Compressão e Descompressão Mayara Mônica
 
Questionário Sobre Teste de Software
Questionário Sobre Teste de SoftwareQuestionário Sobre Teste de Software
Questionário Sobre Teste de SoftwareMayara Mônica
 
Questions About Software Testing
Questions About Software TestingQuestions About Software Testing
Questions About Software TestingMayara Mônica
 
Modelo de Interface para um Prontuário Eletrônico
Modelo de Interface para um Prontuário EletrônicoModelo de Interface para um Prontuário Eletrônico
Modelo de Interface para um Prontuário EletrônicoMayara Mônica
 
Chefia e Liderança / Processo Decisório
Chefia e Liderança / Processo DecisórioChefia e Liderança / Processo Decisório
Chefia e Liderança / Processo DecisórioMayara Mônica
 

Mais de Mayara Mônica (20)

Pronouns and Verb To Be
Pronouns and Verb To BePronouns and Verb To Be
Pronouns and Verb To Be
 
Aprendendo o Alfabeto em Inglês
Aprendendo o Alfabeto em InglêsAprendendo o Alfabeto em Inglês
Aprendendo o Alfabeto em Inglês
 
Saúde e Nutrição - Fibras Alimentares
Saúde e Nutrição - Fibras AlimentaresSaúde e Nutrição - Fibras Alimentares
Saúde e Nutrição - Fibras Alimentares
 
Biofísica do Sistema Respiratório
Biofísica do Sistema RespiratórioBiofísica do Sistema Respiratório
Biofísica do Sistema Respiratório
 
Tecnologias na Saúde
Tecnologias na SaúdeTecnologias na Saúde
Tecnologias na Saúde
 
Órgãos em Microchips
Órgãos em MicrochipsÓrgãos em Microchips
Órgãos em Microchips
 
Escolas da Psicologia e Bases Biológicas do Comportamento
Escolas da Psicologia e Bases Biológicas do ComportamentoEscolas da Psicologia e Bases Biológicas do Comportamento
Escolas da Psicologia e Bases Biológicas do Comportamento
 
Psicologia na Saúde
Psicologia na SaúdePsicologia na Saúde
Psicologia na Saúde
 
Movimento Body Art
Movimento Body ArtMovimento Body Art
Movimento Body Art
 
Bioquímica Articular, Articulações e Pele
Bioquímica Articular, Articulações e PeleBioquímica Articular, Articulações e Pele
Bioquímica Articular, Articulações e Pele
 
Cartilha Educativa sobre Bioética
Cartilha Educativa sobre BioéticaCartilha Educativa sobre Bioética
Cartilha Educativa sobre Bioética
 
Estudo Sobre o Músculo Liso
Estudo Sobre o Músculo LisoEstudo Sobre o Músculo Liso
Estudo Sobre o Músculo Liso
 
Tipologia Textual
Tipologia TextualTipologia Textual
Tipologia Textual
 
Comando Traceroute
Comando TracerouteComando Traceroute
Comando Traceroute
 
LZW - Compressão e Descompressão
LZW - Compressão e Descompressão LZW - Compressão e Descompressão
LZW - Compressão e Descompressão
 
MaDKit
MaDKitMaDKit
MaDKit
 
Questionário Sobre Teste de Software
Questionário Sobre Teste de SoftwareQuestionário Sobre Teste de Software
Questionário Sobre Teste de Software
 
Questions About Software Testing
Questions About Software TestingQuestions About Software Testing
Questions About Software Testing
 
Modelo de Interface para um Prontuário Eletrônico
Modelo de Interface para um Prontuário EletrônicoModelo de Interface para um Prontuário Eletrônico
Modelo de Interface para um Prontuário Eletrônico
 
Chefia e Liderança / Processo Decisório
Chefia e Liderança / Processo DecisórioChefia e Liderança / Processo Decisório
Chefia e Liderança / Processo Decisório
 

Último

Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
Aula 1, 2 Bacterias Características e Morfologia.pptx
Aula 1, 2  Bacterias Características e Morfologia.pptxAula 1, 2  Bacterias Características e Morfologia.pptx
Aula 1, 2 Bacterias Características e Morfologia.pptxpamelacastro71
 
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfO Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfPastor Robson Colaço
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasRosalina Simão Nunes
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISVitor Vieira Vasconcelos
 
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxAula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxBiancaNogueira42
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasCassio Meira Jr.
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.keislayyovera123
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfIedaGoethe
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxIsabellaGomes58
 

Último (20)

Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
Aula 1, 2 Bacterias Características e Morfologia.pptx
Aula 1, 2  Bacterias Características e Morfologia.pptxAula 1, 2  Bacterias Características e Morfologia.pptx
Aula 1, 2 Bacterias Características e Morfologia.pptx
 
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdfO Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
O Universo Cuckold - Compartilhando a Esposas Com Amigo.pdf
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGIS
 
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxAula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e Específicas
 
Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.Época Realista y la obra de Madame Bovary.
Época Realista y la obra de Madame Bovary.
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
 

Queues e funções de API em sistemas operacionais

  • 1. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS QUEUES E HOOK FUNCTIONS
  • 2. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução Conceito de FIFO ( First In First Out ) onde os dados são escritos no fim e lidos no início.
  • 3. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução Queues são a principal forma de comunicação entre tarefas.
  • 4. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução Elas podem ser usadas para enviar mensagens entre tarefas e entre interrupções e tarefas.
  • 5. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução Novos dados podem ser enviados para o fim da fila ou ainda podem ser enviados para a frente.
  • 6. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução Uma fila não pertence a nenhuma tarefa em específico.
  • 7. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução • Cada queue armazena um conjunto finito de itens (uxLenght); • Cada item do queue pode ter um tamanho fixo de bytes (uxItemSize); • Ambos “uxLenght” e “uxItemSize” são definidos no momento da criação do queue; • Escrever em uma queue significa copiar os dados byte a byte. Ler de uma queue significa cópia e remoção dos dados da queue. Se o elemento da queue for muito grande, o ideal é trabalhar com ponteiros.
  • 8. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Pequenas mensagens podem ser enviadas diretamente para a queue ou lidas diretamente da queue através de variáveis. • O envio para uma queue deste modo permite substituir a variável que foi enviado para a queue. • Usar queues que passam dados por cópia não impede que elas também possam ser utilizadas para transmitir dados por referência. • Quando o tamanho de uma mensagem chegar a um ponto em que não é prático copiar toda a mensagem para a queue byte a byte, então são utilizados ponteiros. O ponteiro é copiado para o lugar da mensagem na queue. Introdução
  • 9. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Uma única queue pode ser usada para receber diferentes tipos de mensagens e mensagens de vários locais. • Uma queue pode armazenar uma estrutura que tem um elemento que contém o tipo de mensagem, e um outro elemento que contém os dados da mensagem ou ainda um ponteiro para os dados da mensagem. • Os dados são interpretados depende do tipo de mensagem. • Por exemplo, isto é exatamente o que a tarefa que gerencia a pilha FreeRTOS + UDP IP é capaz de fazer. • Usa única fila para receber notificações de eventos do timer ARP, pacotes sendo recebidos do hardware Ethernet, os pacotes recebidos do aplicativo, a rede para baixo eventos, etc Introdução
  • 10. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS As funções da API de queues permite um tempo de bloqueio que pode ser especificado caso uma das duas situações ocorram: • Lendo da Queue: • A tarefa esta aguardando um item da queue. A tarefa será colocada no estado Blocked até que os dados estejam disponíveis na fila ou até o tempo de bloqueio expirar (timeout de leitura). • Não consome tempo de CPU e outras tarefas podem ser executadas. • Uma tarefa esperando um item na queue é automaticamente colocada no estado Ready quando: • Um item é escrito na queue; • O timeout de leitura expira ; Bloqueio de Queues
  • 11. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Lendo da Queue: • Queues podem ter mais de uma tarefa esperando a leitura de um item; • A tarefa de maior prioridade é passada para o estado Ready; • Se existir mais uma tarefa com a mesma prioridade, então a tarefa que esta esperando a mais tempo será passada para o estado Ready. Bloqueio de Queues
  • 12. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Lendo do Queue: Bloqueio de Queues
  • 13. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Escrevendo na queue: • A tarefa tenta escrever em uma queue cheia. A tarefa será colocada no estado Blocked até que haja espaço disponível na fila ou até o tempo de bloqueio expirar (timeout de escrita). • Não consome tempo de CPU e outras tarefas podem ser executadas. • Uma tarefa escrevendo um item na queue é colocada automaticamente no estado Ready quando: • O elemento é escrito na queue com sucesso; • O timeout de escrita expira; • Se a queue estiver cheia assim que surgir um espaço livre a tarefa de maior prioridade é colocada no estado Ready; • Se houver mais de uma tarefa bloqueada com a mesma prioridade aguardando, a tarefa que estiver a mais tempo será passada para o estado Ready.. Bloqueio de Queues
  • 14. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Escrevendo no queue: Bloqueio de Queues
  • 15. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Normalmente os eventos são tratados com interrupções dentro de uma rotina de tratamento de interrupção (ISR); • Queues são usados para comunicar eventos e transferir dados; • Portanto, o queue pode ser usado para transferir dados e deferir trabalho de uma interrupção para uma tarefa do RTOS; • Em interrupções use sempre as funções que terminam com FromISR(); Interrupções
  • 16. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions
  • 17. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueCreate queue.h QueueHandle_t xQueueCreate ( BaseType_t uxQueueLength, BaseType_t uxItemSize ); Retorno: Se a fila é criada com êxito, um identificador para a fila recém-criada é retornado. Se a fila não pode ser criada, é retornado 0. Parâmetros: • uxQueueLength: O número máximo de itens que a fila pode conter. • uxItemSize: O número de bytes de cada item na fila vai exigir.
  • 18. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions vQueueDelete queue.h void vQueueDelete { QueueHandle_t xQueue }; Parâmetros: • xQueue - Um identificador para a fila para ser excluído. xQueueReset queue.h BaseType_t xQueueReset ( QueueHandle_t xQueue ); Parâmetros: • xQueue : o identificador da fila é passado, Retorna: Desde FreeRTOS V7.2.0 xQueueReset() sempre retorna pdPASS.
  • 19. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions uxQueueSpacesAvailable queue.h BaseType_t uxQueueSpacesAvailable ( QueueHandle_t xQueue ); Parâmetros: • xQueue : O identificador da fila para ser consultado. Retorna: O número de espaços livres em uma fila. uxQueueMessagesWaiting queue.h BaseType_t uxQueueMessagesWaiting ( QueueHandle_t xQueue ); Parâmetros: • xQueue : O identificador da fila para ser consultado. Retorna : O número de mensagens disponíveis na fila.
  • 20. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions vQueueAddToRegistry queue.h void vQueueAddToRegistry ( QueueHandle_t xQueue, char * pcQueueName ); Parâmetros: • xQueue: O identificador da fila em que o item será escrito. • pcQueueName: O nome a ser atribuído à fila. Esta é apenas uma sequência de texto usado para facilitar a depuração. vQueueUnregisterQueue queue.h vazio vQueueUnregisterQueue ( QueueHandle_t xQueue ); Parâmetros: • xQueue: O identificador da fila que será removida do registro.
  • 21. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueOverwrite queue.h BaseType_t xQueueOverwrite ( QueueHandle_t xQueue, const void * pvItemToQueue ); Retorna: xQueueOverwrite() é uma macro que chama xQueueGenericSend(), e, portanto, tem os mesmos valores de retorno como xQueueSendToFront(). No entanto, pdPASS é o único valor que pode ser retornado porque xQueueOverwrite() escreve na fila, mesmo quando a fila já esta cheia. Parâmetros: • xQueue: O identificador da fila em que o item será escrito. • pvItemToQueue: Um ponteiro para o item que será colocado na fila.
  • 22. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueuePeek queue.h BaseType_t xQueuePeek ( QueueHandle_t xQueue, void * pvBuffer, TickType_ t xTicksToWait ); Retorna: pdTRUE se o item foi recebido com êxito na fila, caso contrário pdFALSE. Parâmetros: • xQueue: O identificador da fila em que o item será escrito. • pvBuffer: Ponteiro para o buffer no qual o item recebido será copiado. • xTicksToWait: A quantidade máxima de tempo que a tarefa deve bloquear à espera de um item caso a fila esteja vazia no momento da chamada.
  • 23. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions uxQueueMessagesWaitingFromISR queue.h BaseType_t uxQueueMessagesWaiting ( QueueHandle_t xQueue ); Parâmetros: • xQueue: Um identificador da fila que será consultada. Retorna: O número de mensagens armazenadas em uma fila.
  • 24. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueSendFromISR queue.h BaseType_t xQueueSendFromISR ( QueueHandle_t xQueue, const void * pvItemToQueue, BaseType_t * pxHigherPriorityTaskWoken ); Retorna: pdTRUE se os dados foram enviados com sucesso para a fila, caso contrário errQUEUE_FULL.
  • 25. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions Parâmetros: • xQueue: O identificador da fila em que o item está a ser escrito. • pvItemToQueue: Um ponteiro para o item que será colocado na fila. O tamanho dos itens da fila já foram definidos quando a fila foi criada. • pxHigherPriorityTaskWoken: xQueueSendFromISR() irá definir *pxHigherPriorityTaskWoken para pdTRUE se enviar para a fila uma tarefa desbloqueada e esta tarefa desbloqueada tiver uma prioridade maior do que a tarefa em execução. Se xQueueSendFromISR() definir este valor para pdTRUE então uma mudança de contexto deve ser solicitada antes da interrupção ser encerrada. No FreeRTOS V7.3.0 pxHigherPriorityTaskWoken é um parâmetro opcional e pode ser definido como NULL.
  • 26. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueSendToFrontFromISR queue.h BaseType_t xQueueSendToFrontFromISR ( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t *pxHigherPriorityTaskWoken ); Retorno: pdPass se os dados foram enviados com sucesso para a fila, senão errQUEUE_FULL.
  • 27. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions Parâmetros: • xQueue: O identificador da fila na qual o item deve ser publicado. • pvItemToQueue: Um ponteiro para o item que será colocado na fila. • pxHigherPriorityTaskWoken: xQueueSendToFrontFromISR() irá definir *pxHigherPriorityTaskWoken para pdTRUE se enviar para a fila uma tarefa desbloqueada e esta tarefa desbloqueada tiver uma prioridade maior do que a tarefa em execução. Se xQueueSendFromISR() definir este valor para pdTRUE então uma mudança de contexto deve ser solicitada antes da interrupção ser encerrada. No FreeRTOS V7.3.0 pxHigherPriorityTaskWoken é um parâmetro opcional e pode ser definido como NULL.
  • 28. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueReceiveFromISR queue.h BaseType_t xQueueReceiveFromISR ( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxHigherPriorityTaskWoken ); Retorno: pdTRUE se o item foi recebido com êxito na fila, senão pdFALSE.
  • 29. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions Parâmetros: • xQueue: O identificador da fila para onde o item será enviado. • pvBuffer: Ponteiro para o buffer no qual o item recebido será copiado • pxHigherPriorityTaskWoken: Uma tarefa pode estar bloqueada esperando pelo espaço disponível no âmbito da fila. Se xQueueReceiveFromISR provoca tal tarefa para desbloquear *pxHigherPriorityTaskWoken irá ser definido para pdTRUE, caso contrário *pxHigherPriorityTaskWoken permanecerá inalterado. De FreeRTOS V7.3.0 pxHigherPriorityTaskWoken é um parâmetro opcional e pode ser definido como NULL.
  • 30. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueIsQueueEmptyFromISR queue.h BaseType_t xQueueIsQueueEmptyFromISR ( const QueueHandle_t xQueue ); Parâmetros: • xQueue: O indicador da fila que está sendo consultada Retorno: pdFALSE se a fila não estiver vazia, ou qualquer outro valor se a fila estiver vazia.
  • 31. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueIsQueueFullFromISR queue.h BaseType_t xQueueIsQueueFullFromISR ( const QueueHandle_t xQueue ); Parâmetros: • xQueue: O identificador da fila que será consultada Retorno: pdFALSE se a fila não estiver cheia, ou qualquer outro valor se a fila estiver cheia.
  • 32. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueOverwriteFromISR queue.h BaseType_t xQueueOverwrite ( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t *pxHigherPriorityTaskWoken ); Retorno: xQueueOverwriteFromISR() é uma macro que chama xQueueGenericSendFromISR(), e, portanto, tem os mesmos valores de retorno como xQueueSendToFrontFromISR(). No entanto, pdPass é o único valor que pode ser retornado porque xQueueOverwriteFromISR() vai escrever na fila, mesmo quando a fila já estiver cheia.
  • 33. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions Parâmetros: • xQueue: O identificador da fila para a qual os dados devem ser enviados. • pvItemToQueue: Um ponteiro para o item que será colocado na fila. • pxHigherPriorityTaskWoken: xQueueOverwriteFromISR() irá definir *pxHigherPriorityTaskWoken para pdTRUE se enviar para a fila uma tarefa desbloqueada e esta tarefa desbloqueada tiver uma prioridade maior do que a tarefa em execução. Se xQueueOverwriteFromISR() definir este valor para pdTRUE então uma mudança de contexto deve ser pedido antes da interrupção ser encerrada.
  • 34. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Hook Functions
  • 35. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Tick Interrupt • Em um kernel preemptivo: – Tarefas possuem um tempo para execução – Time slice ou quantum • No fim desta período de tempo: – Escalonador selecionará a próxima tarefa para execução. • O kernel usa uma interrupção do sistema: – tick interrupt (system tick ou clock tick).
  • 36. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Tick interrupt (system tick ou clock tick) – Interrupção periódica – configTICK_RATE_HZ no arquivo FreeRTOSConfig.h #define configUSE_PREEMPTION 1 #define configUSE_IDLE_HOOK 0 #define configUSE_TICK_HOOK 0 #define configCPU_CLOCK_HZ ( SystemCoreClock ) #define configTICK_RATE_HZ ( ( portTickType ) 1000 ) Tick Interrupt
  • 37. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Tick Interrupt
  • 38. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Uma função de callback pode ser chamada em cada tick interrupt: – executando uma rotina periódica, como zerar o watchdog timer. – Contexto de interrupção -> processamento o mais breve possível. • Habilitar opção: – configUSE_TICK_HOOK • Implemente a função: – void vApplicationTickHook(void); Tick Interrupt Hook
  • 39. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Tarefa Idle • Ao se trabalhar com eventos: – as tarefas estão quase sempre no estado Blocked. – e não podem ser escolhidas e executadas pelo escalonador. • Só que, a CPU precisará executar algo. – a tarefa Idle – criada automaticamente na inicialização do escalonador – ao chamar a função vTaskStartScheduler(). – tem prioridade 0.
  • 40. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Tarefas em Execução
  • 41. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Idle Hook Function • Função de callback chamada ao executar a tarefa Idle. – Executar um processamento contínuo em background. – Medir a quantidade de processamento livre disponível. – Colocar o processador em modo de baixo consumo. • Habilitar a opção configUSE_IDLE_HOOK no arquivo FreeRTOSConfig.h. • Implementar a função: void vApplicationIdleHook(void);
  • 42. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Implementação • A função de Idle Hook nunca deve bloquear ou suspender. • Na tarefa Idle ocorre a limpeza das tarefas deletadas pela aplicação. – se a aplicação usa a função vTaskDelete(), – Então a função Idle Hook sempre deverá retornar. void vApplicationIdleHook( void ) { ++u64IdleTicksCnt; }
  • 43. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Gerenciamento de Memória • O FreeRTOS precisa alocar memória dinamicamente toda vez que cria uma tarefa, um queue ou um semáforo. • Quando o kernel precisa alocar memória, em vez de chamar malloc() diretamente, o kernel chama pvPortMalloc(). • Da mesma forma, para liberar memória, em vez de chamar a função free(), o kernel chamará a função vPortFree().
  • 44. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Alocação • O FreeRTOS fornece 4 diferentes implementações para alocação de memória: • heap_1.c: apenas aloca memória. • heap_2.c: aloca e desaloca memória, mas não trata fragmentação. • heap_3.c: usa a implementação padrão de malloc() e free() da biblioteca C. • heap_4.c: disponível a partir da versão 7.2.0 do FreeRTOS. Aloca e desaloca memória, trata fragmentação e é mais eficiente que a maioria das implementações da biblioteca C padrão.
  • 45. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Malloc Failed Hook Function • Os esquemas de alocação de memória implementados por heap1.c, heap2.c, heap3.c e heap4 podem, opcionalmente, incluir a função Malloc Failed Hook Function que pode ser configurada para ser chamado se pvPortMalloc() retornar NULL. • Definir a função Malloc Failed Hook Function ajudará a identificar os problemas causados pela falta de memória no heap - especialmente quando falha uma chamada para pvPortMalloc() dentro de uma função da aplicação.
  • 46. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Malloc Failed Hook Function • A Malloc Failed Hook Function será chamada apenas se configUSEMALLOCFAILEDHOOK estiver definida como 1 em FreeRTOSConfig.h. • Quando isso é definido, a aplicação deve implementar o método com a seguinte assinatura: void vApplicationMallocFailedHook( void );
  • 47. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Stack • Região de memória onde são salvos as variáveis locais, registradores e parâmetros nas chamadas de função. • Na criação de uma tarefa, um stack de uso particular desta tarefa, também é definido. • Um mau dimensionamento do stack pode levar uma tarefa a ultrapassar este espaço alocado (stack overflow).
  • 48. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Stack Overflow Hook • Dois mecanismos opcionais podem monitorar o stack das tarefas em tempo de execução. • O kernel irá monitorar o stack das tarefas, caso identifique stack overflow, ele executará uma função de callback (stack overflow hook). • Tem como desvantagem o aumento do tempo na troca de contexto.
  • 49. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Stack Overflow Hook • Para ambos os métodos, a implementação da função de callback de stack overflow é a seguinte: void vApplicationStackOverflowHook (xTaskHandle *pxTask, signed char *pcTaskName); • Deve ser usada para: – identificar e corrigir problemas de stack durante o desenvolvimento da aplicação. – Simplificar o debugging de problemas com o stack. • Não existe nenhum jeito fácil de se recuperar de um stack overflow.
  • 50. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS MÉTODO 1 • É selecionado quando configuramos no arquivo FreeRTOSConfig.h: configCHECK_FOR_STACK_OVERFLOW com 1. • Após a troca de contexto de uma tarefa, o kernel verifica o stack pointer do stack associada a esta tarefa. Caso esteja fora dos limites será chamada a função de stack overflow hook. • A desvantagem é que pode-se perder alguns stack overflows, já que apenas verifica-se o stack pointer na troca de contexto, ou seja, durante algum momento na execução da tarefa o stack pointer pode ter ultrapassado os limites do stack. Stack Overflow Hook
  • 51. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Stack Overflow Hook MÉTODO 2 • É selecionado quando configuramos no arquivo FreeRTOSConfig.h: configCHECK_FOR_STACK_OVERFLOW com 2. • Acrescenta mais uma checagem ao método 1. • O stack é preenchido com um padrão conhecido, que terá seus últimos 20 bytes verificados. Caso tenham sido sobrescrito, a função de stack overflow hook será chamada. • Tem a desvantagem de ser mais lento do que o método 1 , em contrapartida garante quase que 100% de acerto.