Aula 11 - RTOS - Sincronização e comunicação-3-21-23.pdf
Document Details
Uploaded by SelfDeterminationOmaha
ITA
Tags
Full Transcript
EEA-27 Microcontroladores e Sistemas Embarcados Aula 11 - RTOS - Sincronização e comunicação Prof. Dr. Harlei M. A. Leite Aeronautics Institute of Technology - ITA Electronic Engineering Division Department of Applied Electronics Conteúdo 1. Comunicação inter-task 2. Semaphores 3. Fila de m...
EEA-27 Microcontroladores e Sistemas Embarcados Aula 11 - RTOS - Sincronização e comunicação Prof. Dr. Harlei M. A. Leite Aeronautics Institute of Technology - ITA Electronic Engineering Division Department of Applied Electronics Conteúdo 1. Comunicação inter-task 2. Semaphores 3. Fila de mensagens (Message Queues) 4. Modelando um sistema 5. Leitura 6. Referências Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Comunicação inter-task Introdução A sincronização entre tarefas e a comunicação entre elas ocorre por meio de primitivas inter-task, que são kernel objects que facilitam o processo. Exemplos de primitivas inter-task: ○ semaphores; ○ message queues; ○ signals; ○ pipes; ○ mutex; ○ outros. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Introdução Em um sistema multitarefa, as tarefas competem por recursos uma com as outras. Elas devem se sincronizar para compartilhar recursos do sistema, que pode ser um periférico. Para facilitar o sincronismo, RTOS fornece um objeto chamado semaphore, juntamente com seus serviços de gerenciamento. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Definição Um semaphore (algumas vezes chamado de token semaphore), é um kernel object onde uma ou mais threads de execução podem adquirir ou liberar para o propósito de sincronização. Quando um semaphore é criado pela primeira vez, o kernel atribui a ele um semaphore-control block, um ID único, um valor (binário ou count) e uma lista de espera de tarefas. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Definição Os semaphores contam com duas operações básicas: ○ Pega (take) o semáforo para uso; ○ Libera (give) para outra tarefa. Take ○ Se o semaphore tiver o valor >= 1, a tarefa poderá obtê-lo. Ao obter o semaphore, o valor dele é decrementado em 1. Give ○ Após o fim do processamento da task, o semaphore deve ser liberado para outras tarefas o utilizarem. Ao liberar o semaphore, o valor dele é incrementado em 1. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Definição Principais tipos de semaphores: ○ Binary; ○ Counter; ○ Mutual Exclusion (Mutex) Semaphores. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Binary Um semaphore binário pode ter o valor “0” ou “1”. ○ Quando o valor é “0”, o semaphore é considerado indisponível (empty); ○ Quando o valor é “1”, o semaphore é considerado disponível (full). Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Binary Binary semaphores são tratados como recursos globais, ou seja, são acessíveis a todas as tasks do sistema. Isso implica que qualquer tarefa pode interagir com esse semaphore, seja para adquiri-lo (se disponível) ou liberá-lo. Mesmo se uma tarefa não tiver adquirido o semaphore previamente, ela ainda pode liberá-lo se tiver permissão para isso. É importante considerar esse aspecto ao projetar sistemas para garantir que as interações entre tarefas utilizando semaphores globais sejam controladas de forma apropriada, evitando problemas de concorrência e garantindo a consistência e integridade dos dados. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Binary Exemplo de uso: UART Compartilhado Pseudocódigo ○ Imagine um sistema onde várias tarefas precisam enviar dados através de uma interface UART. ○ Para evitar que as mensagens sejam corrompidas por acessos simultâneos, um binary semaphore pode ser utilizado. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Counting Counting semaphores utiliza uma contagem para permitir que ele seja adquirido ou liberado múltiplas vezes. Ao criar um counting semaphore, é atribuído a ele uma contagem que representa o número de tokens do semáforo inicialmente. ○ Se a contagem inicial for 0, o counting semaphore é criado no estado indisponível. ○ Se a contagem for maior que 0, o counting semaphore é criado no estado disponível, e o número de tokens que ele possui é igual à sua contagem. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Counting Uma ou mais tasks podem continuar a adquirir um token do counting semaphore até que não haja mais tokens disponíveis. Quando todos os tokens acabam, a contagem é igual a 0, e o counting semaphore passa do estado disponível para o estado indisponível. Para retornar do estado indisponível para o estado disponível, um token do semáforo deve ser liberado por qualquer tarefa. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Counting Exemplo de uso: Pool de conexões. ○ Imagine que sua aplicação precise fazer acesso a um banco de dados; ○ Você precisa controlar o número de conexões simultâneas; ○ O counting semaphore serviria para contar o número de conexões ativas. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Mutual Exclusion (Mutex) Semaphores Mutex é um binary semaphore especial que oferece suporte a: ○ Ownership (propriedade); ○ Recursive Locking (acesso recursivo); Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Mutual Exclusion (Mutex) Semaphores Ao contrário dos estados disponível e indisponível em binary semaphores e counting semaphores, os estados de um mutex são desbloqueado ou bloqueado (0 ou 1, respectivamente). Um mutex é criado inicialmente no estado desbloqueado, no qual pode ser adquirido por uma tarefa. Após ser adquirido, o mutex passa para o estado bloqueado. Por outro lado, quando a tarefa libera o mutex, ele retorna ao estado desbloqueado. Observe que alguns kernels podem usar os termos "lock" e "unlock" para um mutex em vez de "acquire" e "release". Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Mutual Exclusion (Mutex) Semaphores Mutex Ownership ○ É uma propriedade adquirida quando uma tarefa trava o mutex ao adquiri-lo. ○ Quando uma tarefa possui o mutex, não é possível para nenhuma outra tarefa travar ou destravar esse mutex. ○ Essa propriedade diferencia o mutex do binary semaphore, que pode ser liberado por qualquer tarefa, mesmo uma tarefa que não o tenha adquirido originalmente. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Semaphores Mutual Exclusion (Mutex) Semaphores Recursive Locking ○ Útil quando uma tarefa que exige acesso exclusivo a um recurso compartilhado chama uma ou mais rotinas que também exigem acesso ao mesmo recurso. ○ Um mutex recursivo permite que tentativas aninhadas de travar o mutex tenham sucesso, em vez de causar um impasse (deadlock), que é uma condição na qual duas ou mais tarefas estão bloqueadas e aguardam recursos bloqueados mutuamente. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Fila de mensagens (Message Queues) Definição Message queues são mecanismos de comunicação e sincronização entre tarefas. Elas permitem que tarefas enviem e recebam mensagens de maneira organizada e segura, facilitando a coordenação e o intercâmbio de dado entre diferentes partes de um sistema multitarefa. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Fila de mensagens (Message Queues) Funcionamento Uma message queue é uma estrutura de dados que armazena mensagens em uma ordem específica, geralmente em uma fila FIFO (First In, First Out). As tarefas podem adicionar mensagens ao final da fila e remover mensagens do início da fila. Isso permite a comunicação assíncrona, onde a tarefa que envia uma mensagem não precisa esperar que a tarefa destinatária processe a mensagem imediatamente. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Fila de mensagens (Message Queues) Estrutura da Message Queue Uma message queue normalmente é composta por: ○ Buffer de mensagens: Armazena as mensagens a serem trocadas entre as tarefas; ○ Cabeçalho da fila: Contém informações sobre o estado da fila, como o número de mensagens, o tamanho máximo da fila e ponteiros para o início e o fim da fila; ○ Fila de espera: Listas de tarefas que estão esperando para enviar ou receber mensagens. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Fila de mensagens (Message Queues) Funcionamento Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados Modelando um sistema Heurística para projetar um sistema 1. Identificar todos os objetos ativos com comportamento reativo. 2. Atribuir responsabilidades e recursos aos objetos. 3. Identificar eventos do sistema. 4. Utilizar diagramas de classe e de sequência. 5. Implementar uma máquina de estados para cada objeto. Cada objeto ativo se tornará uma tarefa no sistema. Prof. Dr. Harlei M. A. Leite (ITA) - EEA-27 Microcontroladores e Sistemas Embarcados