Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sincronismo de Processos e Threads - Coggle Diagram
Sincronismo de Processos e Threads
Antecedentes
O Problema do Produtor/Consumidor
Condição de Corrida (Race Condition)
Vários processos acessam e manipulam os mesmos dados
Resultado depende da ordem que ocorre o acesso
Um processo produtor produz informações
Consumidas por um processo consumidor
Sincronização para nao consumir fora do buffer
Região de memória compartilhada (um buffer)
Soluções para o Problema da Seção Crítica
Soluções de Hardware
Inibição de Interrupções
Não viável em processadores multicore
Usa um par de instruções do tipo DI / EI
Por longo período pode ter consequência danosas
Instrução TSL
TSL = “Test and Set Lock”
Bloqueia o barramento de memória
Executada de forma atômica
Espera ocupada (busy wait)
Possibilidade de postergação infinita (starvation)
Simplicidade de uso
Soluções de Software com Busy Wait
Algoritmo de Peterson
Solução para o problema da exclusão mútua
Ao marcar a sua intenção de entrar
Processo indica que a vez é do outro
Soluções de Software com Bloqueio
Primitivas Sleep/Wakeup
sleep()
Bloqueia o processo e espera por uma sinalização
wakeup()
Sinaliza (acorda) o processo
Semáforos
Não exige espera ocupada
Menos complicado
Semáforos binários ou mutex
Assume os valores 0 ou 1
Operações - lock(mutex) e unlock(mutex)
Problema do Pombo Correio
Deadlock
Processos estão esperando indefinidamente por um evento
Starvation
lock indefinido
Monitores
Mais fáceis de serem usadas
Eliminam os casos de deadlock
Tornar obrigatória a exclusão mútua
Somente um processo pode estar ativo dentro do monitor
Um bloco que contém internamente dados
Não há perda de tempo com processamento inútil
(spinlock)
Não há espera ocupada (busy wait)
Problemas Clássicos de Sincronismo
Problema dos Leitores e Escritores
Os leitores podem ter acesso simultâneo
Os escritores podem ter acesso exclusivo
Problema: Possível starvation dos escritores
Problema dos Filósofos Glutões
Tarefa de acordar interessados em comer
É de quem terminou de comer
Mesa circular
Introdução
Processo cooperativo
Pode afetar ou ser afetado por outros processos
Inconsistência de dados
Acesso concorrente aos dados compartilhados
Podem compartilhar um espaço de endereços lógicos
O Problema da Seção Crítica
Kernels com preempção
Melhor capacidade de resposta
Sujeito a condições de corrida
Mais apropriado para programação em tempo real
Kernels sem preempção
Livre de condições de corrida
Segmento de código que pode alterar dados
Comuns a vários processos/threads
É projetar um protocolo que processos utilizem
Requisitos obrigatórios de boa solução
Exclusão Mútua
Progresso
Espera limitada