Please enable JavaScript.
Coggle requires JavaScript to display documents.
Cap 11 : Mecanismos de coordenação - Coggle Diagram
Cap 11 : Mecanismos de coordenação
Semáforos
Variável composta s que contém um fila s.queue e um contador s.counter
Operações atômicas
down(s): decrementa o contador e o testa, se ele for negativo a tarefa solicitante é adicionada à fila do semáforo e suspensa. Caso contrário a tarefa pode continuar sua execução
up(s): incrementa o contador e o testa, se ele for negativo ao zero isso indica que há tarefas suspensas, de modo que a primeira tarefa da fila retoma sua execução. A tarefa solicitante não é bloqueada
init(s,v): contador recebe o valor v e a fila é alocada
Mecanismo de sincronização eficiente e flexível para controle de exclusão mútua
Solução adequada ao problema da seção crítica
Eficiência: tarefas que aguardam são suspensas e não consomem o processador
Justiça: tarefas recebem o semáforo na ordem de chegada
Independência: somente as tarefas que solicitaram o semáforo influenciam na decisão
POSIX: sem_init ; sem_post ; sem_wait ; sem_trywait
Mutexes
Versão simplificada do semáforo
Contador só assume valores 0 e 1
Mais rápidos que semáforos comuns
init: inicia o mutex
destroy: destrói o mutex
lock: solicita acesso à seção crítica e a bloqueia, se ele já estiver bloqueado então suspende a tarefa
unlock: libera acesso à seção crítica e desbloqueia o mutex
trylock: solicita acesso à região protegida pelo mutex, se ele estiver bloqueado retorna sem suspender a tarefa
Variáveis de condição
Operadores sobre variáveis de condição devem ser atômicos
A variável de condição não tem a condição propriamente dita, apenas permite esperar a condição e sinalizá-la
Operação broadcast sinaliza para todas as tarefas que aguardam a condição
Semântica de Hoare: a tarefa sinalizadora perde imediatamente o mutex após sinalizar ; indesejável em sistemas de uso geral
Usada em conjunto com um mutex para garantir a exclusão mútua sobre o estado da condição
Semântica Mesa: a operação signal apenas acorda uma tarefa, sem interromper a que sinalizou, cabe ao programador garantir que ela não irá modificar a variável
Uma variável de condiçao possui uma fila de tarefas que aguardam a condição
Tarefa é acordada quando outra tarefa perceber que a condição se tornou verdadeira e a notificar com signal(c)
Tarefa dormirá, aguardando a condição através da chamada wait(c)
Condição associada a uma variável c
Associada a uma condição que uma tarefa precisa aguardar para executar uma operação ; Ex: ler um buffer
Monitores
Ao usar semáforos ou mutexes um programador precisa identificar os pontos de sincronização
Essa abordagem se torna inviável e suscetível a erros em programas complexos
Monitor é uma estrutura de sincronização que requisita e libera o uso da seção crítica de forma transparente
Um monitor possui um recurso compartilhado, visto como um conjunto de variáveis internas
Um monitor possui um conjunto de procedimentos e funções que permitem o acesso a essas variáveis
Possui um mutex ou semáforo para controle
Possui um invariante sobre o estado interno do recurso
Encapsula o recurso compartilhado com métodos para acessá-lo
Synchronized Java
Operaçãoes de acesso e liberação são adicionadas automaticamente pelo compilador